Skip to content

Commit

Permalink
ci: implement PR releases
Browse files Browse the repository at this point in the history
  • Loading branch information
ygrishajev committed Dec 9, 2024
1 parent 1ff13b2 commit 06e6d6d
Show file tree
Hide file tree
Showing 19 changed files with 413 additions and 654 deletions.
17 changes: 17 additions & 0 deletions .github/workflows/build-api-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Build API Image

on:
push:
tags:
- 'console-api/v*'

concurrency:
group: ${{ github.workflow }}

jobs:
build:
name: Build Docker image
uses: ./.github/workflows/build-image.yml
secrets: inherit
with:
tag: ${{ github.event.ref }}
51 changes: 51 additions & 0 deletions .github/workflows/build-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build Image

on:
workflow_dispatch:
workflow_call:
inputs:
tag:
description: 'Tag to build'
required: true
type: string

concurrency:
group: ${{ github.workflow }}

jobs:
build:
name: Build Docker image
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build Docker image
run: |
tag=${{ github.event.inputs.tag }}
force_build=""
if [[ "$tag" == console-api/* ]]; then
registry=${{ vars.API_REGISTRY }}
app="api"
elif [[ "$tag" == console-web/* ]]; then
registry=${{ vars.WEB_REGISTRY }}
app="deploy-web"
force_build="-f"
else
echo "Error: Unknown tag format"
exit 1
fi
tag="${tag#*/}"
tag="${tag#v}"
./packages/docker/script/build.sh -r $registry -t $tag -a $app $force_build
17 changes: 17 additions & 0 deletions .github/workflows/build-web-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Build Console Web Image

on:
push:
tags:
- 'console-web/v*'

concurrency:
group: ${{ github.workflow }}

jobs:
build:
name: Build Docker image
uses: ./.github/workflows/build-image.yml
secrets: inherit
with:
tag: ${{ github.event.ref }}
19 changes: 19 additions & 0 deletions .github/workflows/create-console-api-github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Create Console API GitHub Release

on:
push:
branches:
- main
paths:
- 'apps/api/package.json'

permissions:
contents: write

jobs:
release:
name: Create Release Draft
uses: ./.github/workflows/create-github-release.yml
secrets: inherit
with:
app: api
19 changes: 19 additions & 0 deletions .github/workflows/create-console-web-github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Create Console Web GitHub Release

on:
push:
branches:
- main
paths:
- 'apps/deploy-web/package.json'

permissions:
contents: write

jobs:
release:
name: Create Release Draft
uses: ./.github/workflows/create-github-release.yml
secrets: inherit
with:
app: deploy-web
77 changes: 77 additions & 0 deletions .github/workflows/create-github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Create GitHub Release

on:
workflow_call:
inputs:
app:
description: 'The app to release'
required: true
type: string

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.app }}
cancel-in-progress: true

permissions:
contents: write

jobs:
release:
name: Create GitHub Release
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get Version and Changelog Updates
id: bumps
run: |
package_file="apps/${{ inputs.app }}/package.json"
if [ ! -f "$package_file" ]; then
echo "Error: Package file $package_file does not exist."
exit 1
fi
current_version=$(jq -r '.version' "$package_file")
git_tag=$current_version
if [ "${{ inputs.app }}" = "deploy-web" ]; then
git_tag="console-web/v$git_tag"
elif [ "${{ inputs.app }}" = "api" ]; then
git_tag="console-api/v$git_tag"
else
echo "Error: Unsupported app type '${{ inputs.app }}'."
exit 1
fi
has_tag=$(git rev-parse "$git_tag" >/dev/null 2>&1 && echo "true" || echo "false")
if [ "$has_tag" = "false" ]; then
echo "version=$git_tag" >> $GITHUB_OUTPUT
echo "version=$git_tag"
changelog=$(script/extract-changelog.sh "$current_version" "apps/${{ inputs.app }}/CHANGELOG.md")
if [ -n "$changelog" ]; then
echo "changelog=$changelog"
echo "changelog<<EOF" >> $GITHUB_OUTPUT
echo "$changelog" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
fi
fi
- name: Create Release
if: ${{ steps.bumps.outputs.version != '' }}
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.bumps.outputs.version }}
release_name: ${{ steps.bumps.outputs.version }}
body: ${{ steps.bumps.outputs.changelog }}
prerelease: true
87 changes: 87 additions & 0 deletions .github/workflows/create-pre-release-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Create Pre-Release PR

on:
push:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}

jobs:
check-releasability:
name: Check if is Releasable
runs-on: ubuntu-latest
outputs:
is-releasable: ${{ steps.check.outputs.is-releasable }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Check if is Releasable
id: check
run: |
last_commit=$(git log -1 --pretty=%B)
if [[ $last_commit == "chore(release): released version"* ]]; then
echo "is-releasable=false" >> $GITHUB_OUTPUT
else
echo "is-releasable=true" >> $GITHUB_OUTPUT
fi
create-pr:
name: Create Pre-Release PR with Updated Changelogs and Versions
needs: check-releasability
if: needs.check-releasability.outputs.is-releasable == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.14.0

- name: Restore root node_modules cache
uses: actions/cache@v4
id: cache
with:
path: |
node_modules
apps/api/node_modules
apps/deploy-web/node_modules
packages/*/node_modules
key: common-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci -w packages/releaser

- name: Generate releases and build docker images
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "CI"
npm run release -w apps/api -- --verbose --ci
npm run release -w apps/deploy-web -- --verbose --ci
- name: Cleanup Previous Release Branch
run: |
git branch -D release/bumps || true
- name: Commit and Create PR
uses: peter-evans/create-pull-request@v7
with:
token: '${{ github.token }}'
branch: release/bumps
base: main
title: "Release bumps"
body: "This is an automated PR to update the changelogs and versions for the next release. Merging it will trigger builds and deploy workflows"
25 changes: 0 additions & 25 deletions .github/workflows/docker-build-deploy-web.yml

This file was deleted.

28 changes: 0 additions & 28 deletions .github/workflows/docker-build-indexer.yml

This file was deleted.

27 changes: 0 additions & 27 deletions .github/workflows/docker-build-provider-proxy.yml

This file was deleted.

Loading

0 comments on commit 06e6d6d

Please sign in to comment.