Skip to content

Commit

Permalink
chore: automate releases with pr
Browse files Browse the repository at this point in the history
  • Loading branch information
mweberxyz committed Apr 10, 2024
1 parent 6481804 commit 6a40900
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 26 deletions.
26 changes: 0 additions & 26 deletions .github/workflows/publish-undici-types.yml

This file was deleted.

79 changes: 79 additions & 0 deletions .github/workflows/release-create-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Create release PR

permissions:
contents: read

on:
workflow_dispatch:
inputs:
version:
description: 'The version number to release (has priority over release_type)'
type: string
release_type:
description: Type of release
type: choice
default: patch
options:
- patch
- minor
- major

jobs:
create-pr:
runs-on: ubuntu-latest

permissions:
contents: write
pull-requests: write

outputs:
version: ${{ steps.bump.outputs.version }}

steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Git Config
run: |
git config --global user.email "github-actions@github.com"
git config --global user.name "github-actions"
- name: Change version number and push
id: bump
run: |
npm version ${{ inputs.version || inputs.release_type }} --git-tag-version=false
VERSION=`jq -r ".version" package.json`
RELEASE_BRANCH="release/v$VERSION"
git add -u
git commit -m "Bumped v$VERSION"
git push origin "HEAD:$RELEASE_BRANCH"
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Create PR
uses: actions/github-script@v7
with:
script: |
const defaultBranch = "${{ github.event.repository.default_branch }}"
const { owner, repo } = context.repo
const version = "v${{ steps.bump.outputs.version }}"
const { data: releases } = await github.rest.repos.listReleases({
owner,
repo
})
const { data: { body } } = await github.rest.repos.generateReleaseNotes({
owner,
repo,
tag_name: version,
target_commitish: defaultBranch,
previous_tag_name: releases[0]?.tag_name
});
await github.rest.pulls.create({
owner,
repo,
head: `release/${version}`,
base: defaultBranch,
title: `Create release ${version}`,
body
})
97 changes: 97 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Create release

on:
push:
branches:
- main
paths:
- package.json

permissions:
contents: read

jobs:
check-release-version:
runs-on: ubuntu-latest
outputs:
release-version: ${{ steps.set-release-version.outputs.result }}
steps:
- uses: actions/checkout@v4
- uses: actions/github-script@v7
id: set-release-version
with:
result-encoding: string
script: |
const { owner, repo } = context.repo
const version = require("./package.json").version
const versionTag = `v${version}`
const { data: releases } = await github.rest.repos.listReleases({
owner,
repo
})
if (versionTag !== releases[0]?.tag_name) {
return versionTag
}
release:
runs-on: ubuntu-latest
needs: check-release-version
if: ${{ startsWith(needs.check-release-version.outputs.release-version, 'v') }}

permissions:
contents: write
id-token: write

environment: release

steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- run: npm install -g npm@latest
- run: npm install
- name: Create NPM release
run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: node scripts/generate-undici-types-package-json.js
- run: npm publish --provenance
working-directory: './types'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Create GitHub release
uses: actions/github-script@v7
with:
script: |
const defaultBranch = "${{ github.event.repository.default_branch }}"
const { owner, repo } = context.repo
const versionTag = "${{ needs.check-release-version.outputs.release-version }}"
const { data: releases } = await github.rest.repos.listReleases({
owner,
repo
})
const { data: { body } } = await github.rest.repos.generateReleaseNotes({
owner,
repo,
tag_name: versionTag,
target_commitish: defaultBranch,
previous_tag_name: releases[0]?.tag_name
});
await github.rest.repos.createRelease({
owner,
repo,
tag_name: versionTag,
target_commitish: defaultBranch,
name: versionTag,
body,
draft: false,
prerelease: false,
generate_release_notes: false
});
7 changes: 7 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* [Lint](#lint)
* [Test](#test)
* [Coverage](#coverage)
* [Releases](#releases)
* [Update `WPTs`](#update-wpts)
* [Building for externally shared node builtins](#external-builds)
* [Developer's Certificate of Origin 1.1](#developers-certificate-of-origin)
Expand Down Expand Up @@ -166,6 +167,12 @@ npm run test
npm run coverage
```

<a id="releases"></a>
### Issuing Releases

Release is automatic on commit to main which bumps the package.json version field.
Use the "Create release PR" github action to generate a release PR.

<a id="external-builds"></a>
### Building for externally shared node builtins

Expand Down

0 comments on commit 6a40900

Please sign in to comment.