chore: add publish pipeline
This commit is contained in:
53
.github/workflows/create-version.yml
vendored
Normal file
53
.github/workflows/create-version.yml
vendored
Normal file
@@ -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 "84040471+bcc-bot@users.noreply.github.com"
|
||||||
|
|
||||||
|
- 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
.github/workflows/prepare-release.yml
vendored
Normal file
38
.github/workflows/prepare-release.yml
vendored
Normal file
@@ -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
.github/workflows/release.yml
vendored
Normal file
41
.github/workflows/release.yml
vendored
Normal file
@@ -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 }}
|
||||||
@@ -31,7 +31,8 @@
|
|||||||
"dev": "directus-extension build -w --no-minify",
|
"dev": "directus-extension build -w --no-minify",
|
||||||
"link": "directus-extension link",
|
"link": "directus-extension link",
|
||||||
"pre-test": "tsc -p tsconfig.test.json",
|
"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"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@directus/extensions-sdk": "10.1.11",
|
"@directus/extensions-sdk": "10.1.11",
|
||||||
|
|||||||
39
scripts/version.cjs
Normal file
39
scripts/version.cjs
Normal file
@@ -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}`)
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user