Skip to content

Commit

Permalink
Merge pull request bcc-code#21 from bcc-code/chore/publish-pipeline
Browse files Browse the repository at this point in the history
chore: add publish pipeline
  • Loading branch information
adelinn authored Jan 29, 2024
2 parents ec44eb9 + 2382c82 commit 1670fec
Show file tree
Hide file tree
Showing 7 changed files with 202 additions and 1 deletion.
53 changes: 53 additions & 0 deletions .github/workflows/create-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Create New Version
run-name: Creating new ${{ github.event.inputs.version }} ${{ github.event.inputs.channel }} version

on:
workflow_dispatch:
inputs:
version:
description: Version
type: choice
options:
- major
- minor
- patch
default: minor
channel:
description: Channel
type: choice
options:
- release
- beta
default: release

env:
CI: true

permissions:
contents: write

jobs:
version:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.BCC_BOT_ACCESS_TOKEN }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'

- name: Set commit author to bcc-bot
run: |
git config --global user.name "bcc-bot"
git config --global user.email "[email protected]"
- name: Version new ${{ github.event.inputs.version }} version
run: npm run create-version -- ${{ github.event.inputs.version }} ${{ github.event.inputs.channel }}

- name: Push
run: git push --follow-tags
38 changes: 38 additions & 0 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: "Prepare release"

on:
workflow_dispatch:
push:
tags:
- 'v*'

env:
CI: true

permissions:
contents: read

jobs:
build:
permissions:
contents: write # for softprops/action-gh-release to create GitHub release

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- run: git fetch --tags -f

- name: Resolve version
id: vars
run: |
echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: Create Release
uses: softprops/action-gh-release@v1
with:
draft: true
name: "schema-sync ${{ env.TAG_NAME }}"
tag_name: ${{ env.TAG_NAME }}
generate_release_notes: true
41 changes: 41 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Release

on:
release:
types: [published]

permissions:
contents: read

env:
CI: true

jobs:
build:
if: contains(github.event.release.name, 'schema-sync')
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Build Extension
run: npm build

- name: Set release channel
run: |
echo "RELEASE_CHANNEL=$(npm run release-channel --silent)" >> $GITHUB_ENV
- name: Publish Extension
run: npm publish --tag ${{ env.RELEASE_CHANNEL }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
9 changes: 9 additions & 0 deletions MAINTENANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Maintenance instructions

## Releasing a new version

A new version can be released by running the [Create New Version](https://github.com/bcc-code/directus-schema-sync/actions/workflows/create-version.yml) workflow from GitHub.

This will update the version in the `package.json`, push a Git commit and tag, and create a new [release](https://github.com/bcc-code/directus-schema-sync/releases) in GitHub.

Maintainers can publish this release, after which the new version will be pushed to npm with the `latest` tag.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@
"dev": "directus-extension build -w --no-minify",
"link": "directus-extension link",
"pre-test": "tsc -p tsconfig.test.json",
"test": "npm run pre-test && node --test dist-test/"
"test": "npm run pre-test && node --test dist-test/",
"create-version": "node ./scripts/version.cjs",
"release-channel": "node ./scripts/release-channel.js"
},
"devDependencies": {
"@directus/extensions-sdk": "10.1.11",
Expand Down
19 changes: 19 additions & 0 deletions scripts/release-channel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Given a version, figure out what the release channel is so that we can publish to the correct
// channel on npm.
// Copied from https://github.com/tailwindlabs/heroicons/blob/eee05eb77af6cdedfb97f128d1998773fc984b28/scripts/release-channel.js
//
// E.g.:
//
// 1.2.3 -> latest (default)
// 0.0.0-insiders.ffaa88 -> insiders
// 4.1.0-alpha.4 -> alpha

let version =
process.argv[2] || process.env.npm_package_version || require("../package.json").version;

let match = /\d+\.\d+\.\d+-(.*)\.\d+/g.exec(version);
if (match) {
console.log(match[1]);
} else {
console.log("latest");
}
39 changes: 39 additions & 0 deletions scripts/version.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const { exec } = require("node:child_process");
const { exit } = require("node:process");
const currentVersion = require("../package.json").version;

let increment = process.argv[2];
let channel = process.argv[3] ?? "release";

if (!increment) {
console.log("No version increment given! Exiting...");
exit();
}

let update = `pre${increment}`;
if (currentVersion.includes(channel)) {
update = "prerelease";
}

const versionParts = /(\d+\.\d+\.\d+)-(.*)\.\d+/g.exec(currentVersion);

// If there is a prerelease tag in the name but the channel is for public release,
// just strip the prerelease tag from the name
if (versionParts && channel == "release") {
increment = versionParts[1];
}

const command = `npm version ${
channel == "release" ? increment : `${update} --preid ${channel}`
} --no-git-tag-version`;

// Version package
exec(command, (error, newVersion) => {
if (error) console.error(error);
const tagVersion = newVersion.replace("\n", "");
exec(
`git add . && git commit -m "schema-sync ${tagVersion}" && git tag -am ${tagVersion} "${tagVersion}"`
);

console.log(`Tagged new version ${tagVersion}`)
});

0 comments on commit 1670fec

Please sign in to comment.