Skip to content

Commit

Permalink
build: add structured release process
Browse files Browse the repository at this point in the history
  • Loading branch information
philostler committed Mar 21, 2024
1 parent 38e0aaf commit 2ed0e78
Show file tree
Hide file tree
Showing 13 changed files with 235 additions and 58 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Build
on:
workflow_call:
inputs:
artifact_name:
description: Name of uploaded artifact
required: true
type: string
jobs:
www:
name: www
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/workflows/www/setup
- name: Build
# Linting is validated in separate workflow
run: yarn build --no-lint
working-directory: packages/www
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact_name }}
path: packages/www/out
47 changes: 47 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Deploy
on:
workflow_dispatch:
inputs:
component:
description: Component
options:
- www
required: true
type: choice
version:
description: Version
required: true
type: string
permissions:
id-token: write
pages: write
jobs:
download:
name: Download
runs-on: ubuntu-latest
steps:
- name: Download release artifact
uses: robinraju/release-downloader@v1.9
with:
extract: true
fileName: ${{ inputs.component }}-${{ inputs.version }}.zip
tag: ${{ inputs.component }}-${{ inputs.version }}
- name: List Files
run: ls -R
- name: Delete release artifact
run: rm ${{ inputs.component }}-${{ inputs.version }}.zip
- name: List Files
run: ls -R
- name: Upload workflow artifact
uses: actions/upload-pages-artifact@v3
deploy:
name: Deploy
environment:
name: github-pages
url: ${{ steps.deploy.outputs.page_url }}
runs-on: ubuntu-latest
needs: download
steps:
- name: Deploy
id: deploy
uses: actions/deploy-pages@v4
15 changes: 15 additions & 0 deletions .github/workflows/format.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Format
on:
workflow_call:
jobs:
www:
name: www
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/workflows/www/setup
- name: Check formatting
run: yarn format:check
working-directory: packages/www
15 changes: 15 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Lint
on:
workflow_call:
jobs:
www:
name: www
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/workflows/www/setup
- name: Check linting
run: yarn lint:check
working-directory: packages/www
57 changes: 0 additions & 57 deletions .github/workflows/main-push.yml

This file was deleted.

18 changes: 18 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Pull Request
on:
pull_request:
branches:
- "!release-please*/*"
jobs:
format:
name: Format
uses: ./.github/workflows/format.yml
lint:
name: Lint
uses: ./.github/workflows/lint.yml
build:
name: Build
needs: [format, lint]
uses: ./.github/workflows/build.yml
with:
artifact_name: www
47 changes: 47 additions & 0 deletions .github/workflows/push-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Push main
on:
push:
branches: main
permissions:
contents: write
pull-requests: write
jobs:
release:
name: Release
runs-on: ubuntu-latest
outputs:
artifact_name: www-${{ steps.release.outputs['packages/www--major'] }}.${{ steps.release.outputs['packages/www--minor'] }}.${{ steps.release.outputs['packages/www--patch'] }}
release_tag: ${{ steps.release.outputs['packages/www--tag_name'] }}
releases_created: ${{ steps.release.outputs.releases_created }}
steps:
- uses: google-github-actions/release-please-action@v4
id: release
with:
config-file: release-config.json
manifest-file: release-manifest.json
token: ${{ secrets.RELEASE_PLEASE_TOKEN }}
format:
name: Format
needs: release
if: needs.release.outputs.releases_created == 'true'
uses: ./.github/workflows/format.yml
lint:
name: Lint
needs: release
if: needs.release.outputs.releases_created == 'true'
uses: ./.github/workflows/lint.yml
build:
name: Build
needs: [format, lint, release]
if: needs.release.outputs.releases_created == 'true'
uses: ./.github/workflows/build.yml
with:
artifact_name: ${{ needs.release.outputs.artifact_name }}
upload-release-artifact:
name: Upload release artifact
needs: [build, release]
if: needs.release.outputs.releases_created == 'true'
uses: ./.github/workflows/upload-release-artifact.yml
with:
artifact_name: ${{ needs.release.outputs.artifact_name }}
release_tag: ${{ needs.release.outputs.release_tag }}
30 changes: 30 additions & 0 deletions .github/workflows/upload-release-artifact.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Upload release artifact
on:
workflow_call:
inputs:
artifact_name:
description: Workflow artifact to upload
required: true
type: string
release_tag:
description: Release tag to upload to
required: true
type: string
jobs:
www:
name: www
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download workflow artifact
uses: actions/download-artifact@v4
with:
name: ${{ inputs.artifact_name }}
path: ${{ inputs.artifact_name }}
- name: Compress & package artifact
run: (cd ${{ inputs.artifact_name }} && zip -r "$OLDPWD/${{ inputs.artifact_name }}.zip" .)
- name: Upload release artifact
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ inputs.release_tag }} ${{ inputs.artifact_name }}.zip
22 changes: 22 additions & 0 deletions .github/workflows/www/setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Setup
runs:
using: composite
steps:
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
cache: yarn
cache-dependency-path: packages/www/yarn.lock
node-version-file: packages/www/package.json
- name: Restore Next.js build cache
uses: actions/cache@v4
with:
path: packages/www/.next/cache
# Generate a new cache whenever packages or source files change
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
# If source files changed but packages didn't, rebuild from a prior cache
restore-keys: ${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-
- name: Install dependencies
run: yarn install
shell: bash
working-directory: packages/www
2 changes: 2 additions & 0 deletions packages/www/.prettierignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
.next

CHANGELOG.md
2 changes: 1 addition & 1 deletion packages/www/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "www.philostler.com",
"name": "@philostler.com/www",
"version": "1.0.0",
"private": true,
"scripts": {
Expand Down
9 changes: 9 additions & 0 deletions release-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"include-v-in-tag": false,
"packages": {
"packages/www": {
"package-name": "www"
}
},
"pull-request-header": ":rocket: In the Next Release..."
}
3 changes: 3 additions & 0 deletions release-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"packages/www": "1.0.0"
}

0 comments on commit 2ed0e78

Please sign in to comment.