From 8b1630641965b97b2c840e52eda88f358307a15b Mon Sep 17 00:00:00 2001 From: tituspijean Date: Thu, 2 Sep 2021 13:33:10 +0200 Subject: [PATCH] Implement GitHub Action to upgrade from upstream --- .github/workflows/main.yml | 74 ++++++++++++++++++++++++++++++++++++ .github/workflows/updater.sh | 29 ++++++++++++++ scripts/update_version.sh | 53 -------------------------- 3 files changed, 103 insertions(+), 53 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/updater.sh delete mode 100755 scripts/update_version.sh diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..ba7ebe6 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,74 @@ +name: Check for new upstream releases +on: + workflow_dispatch: + schedule: + - cron: '0 8 * * *' +jobs: + updater: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Check if newer version is available upstream + id: check_version + run: | + # Fetching information + current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') + repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') + version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -j '[ .[] | .tag_name ] | sort | last') + download_url=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -j '.[] | select(.tag_name=="'$version'").assets[0].browser_download_url') + echo "Current version: $current_version" + echo "Latest release from upstream: $version" + echo "VERSION=$version" >> $GITHUB_ENV + echo "DOWNLOAD_URL=$download_url" >> $GITHUB_ENV + if dpkg --compare-versions "$current_version" "lt" "$version"; then + echo ::set-output name=to_update::true + else + echo ::set-output name=to_update::false + echo "::warning ::No new version available" + fi + - name: Update package files + id: update_files + if: steps.check_version.outputs.to_update == 'true' + run: | + # Setting up Git user + git config --global user.name 'yunohost-bot' + git config --global user.email 'yunohost-bot@users.noreply.github.com' + + # Run the version updater script + chmod +x ./.github/workflows/updater.sh + ./.github/workflows/updater.sh + + # Replace new version in manifest + sed -i "s# \"version\": \".*# \"version\": \"${VERSION}\~ynh1\",#" manifest.json + + # Commit + git commit -am "Upgrade to v$VERSION" + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v3 + if: steps.check_version.outputs.to_update == 'true' + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: Update to version ${{ env.VERSION }} + committer: 'yunohost-bot ' + author: 'yunohost-bot ' + signoff: false + branch: v${{ env.VERSION }} + delete-branch: true + title: 'Upgrade to version ${{ env.VERSION }}' + body: | + Upgrade to v${{ env.VERSION }} + draft: false + - name: Check outputs + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" + - name: Trigger CI + uses: peter-evans/create-or-update-comment@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ steps.cpr.outputs.pull-request-number }} + body: | + !testme diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh new file mode 100644 index 0000000..ad86c2b --- /dev/null +++ b/.github/workflows/updater.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Create the temporary directory +tempdir="$(mktemp -d)" + +# Download sources and calculate checksum +filename=${DOWNLOAD_URL##*/} +curl --silent -4 -L $DOWNLOAD_URL -o "$tempdir/$filename" +checksum=$(sha256sum "$tempdir/$filename" | head -c 64) + +# Delete temporary directory +rm -rf $tempdir + +# Get extension +if [[ $filename == *.tar.gz ]]; then +extension=tar.gz +else +extension=${filename##*.} +fi + +# Rewrite source file +cat < conf/app.src +SOURCE_URL=$DOWNLOAD_URL +SOURCE_SUM=$checksum +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=$extension +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= +EOT diff --git a/scripts/update_version.sh b/scripts/update_version.sh deleted file mode 100755 index 45149e1..0000000 --- a/scripts/update_version.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -source /usr/share/yunohost/helpers - -repo="node-red/node-red" - -#================================================= -# META HELPER FOR PACKAGE RELEASES -#================================================= - -# This script is meant to be manually run by the app packagers -# to automatically update the source files. - -# Thanks @lukechild and @jbellocastro -# https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c -version=$(curl --silent "https://api.github.com/repos/$repo/releases/latest" | jq -r ".tag_name") -download_url=$(curl --silent "https://api.github.com/repos/$repo/releases/latest" | jq -r ".assets[0].browser_download_url") - -# Create the temporary directory -tempdir="$(mktemp -d)" - -# Download sources and calculate checksum -filename=${download_url##*/} -curl --silent -4 -L $download_url -o "$tempdir/$filename" -checksum=$(sha256sum "$tempdir/$filename" | head -c 64) -ynh_secure_remove $tempdir - -# Get extension -if [[ $filename == *.tar.gz ]]; then - extension=tar.gz -else - extension=${filename##*.} -fi - -cat < ../conf/app.src -SOURCE_URL=$download_url -SOURCE_SUM=$checksum -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=$extension -SOURCE_IN_SUBDIR=true -SOURCE_FILENAME= -EOT - -sed -i "s#\*\*Shipped version:\*\*.*#\*\*Shipped version:\*\* ${version}#" ../README.md -sed -i "s#\*\*Version incluse :\*\*.*#\*\*Version incluse :\*\* ${version}#" ../README_fr.md -sed -i "s# \"version\": \".*# \"version\": \"${version}\~ynh1\",#" ../manifest.json - -message="Upgrade to v$version" -if [ "$message" == "$(git show -s --format=%s)" ]; then - git commit ../README.md ../README_fr.md ../manifest.json ../conf/app.src --amend -m "$message" -else - git commit ../README.md ../README_fr.md ../manifest.json ../conf/app.src -m "$message" -fi