Setup and update common workflows #53
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Setup and update common workflows | |
on: | |
schedule: | |
- cron: "0 2 * * *" | |
workflow_dispatch: | |
inputs: | |
config: | |
description: 'Config' | |
required: false | |
default: '' | |
jobs: | |
update: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout default branch | |
# https://github.com/marketplace/actions/checkout | |
uses: actions/checkout@v2 | |
with: | |
token: ${{ secrets.GH_WORKFLOWS_TOKEN }} | |
- name: Read config | |
run: | | |
CONFIG='{}' | |
if [[ ! -z '${{ github.event.inputs.config }}' ]]; then | |
CONFIG='${{ github.event.inputs.config }}' | |
elif [[ -f "./.github/workflows-config.json" ]]; then | |
CONFIG=$( jq -c .setupWorkflows './.github/workflows-config.json' ) | |
fi | |
echo "CONFIG=$CONFIG" >> $GITHUB_ENV | |
echo "Workflow config: $CONFIG" | |
- name: Process config | |
run: | | |
AS_PR=$(echo '${{ env.CONFIG }}' | jq -r ".pushAsPullRequest") | |
if [[ "$AS_PR" == "true" ]]; then | |
echo "AS_PR=1" >> $GITHUB_ENV | |
else | |
echo "AS_PR=0" >> $GITHUB_ENV | |
fi | |
BRANCH_SOURCE=$(git rev-parse --abbrev-ref HEAD) | |
if [[ "$AS_PR" == "true" ]]; then | |
BRANCH_SOURCE="t/setup-workflows-update_$BRANCH_SOURCE" | |
fi | |
echo "BRANCH_SOURCE=$BRANCH_SOURCE" >> $GITHUB_ENV | |
- name: Check if update branch already exists | |
if: env.AS_PR == 1 | |
run: | | |
if [[ $(git ls-remote --heads | grep ${{ env.BRANCH_SOURCE }} | wc -c) -ne 0 ]]; then | |
echo "SHOULD_CANCEL=1" >> $GITHUB_ENV | |
fi | |
- name: Cancel build if update branch already exists | |
if: env.SHOULD_CANCEL == 1 | |
# https://github.com/marketplace/actions/cancel-this-build | |
uses: andymckay/[email protected] | |
- name: Wait for cancellation | |
if: env.SHOULD_CANCEL == 1 | |
# https://github.com/marketplace/actions/wait-sleep | |
uses: jakejarvis/wait-action@master | |
with: | |
time: '60s' | |
- name: Checkout common workflows repository | |
# https://github.com/marketplace/actions/checkout | |
uses: actions/checkout@v2 | |
with: | |
path: ckeditor4-workflows-common | |
repository: ckeditor/ckeditor4-workflows-common | |
ref: master | |
- name: Setup workflows directory | |
run: | | |
mkdir -p .github/workflows | |
- name: Synchronize workflow files | |
run: | | |
rsync -a --include='*/' --include='*.yml' --exclude='*' ./ckeditor4-workflows-common/workflows/ ./.github/workflows/ | |
if [[ $(git status ./.github/workflows/ --porcelain) ]]; then | |
echo "HAS_CHANGES=1" >> $GITHUB_ENV | |
fi | |
- name: Cleanup common workflows artifacts | |
run: | | |
rm -rf ckeditor4-workflows-common | |
- name: Checkout PR branch | |
if: env.HAS_CHANGES == 1 | |
run: | | |
git checkout -b "t/${{ env.BRANCH_SOURCE }}" | |
- name: Add changes | |
if: env.HAS_CHANGES == 1 | |
run: | | |
git config --local user.email "${{ secrets.GH_BOT_EMAIL }}" | |
git config --local user.name "${{ secrets.GH_BOT_USERNAME }}" | |
git add .github/workflows | |
git commit -m "Update common workflows." | |
- name: Push changes | |
if: env.HAS_CHANGES == 1 | |
# https://github.com/marketplace/actions/github-push | |
uses: ad-m/github-push-action@master | |
with: | |
github_token: ${{ secrets.GH_WORKFLOWS_TOKEN }} | |
branch: ${{ env.BRANCH_SOURCE }} | |
- name: Create PR | |
if: env.HAS_CHANGES == 1 && env.AS_PR == 1 | |
# https://github.com/marketplace/actions/github-pull-request-action | |
uses: repo-sync/pull-request@v2 | |
with: | |
source_branch: "${{ env.BRANCH_SOURCE }}" | |
destination_branch: "${{ github.ref }}" | |
pr_title: "Update 'setup-workflows' workflow" | |
pr_body: "Update 'setup-workflows' workflow." | |
github_token: ${{ secrets.GITHUB_TOKEN }} |