1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-28 19:06:12 +01:00
unleash.unleash/.github/workflows/publish-new-version.yaml
Gastón Fournier 07354f7218
chore: workflows call workflows (#7089)
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.
2024-05-24 07:28:39 +00:00

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 }}