#!/bin/bash # # Copyright (C) 2011 Denis 'GNUtoo' Carikli # Copyright (C) 2011-2015 Paul Kocialkowski # Copyright (C) 2017 Wolfgang Wiedmeyer # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # set -e # Variables SCRIPT="$0" REPLICANT_DIR="" RELEASE_DIR="" RELEASE_TYPE="" ARGS_COUNT=2 release_signatures_tools () { if ! [ -d "$TOOLS" ] then return fi dir=$( pwd ) cd "$TOOLS" for tool in $RELEASE_TOOLS do gpg --default-key "$RELEASE_KEY" --armor --output "$tool.asc" --detach-sign "$tool" done cd "$dir" } release_signatures_images () { if ! [ -d "$IMAGES" ] then return fi cd "$IMAGES" for device in $RELEASE_DEVICES do for image in $RELEASE_IMAGES do if [ -f "$IMAGES/$device/$image" ] then gpg --default-key "$RELEASE_KEY" --armor --output "$IMAGES/$device/$image.asc" --detach-sign "$IMAGES/$device/$image" fi done done } release_signatures () { echo "Releasing signatures" release_signatures_tools release_signatures_images mkdir -p "$SECURITY" gpg --armor --output "$SECURITY/$RELEASE_KEY.asc" --export "$RELEASE_KEY" dir=$( pwd ) cd "$SECURITY" rm "security.sha256" sha256sum * > "security.sha256" cd "$dir" } release_images () { echo "Releasing images" for device in $RELEASE_DEVICES do echo "Releasing images for $device" mkdir -p "$IMAGES/$device" for image in $RELEASE_IMAGES do if [ -f "$RELEASE_IMAGES_DIR/$device/$image" ] then cp "$RELEASE_IMAGES_DIR/$device/$image" "$IMAGES/$device/" fi done dir=$( pwd ) cd "$IMAGES/$device" sha256sum * > "$device.sha256" cd "$dir" done } release_tools () { echo "Releasing tools" mkdir -p "$TOOLS" for tool in $RELEASE_TOOLS do cp "$RELEASE_TOOLS_DIR/$tool" "$TOOLS/" done dir=$( pwd ) cd "$TOOLS" sha256sum * > "tools.sha256" cd "$dir" } release_scripts () { echo "Releasing scripts" mkdir -p "$SCRIPTS" for script in $RELEASE_SCRIPTS do cp "$RELEASE_SCRIPTS_DIR/$script" "$SCRIPTS/" done } release_security () { echo "Releasing security" mkdir -p "$SECURITY" for security in $RELEASE_SECURITY do cp "$RELEASE_SECURITY_DIR/$security" "$SECURITY/" done dir=$( pwd ) cd "$SECURITY" sha256sum * > "security.sha256" cd "$dir" } release_metadata_about () { cat "$REPLICANT_DIR/vendor/replicant/README.mkdn" | awk "/^Replicant$/{replicant=1} /^LineageOS$/{replicant=0} replicant" > "$METADATA/readme.txt" } release_metadata_date () { date "+%Y-%m-%d" > "$METADATA/date.txt" } release_metadata_changelog () { cat "$REPLICANT_DIR/vendor/replicant/CHANGELOG.mkdn" \ | awk "/### .*/{n++} n==1, /### .*/ {n++} n==2" \ | sed '/===============/q' | tac | sed -e '/===============/,+1d' | tac > "$METADATA/changelog.txt" } release_metadata_release () { echo "replicant-$RELEASE" > "$METADATA/release.txt" } release_metadata_prebuilt () { if [ -d "$REPLICANT_DIR/vendor/replicant/prebuilt/common/apps/" ] ; then dir=$( pwd ) cd "$REPLICANT_DIR/vendor/replicant/prebuilt/common/apps/" sha256sum *.apk > "$METADATA/prebuilt.sha256" cd "$dir" fi } release_metadata_git () { dir=$( pwd ) cd "$REPLICANT_DIR" for git_repo in ".repo/manifests" do cd $git_repo echo "manifest" git show --format=oneline -s "replicant-$RELEASE" echo "" cd "$REPLICANT_DIR" done > "$METADATA/git-tags.txt" $REPO --no-pager list -p | while read git_repo do if ! [ "$git_repo" = "manifest" ] then cd $git_repo echo "$git_repo" git show --format=oneline -s $(git describe) echo "" cd "$REPLICANT_DIR" fi done >> "$METADATA/git-tags.txt" $REPO --no-pager manifest -r -o "$METADATA/manifest.xml" cd "$dir" } release_metadata () { echo "Releasing metadata" mkdir -p "$METADATA" release_metadata_git release_metadata_prebuilt release_metadata_release release_metadata_changelog release_metadata_date release_metadata_about } print_help () { echo "$SCRIPT: [REPLICANT_DIR] [RELEASE_DIR] (RELEASE_TYPE)" } # Check for the correct number of args if [ "$#" -lt "$ARGS_COUNT" ] then print_help exit 1 fi REPLICANT_DIR="$(realpath $1)" RELEASE_DIR="$(realpath $2)" RELEASE_TYPE="$3" . $(dirname $0)/releasevars.sh RELEASE_TOOLS_DIR="$REPLICANT_DIR/out/host/linux-x86/bin" RELEASE_TOOLS="adb fastboot heimdall mkbootimg unpackbootimg" RELEASE_IMAGES_DIR="$REPLICANT_DIR/out/dist" RELEASE_SCRIPTS_DIR=$( dirname "$SCRIPT" ) RELEASE_SCRIPTS="release.sh releasediff.sh releasetag.sh releasevars.sh build_release.sh" RELEASE_SECURITY_DIR="$REPLICANT_DIR/vendor/replicant-security" RELEASE_SECURITY="media.x509.pem platform.x509.pem releasekey.x509.pem shared.x509.pem" case "$RELEASE_TYPE" in "signatures_tools") release_signatures_tools ;; "signatures_images") release_signatures_images ;; "signatures") release_signatures ;; "images") release_images ;; "tools") release_tools ;; "scripts") release_scripts ;; "security") release_security ;; "metadata_about") release_metadata_about ;; "metadata_date") release_metadata_date ;; "metadata_changelog") release_metadata_changelog ;; "metadata_release") release_metadata_release ;; "metadata_prebuilt") release_metadata_prebuilt ;; "metadata_git") release_metadata_git ;; "metadata") release_metadata ;; *) release_metadata release_security release_scripts release_tools release_images ;; esac