mirror of
https://github.com/Unleash/unleash.git
synced 2024-10-28 19:06:12 +01:00
07354f7218
Relying on tags to trigger workflows makes it hard to trace what's happening after a release, currently: 1. We manually trigger a release workflow 2. The release workflow executes and tags the new release in code 3. Several other workflows trigger after matching the tag doing different things: build docker images, tarballs and other things. This creates a loose dependency between the workflows which are actually part of the same "release workflow" which makes it difficult to spot when one or other dependent workflow fails because the dependency is indirect through the tagging mechanism. This PR switches to a more direct approach using [workflow calls](https://docs.github.com/en/actions/using-workflows/reusing-workflows). This will create a graph as shown in the following graph: ![](https://docs.github.com/assets/cb-34427/mw-1440/images/help/actions/reusable-workflows-ci-cd.webp) making it easier to track and identify any problem. The "drawback" of this approach is that previously we could trigger all dependent workflows at once by creating a tag matching the expected pattern without manually triggering a new release. This limitation can be overcome by adding a manual workflow_dispatch to the workflows using the tag trigger.
137 lines
4.2 KiB
YAML
137 lines
4.2 KiB
YAML
name: Run npm version and push tags
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: What version number would you like to use? The version number should be **without** a leading `v`, e.g. `5.7.1` or `6.2.4`.
|
|
bump-main:
|
|
description: Should we bump the package.json main version?
|
|
required: true
|
|
type: boolean
|
|
default: true
|
|
update-version-function:
|
|
description: Should we update the version function to use this version?
|
|
required: true
|
|
type: boolean
|
|
default: true
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
matrix:
|
|
node-version: [20.x]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.GH_PUSH_TOKEN }}
|
|
- name: Set up git-cliff
|
|
uses: kenji-miyake/setup-git-cliff@v2
|
|
- name: setup git config
|
|
run: |
|
|
git config user.name "Github Actions Bot"
|
|
git config user.email "<>"
|
|
- name: Use Node.js ${{ matrix.node-version }}
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
cache: 'yarn'
|
|
- if: ${{ endsWith(github.event.inputs.version, '0') }}
|
|
run: |
|
|
PREV_COMMIT=$(git rev-list --tags --max-count=1)
|
|
echo PREV=$(git describe --tags ${PREV_COMMIT}) >> $GITHUB_ENV
|
|
- if: ${{ !endsWith(github.event.inputs.version, '0') }}
|
|
run: echo PREV=$(git describe --abbrev=0) >> $GITHUB_ENV
|
|
- name: Generate changelog from ${{ env.PREV }}
|
|
continue-on-error: true
|
|
if: ${{ !contains(github.event.inputs.version, '-') }}
|
|
env:
|
|
PREV: ${{ env.PREV }}
|
|
run: |
|
|
git-cliff ${{ env.PREV }}..HEAD --tag v${{ github.event.inputs.version }} --prepend CHANGELOG.md
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
git commit -am "docs: Update CHANGELOG.md"
|
|
else
|
|
echo "No changes to CHANGELOG.md"
|
|
fi
|
|
- run: yarn install --frozen-lockfile --ignore-scripts
|
|
- name: npm version
|
|
run: |
|
|
npm version ${{ github.event.inputs.version }} --ignore-scripts
|
|
git push origin ${{ github.ref_name }}
|
|
git push --tags
|
|
env:
|
|
CI: true
|
|
|
|
update-main-version:
|
|
needs: build
|
|
if: ${{ github.event.inputs.bump-main == 'true' }}
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: checkout main branch
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: main
|
|
fetch-depth: 0
|
|
token: ${{ secrets.GH_PUSH_TOKEN }}
|
|
- name: setup git config
|
|
run: |
|
|
git config user.name "GitHub Actions Bot"
|
|
git config user.email "<>"
|
|
- name: Use Node js 18
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '18.x'
|
|
cache: 'yarn'
|
|
- name: upgrade package version
|
|
run: |
|
|
jq --arg version "${{ github.event.inputs.version }}+main" '.version=$version' package.json > package.json.tmp
|
|
mv package.json.tmp package.json
|
|
- name: lint
|
|
run: |
|
|
yarn install --frozen-lockfile --ignore-scripts
|
|
yarn lint:fix
|
|
- name: push changes
|
|
run: |
|
|
git add package.json
|
|
git commit -m "chore: bump version to ${{ github.event.inputs.version }}+main"
|
|
git push origin main
|
|
|
|
publish-docker:
|
|
needs: build
|
|
uses: ./.github/workflows/docker_publish.yaml
|
|
with:
|
|
version: ${{ github.event.inputs.version }}
|
|
|
|
publish-npm:
|
|
needs: build
|
|
uses: ./.github/workflows/release.yaml
|
|
with:
|
|
version: ${{ github.event.inputs.version }}
|
|
|
|
release-changelog: # TODO this changelog is different than the git-cliff one above
|
|
needs: build
|
|
uses: ./.github/workflows/release_changelog.yml
|
|
with:
|
|
version: ${{ github.event.inputs.version }}
|
|
|
|
update-version-checker:
|
|
needs: publish-docker
|
|
if: ${{ github.event.inputs.update-version-function == 'true' }}
|
|
uses: ./.github/workflows/update_version_for_version_checker.yml
|
|
with:
|
|
version: ${{ github.event.inputs.version }}
|