Combine update-readme and tag-and-release GitHub Actions
parent
bf047ffdbd
commit
8f3ff464da
|
@ -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'
|
|
@ -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
|
|
@ -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.'
|
|
@ -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 \
|
||||
|
|
Loading…
Reference in New Issue