Skip to content

Release Github Action #20

Release Github Action

Release Github Action #20

# SPDX-License-Identifier: MIT
name: Release Github Action
on:
workflow_dispatch:
inputs:
actor-email:
description: Insert your email address here. It will be used in the generated pull requests
required: true
ghaction-version:
description: Github Action Version (e.g. 1.0.0)
required: true
ghaction-milestone-number:
description: Github Action Milestone number (e.g. 70)
required: true
permissions:
contents: write
issues: write
pull-requests: write
env:
GHACTION: github-actions/scan
jobs:
release-version:
name: Create Github Action release
runs-on: ubuntu-latest
steps:
- name: "Show Inputs"
run: |
echo "actor-email: '${{ inputs.actor-email }}'"
echo "Github Action '${{ inputs.ghaction-version }}' - Milestone '${{ inputs.ghaction-milestone-number }}'"
# Check inputs:
- name: "Verify Input for Github Action release"
if: (inputs.ghaction-version == '') || (inputs.ghaction-milestone-number == '')
run: |
echo "For Github Action release, ghaction-version and ghaction-milestone-number must be provided!"
exit 1
- name: Checkout master
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
ref: master
# ----------------------
# Setup + Caching
# ----------------------
- name: Install required packages
run: sudo apt-get -y install hub
- name: Use Node.js
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version: 22
- name: Git setup
run: |
git config user.name "$GITHUB_TRIGGERING_ACTOR (via github-actions)"
git config user.email "${{ inputs.actor-email }}"
# ----------------------
# Create pull request if license headers are missing
# ----------------------
- name: run apply-headers.sh
id: apply-headers
run: |
./apply-headers.sh
git commit -am "SPDX headers added by SecHub release job @github-actions" || true
COMMITS=`git log --oneline --branches --not --remotes`
echo "commits=$COMMITS" >> $GITHUB_OUTPUT
- name: Create pull request for SPDX license headers
id: pr_spdx_headers
if: steps.apply-headers.outputs.commits != ''
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f
with:
branch: release-spdx-headers
branch-suffix: short-commit-hash
delete-branch: true
title: '0 - Before Github Action release: Add missing SPDX license headers [auto-generated]'
body: |
Auto-generated by Github Actions release job.
-> Please review and merge **before** publishing the ghaction release.
- name: Print PR infos
if: steps.apply-headers.outputs.commits != ''
run: |
echo "Pull Request Number - ${{ steps.pr_spdx_headers.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.pr_spdx_headers.outputs.pull-request-url }}"
# ----------------------
# Build SecHub Github Action + set package version
# ----------------------
- name: Build github-actions/scan and set package version to v${{ inputs.ghaction-version }}
run: |
cd $GHACTION
echo "# $GHACTION - Update package version to ${{ inputs.ghaction-version }}"
echo "$( jq --arg a "${{ inputs.ghaction-version }}" '.version = $a' package.json )" > package.json
echo "# $GHACTION - Install dependencies"
npm ci
echo "# $GHACTION - Run build"
npm run build
echo "# $GHACTION - Run unit tests"
npm test
# -----------------------------------------
# Create release issue
# -----------------------------------------
- name: Create SecHub Github Action ${{ inputs.ghaction-version }} release issue
id: release-issue
uses: dacbd/create-issue-action@main
with:
token: ${{ github.token }}
title: Release SecHub Github Action ${{ inputs.ghaction-version }}
body: |
See [Milestone ${{inputs.ghaction-milestone-number}}]( https://github.com/mercedes-benz/sechub/milestone/${{inputs.ghaction-milestone-number}}?closed=1) for details.
Please close this issue after the release.
milestone: ${{ inputs.ghaction-milestone-number }}
# ----------------------
# Create pull request for updated files
# ----------------------
- name: Commit build artifacts from above steps
id: github-actions_commit
run: |
git add -f "$GHACTION"/dist/*
git commit -am "SecHub release job @github-actions for Github Action ${{ inputs.ghaction-version }} #${{ steps.release-issue.outputs.number }}" || true
COMMITS=`git log --oneline --branches --not --remotes`
echo "commits=$COMMITS" >> $GITHUB_OUTPUT
- name: Create pull request for SecHub Github Action release
id: pr_gha-release
if: steps.github-actions_commit.outputs.commits != ''
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f
with:
branch: release-github-action
branch-suffix: short-commit-hash
delete-branch: true
title: '1 - Before Github Action release: Merge release artifacts [auto-generated]'
body: |
Auto-generated by Github Actions release job.
-> Please review and merge **before** publishing the ghaction release.
- name: Print PR infos
if: steps.github-actions_commit.outputs.commits != ''
run: |
echo "Pull Request Number - ${{ steps.pr_gha-release.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.pr_gha-release.outputs.pull-request-url }}"
# -----------------------------------------
# Create draft release
# -----------------------------------------
- name: Create Github Action ${{ inputs.ghaction-version }} release draft
shell: bash
run: |
# Define release data
tag_name="v${{ inputs.ghaction-version }}-gha"
release_title="Github Action Version ${{ inputs.ghaction-version }}"
release_message="Changes in this Release
- Some minor changes on Github Action implementation"
release_footer="For more details please look at [Milestone ${{inputs.ghaction-milestone-number}}]( https://github.com/mercedes-benz/sechub/milestone/${{inputs.ghaction-milestone-number}}?closed=1)"
echo "# Create release draft \"$release_title\" on github"
hub release create --draft -m "$release_title" -m "$release_message" -m "$release_footer" "$tag_name"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# -----------------------------------------
# Create a pull request for merging back `master` into `develop`
# -----------------------------------------
- name: pull-request master to develop
id: pr_master_to_develop
continue-on-error: true
uses: repo-sync/pull-request@7e79a9f5dc3ad0ce53138f01df2fad14a04831c5
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_branch: "master"
destination_branch: "develop"
pr_allow_empty: true # should allow an empty PR, but seems not to work
pr_title: '2 - After Github Action release: Merge master back into develop [auto-generated]'
pr_body: |
After SecHub Github Action release
- Github Action '${{ inputs.ghaction-version }}'
Merge master branch back into develop
-> Please merge **after** the release has been published.
- name: Print PR infos if PR was created
if: steps.pr_master_to_develop.outcome == 'success'
run: |
echo "Pull Request Number - ${{ steps.pr_master_to_develop.outputs.pr_number }}"
echo "Pull Request URL - ${{ steps.pr_master_to_develop.outputs.pr_url }}"
- name: Print info if no PR was created
if: steps.pr_master_to_develop.outcome != 'success'
run: |
echo "Nothing to merge - no pull request necessary."