From 8f3ff464dabe30087c154157ab33a3bc80f8e549 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Wed, 9 Dec 2020 10:43:12 +0100 Subject: [PATCH] Combine update-readme and tag-and-release GitHub Actions --- ...tag-and.release.yml => readme-release.yml} | 57 +++++++++++---- .github/workflows/update-readme.yml | 23 ------ scripts/ci-update-readme | 70 ------------------- scripts/invoke-shfmt | 1 - 4 files changed, 42 insertions(+), 109 deletions(-) rename .github/workflows/{tag-and.release.yml => readme-release.yml} (75%) delete mode 100644 .github/workflows/update-readme.yml delete mode 100755 scripts/ci-update-readme diff --git a/.github/workflows/tag-and.release.yml b/.github/workflows/readme-release.yml similarity index 75% rename from .github/workflows/tag-and.release.yml rename to .github/workflows/readme-release.yml index 5e5a683..33b0c12 100644 --- a/.github/workflows/tag-and.release.yml +++ b/.github/workflows/readme-release.yml @@ -1,4 +1,4 @@ -name: Create tag and release +name: Update README and create release on: push: @@ -7,6 +7,9 @@ on: create: tags: - "*" + repository_dispatch: + types: + - readme-release jobs: create-and-release: @@ -14,19 +17,36 @@ jobs: env: VERSIONTAG_THIS: "" steps: - - name: Sleep for a while after a push - if: github.event_name == 'push' && github.ref == 'refs/heads/master' - uses: juliangruber/sleep-action@v1 - with: - time: 30s - name: Checkout - if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'create' && github.event.ref_type == 'tag') + if: > + (github.event_name == 'push' && github.ref == 'refs/heads/master') + || (github.event_name == 'create' && github.event.ref_type == 'tag') + || github.event_name == 'repository_dispatch' uses: actions/checkout@v2 with: ref: master fetch-depth: 0 + - name: Update README + if: > + (github.event_name == 'push' && github.ref == 'refs/heads/master') + || github.event_name == 'repository_dispatch' + run: | + ./scripts/update-readme + if ! git ls-files -m | grep -qE '^README\.md$'; then + echo 'README.md has not been changed' + else + echo 'README.md has been updated' + git config user.name 'Michele Locati' + git config user.email 'michele@locati.it' + git add README.md + git commit -m '[skip ci] Automatically update README.md' + git push + fi - name: Looking for the recent version tags - if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'create' && github.event.ref_type == 'tag') + if: > + (github.event_name == 'push' && github.ref == 'refs/heads/master') + || (github.event_name == 'create' && github.event.ref_type == 'tag') + || github.event_name == 'repository_dispatch' run: | TAGS="$(git tag --list --sort=-version:refname)" VERSIONTAG_LAST= @@ -51,12 +71,12 @@ jobs: - name: Checking if we need to create a version tag after a push if: github.event_name == 'push' && github.ref == 'refs/heads/master' run: | + VERSIONTAG_THIS= if test -z "$VERSIONTAG_LAST"; then printf 'We need to create the first version tag\n' VERSIONTAG_THIS=1.0.0 - elif test "$GITHUB_SHA" = "$(git rev-list -n 1 "refs/tags/$VERSIONTAG_LAST")"; then + elif test "$(git rev-parse HEAD)" = "$(git rev-list -n 1 "refs/tags/$VERSIONTAG_LAST")"; then printf 'Another action should already take care of creating the release\n' - VERSIONTAG_THIS= else CREATE_TAG=n for CHANGED_FILE in $(git diff --name-only "refs/tags/$VERSIONTAG_LAST" HEAD); do @@ -70,17 +90,24 @@ jobs: VERSIONTAG_THIS="${VERSIONTAG_LAST%.*}.$((${VERSIONTAG_LAST##*.}+1))" printf 'We need to create new version tag %s since relevant files changed\n' "$VERSIONTAG_THIS" else - VERSIONTAG_THIS= printf 'We do not need to create a new version tag since no relevant files changed\n' fi fi printf 'VERSIONTAG_THIS=%s\n' "$VERSIONTAG_THIS" >> "$GITHUB_ENV" printf 'VERSIONTAG_PREVIOUS=%s\n' "$VERSIONTAG_LAST" >> "$GITHUB_ENV" + - name: Sleep for a while before creating a tag + if: env.VERSIONTAG_THIS != '' + uses: juliangruber/sleep-action@v1 + with: + time: 30s - name: Create version tag after a push in the local repository - if: github.event_name == 'push' && github.ref == 'refs/heads/master' && env.VERSIONTAG_THIS != '' - run: git tag -- "$VERSIONTAG_THIS" + id: create_tag + if: env.VERSIONTAG_THIS != '' + run: | + git tag -- "$VERSIONTAG_THIS" + echo "::set-output name=tag_sha::$(git rev-parse HEAD)" - name: Create version tag after a push in the remote repository - if: github.event_name == 'push' && github.ref == 'refs/heads/master' && env.VERSIONTAG_THIS != '' + if: env.VERSIONTAG_THIS != '' uses: actions/github-script@v3 with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -89,7 +116,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, ref: `refs/tags/${process.env.VERSIONTAG_THIS}`, - sha: context.sha + sha: steps.create_tag.outputs.tag_sha }) - name: Check format of received tag if: github.event_name == 'create' && github.event.ref_type == 'tag' diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml deleted file mode 100644 index 0f316f6..0000000 --- a/.github/workflows/update-readme.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Update README - -on: - push: - branches: - - master - repository_dispatch: - types: - - update-readme - -jobs: - update_readme: - name: Update README - runs-on: ubuntu-latest - if: "!contains(github.event.head_commit.message, '[skip ci]')" - steps: - - name: Checkout - uses: actions/checkout@v1 - - name: Update README - env: - DEPLOY_KEY: "${{ secrets.DEPLOY_KEY }}" - GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no" - run: ./scripts/ci-update-readme diff --git a/scripts/ci-update-readme b/scripts/ci-update-readme deleted file mode 100755 index ca1d063..0000000 --- a/scripts/ci-update-readme +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh - -# Let's set a sane environment -set -o errexit -set -o nounset - -UPDATE_README_COMMIT_AUTHOR_NAME='CI' -UPDATE_README_COMMIT_AUTHOR_EMAIL='michele@locati.it' -UPDATE_README_COMMIT_MESSAGE='[skip ci] Automatically update README.md' -WATCHED_FILES='data/special-requirements data/supported-extensions scripts/common scripts/update-readme scripts/ci-update-readme' -UPDATE_BRANCH='master' - -echo 'Checking environment' -if test -z "${GITHUB_WORKSPACE:-}" || test -z "${GITHUB_REF:-}" || test -z "${GITHUB_EVENT_NAME:-}" || test -z "${GITHUB_REPOSITORY:-}"; then - echo 'Not in a GitHub Actions environment' >&2 - exit 1 -fi -if test "$GITHUB_EVENT_NAME" != 'push' || test "$GITHUB_REF" != "refs/heads/$UPDATE_BRANCH"; then - echo 'This script should only be run in push builds to %s' "$UPDATE_BRANCH" >&2 - exit 1 -fi -if test -z "${DEPLOY_KEY:-}"; then - echo 'GitHub deploy key not set' >&2 - exit 1 -fi - -SCRIPTS_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" -. "$SCRIPTS_DIR/common" - -cd "$GITHUB_WORKSPACE" - -printf 'Checking-out branch %s\n' "$UPDATE_BRANCH" -git checkout --force "$UPDATE_BRANCH" - -LAST_AUTO_UPDATED_IN="$(git rev-list --max-count 1 --author "<$UPDATE_README_COMMIT_AUTHOR_EMAIL>" --grep "$UPDATE_README_COMMIT_MESSAGE" "$UPDATE_BRANCH")" -if test -z "$LAST_AUTO_UPDATED_IN"; then - printf 'Rebuild of README.md enabled (no previous automatic refresh of it in branch %s)\n' "$UPDATE_BRANCH" -else - MODIFIED_FILES_SINCE="$(git diff --name-only "$LAST_AUTO_UPDATED_IN...$UPDATE_BRANCH")" - if test -z "$(commonElements "$WATCHED_FILES" "$MODIFIED_FILES_SINCE")"; then - printf 'Rebuild of README.md not needed (no relevant files changed in branch %s since commit %s)\n' "$UPDATE_BRANCH" "$LAST_AUTO_UPDATED_IN" - exit 0 - fi - printf 'Rebuild of README.md enabled (relevant files changed in branch %s since commit %s)\n' "$UPDATE_BRANCH" "$LAST_AUTO_UPDATED_IN" -fi - -echo 'Updating README.md' -"$SCRIPTS_DIR/update-readme" -if test -z "$(git ls-files -m | grep -E '^README\.md$')"; then - echo 'README.md has not been changed' - exit 0 -fi - -printf 'Initializing SSH' -eval "$(ssh-agent)" -printf '%s' "$DEPLOY_KEY" | tr -d '\r' | ssh-add - >/dev/null - -printf 'Adding %s remote\n' "$GITHUB_REPOSITORY" -git remote add deploy "git@github.com:$GITHUB_REPOSITORY.git" - -echo 'Committing changes to README.md' -git config user.name "$UPDATE_README_COMMIT_AUTHOR_NAME" -git config user.email "$UPDATE_README_COMMIT_AUTHOR_EMAIL" -git add README.md -git commit -m "$UPDATE_README_COMMIT_MESSAGE" - -printf 'Pushing to %s\n' "$GITHUB_REPOSITORY" -git push deploy "$UPDATE_BRANCH:$UPDATE_BRANCH" - -echo 'Done.' diff --git a/scripts/invoke-shfmt b/scripts/invoke-shfmt index 46a78b4..b071c2c 100755 --- a/scripts/invoke-shfmt +++ b/scripts/invoke-shfmt @@ -23,7 +23,6 @@ shfmt $PARAMS \ scripts/ci-filter-supported-extensions \ scripts/ci-retrieve-recent-extensions \ scripts/ci-test-extensions \ - scripts/ci-update-readme \ scripts/common \ scripts/invoke-shfmt \ scripts/lint \