Skip to content

Automate changelog note #366

Automate changelog note

Automate changelog note #366

Workflow file for this run

name: Build configmgr
on:
push:
branches:
- v2.x/staging
- v2.x/master
- v2.x/rc
pull_request:
types: [opened, reopened, synchronize]
workflow_dispatch:
inputs:
PERFORM_RELEASE:
description: '[Release] perform release'
required: false
default: 'false'
jobs:
check-permission:
runs-on: ubuntu-latest
steps:
# this action will fail the whole workflow if permission check fails
- name: check permission
uses: zowe-actions/shared-actions/permission-check@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
update-changelog:
runs-on: ubuntu-latest
outputs:
was_updated: ${{ steps.check-change.outputs.change_detected }}
check_commit: ${{ steps.check-changelog.outputs.check_commit }}
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Check for updated CHANGELOG.md using git
id: check-changelog
run: |
if git diff --name-only origin/${{ github.base_ref }} | grep -q "^CHANGELOG.md$"; then
echo "CHANGELOG.md has been updated."
echo "::set-output name=check_commit::true"
else
echo "ERROR: CHANGELOG.md has not been updated."
echo "::set-output name=check_commit::false"
fi
- name: Extract changelog info
if: steps.check-changelog.outputs.check_commit == 'false'
id: extract-changelog
run: |
PR_DESCRIPTION="${{ github.event.pull_request.body }}"
# Check if "changelog:" exists in PR description
if echo "$PR_DESCRIPTION" | grep -q "VERSION:" && echo "$PR_DESCRIPTION" | grep -q "CHANGELOG:"; then
# Extract text after "changelog:"
CHANGELOG_TEXT=$(echo $PR_DESCRIPTION | sed -n 's/.*CHANGELOG: \(.*\)/\1/p')
# Extract VERSION: from PR description
VERSION=$(echo "$PR_DESCRIPTION" | grep -oP 'VERSION:\s*\K\d+\.\d+\.\d+')
echo "Extracted changelog: $CHANGELOG_TEXT"
echo "::set-output name=changelog::$CHANGELOG_TEXT"
echo "::set-output name=version::$VERSION"
else
echo -e "No changelog and version information found in PR description please add them.\n Expected Format:\n VERSION:X.XX.X\n CHANGELOG:This is changelog note.\n
To re-run the action, just make a push or commit after updating the PR description or updating the changelog via a manual file changing commit."
exit 1
fi
- name: Check PR body against changelog
if: steps.check-changelog.outputs.check_commit == 'false'
run: |
ESCAPED_CHANGELOG="${{ steps.extract-changelog.outputs.changelog }}"
ESCAPED_CHANGELOG=$(echo "$ESCAPED_CHANGELOG" | sed "s/'/\\\\'/g")
VERSION="${{ steps.extract-changelog.outputs.version }}"
if ! grep -Fq "$ESCAPED_CHANGELOG" CHANGELOG.md; then
# Check if version exists in CHANGELOG.md
if grep -q "^## \`$VERSION\`" CHANGELOG.md; then
# Append PR description to existing version
sed -i "/^## \`$VERSION\`/a - $ESCAPED_CHANGELOG (#${{ github.event.pull_request.number }})" CHANGELOG.md
else
# Append new version and PR description
ANCHOR_LINE=$(awk '/# Zowe Common C Changelog/ {print NR}' CHANGELOG.md)
sed -i "$ANCHOR_LINE a\\
\n## \`$VERSION\`\n- $ESCAPED_CHANGELOG (#${{ github.event.pull_request.number }})\n" CHANGELOG.md
fi
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add CHANGELOG.md
git commit -m "Update changelog with PR #${{ github.event.pull_request.number }} description"
git push
fi
- name: check for changes
id: check-change
run: |
if git diff --name-only HEAD^ HEAD | grep 'changelog.md'; then
echo "No Changes detected, setting flag to false"
echo "::set-output name=change_detected::false"
else
echo "::set-output name=change_detected::true"
fi
check_changelog:
needs: update-changelog
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Verify Changelog update
run: |
if [ "${{ needs.update-changelog.outputs.was_updated }}" != "true" ]; then
echo "CHANGELOG.md not updated, please update CHANGELOG.md with the changes made in the pull request"
exit 1
else
echo "changelog was updated successfully."
fi
build-test:
runs-on: ubuntu-latest
needs: check-permission
steps:
- name: '[Prep 1] Checkout'
uses: actions/checkout@v2
- name: '[Dep 1] Libyaml'
uses: actions/checkout@v3
with:
repository: yaml/libyaml
path: deps/configmgr/libyaml
ref: '0.2.5'
- name: '[Dep 2] Quickjs'
uses: actions/checkout@v3
with:
repository: joenemo/quickjs-portable
path: deps/configmgr/quickjs
ref: 'main'
- name: '[Prep 2] Setup jFrog CLI'
uses: jfrog/setup-jfrog-cli@v2
env:
JF_ARTIFACTORY_1: ${{ secrets.JF_ARTIFACTORY_TOKEN }}
- name: '[Prep 3] Set date'
id: date
run: echo "date=$(date +'%Y%m%d%S')" >> $GITHUB_OUTPUT
- name: '[Prep 4] Set version'
id: version
run: echo "version=$(cat build/configmgr.proj.env | grep VERSION | cut -f 2 -d=)" >> $GITHUB_OUTPUT
- name: '[Prep 5] Set branchname'
id: branch
run: echo "branch=$(if [ -n '${{ github.head_ref }}' ]; then echo '${{ github.head_ref }}' | tr '[:lower:]' '[:upper:]'; else echo '${{ github.ref_name }}' | tr '[:lower:]' '[:upper:]'; fi | sed 's@/@-@g')" >> $GITHUB_OUTPUT
- name: '[Prep 6] Prepare workflow'
uses: zowe-actions/shared-actions/prepare-workflow@main
- name: '[Packaging] Make pax'
uses: zowe-actions/shared-actions/make-pax@main
with:
pax-name: 'configmgr'
pax-options: '-x os390 -pp'
pax-local-workspace: './.pax/configmgr'
pax-ssh-username: ${{ secrets.SSH_MARIST_USERNAME }}
pax-ssh-password: ${{ secrets.SSH_MARIST_RACF_PASSWORD }}
- name: '[Publish] Publish'
uses: zowe-actions/shared-actions/publish@main
if: success()
with:
artifacts: |
.pax/configmgr/configmgr.pax
publish-target-path-pattern: libs-snapshot-local/org/zowe/configmgr/${{ steps.version.outputs.version }}-${{ steps.branch.outputs.branch }}
publish-target-file-pattern: configmgr-${{ steps.version.outputs.version }}-${{ steps.date.outputs.date }}.pax
perform-release: ${{ github.event.inputs.PERFORM_RELEASE }}
- name: '[Prep Release] Bump version'
if: ${{ github.event.inputs.PERFORM_RELEASE == 'true' }}
uses: zowe-actions/zlux-builds/[email protected]/main
with:
version: 'MINOR'
env:
GITHUB_TOKEN: ${{ secrets.ZOWE_ROBOT_TOKEN }}