Deploy website and publish package for release tags

This commit is contained in:
Tim Schaub
2022-08-18 16:11:10 -06:00
parent 293f128558
commit 6db24d214b
6 changed files with 116 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
name: Deploy Preview name: Deploy Website (Preview)
on: on:
workflow_run: workflow_run:

View File

@@ -1,16 +1,18 @@
name: Deploy name: Deploy Website
on: on:
push: push:
branches: branches:
- main - main
tags:
- 'v*.*.*'
concurrency: concurrency:
group: "deploy" group: "deploy"
cancel-in-progress: true
jobs: jobs:
deploy: deploy-branch:
if: startsWith(github.ref, 'refs/heads/')
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -35,3 +37,31 @@ jobs:
git add . git add .
git commit -m "Website updates" git commit -m "Website updates"
git push origin main git push origin main
deploy-tag:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Assert Latest Release
run: node tasks/newest-tag.js --tag ${GITHUB_REF_NAME}
- name: Build Website
run: ./tasks/build-website.sh -l ${GITHUB_REF_NAME} -v ${GITHUB_REF_NAME}
- name: Check out openlayers.github.io
uses: actions/checkout@v3
with:
repository: openlayers/openlayers.github.io
ssh-key: ${{ secrets.OPENLAYERS_GITHUB_IO_KEY }}
path: openlayers.github.io
- run: |
cp -r build/site/* openlayers.github.io/dist/
cd openlayers.github.io
git config user.name "$(git --no-pager log --format=format:'%an' -n 1)"
git config user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
git add .
git commit -m "Website updates"
git push origin main

View File

@@ -1,21 +1,24 @@
name: Publish name: Publish Package
on: on:
push: push:
branches: branches:
- main - main
tags:
- 'v*.*.*'
permissions: permissions:
contents: read contents: read
jobs: jobs:
publish-npm: publish-branch:
if: startsWith(github.ref, 'refs/heads/')
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
with: with:
node-version: '16' node-version: '18'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- name: Install dependencies - name: Install dependencies
run: npm ci run: npm ci
@@ -28,3 +31,23 @@ jobs:
npm publish --tag dev npm publish --tag dev
env: env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
publish-tag:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Assert Latest Release
run: node tasks/newest-tag.js --tag ${GITHUB_REF_NAME}
- name: Publish
run: |
npm run build-package
cd build/ol
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

View File

@@ -1,4 +1,4 @@
name: Release name: Create Release
on: on:
push: push:
@@ -16,6 +16,6 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: npm ci run: npm ci
- name: Build Release Assets - name: Build Release Assets
run: ./tasks/build-website.sh -l ${GITHUB_REF_NAME} -l ${GITHUB_REF_NAME} run: ./tasks/build-website.sh -l ${GITHUB_REF_NAME} -v ${GITHUB_REF_NAME}
- name: Create Release - name: Create Release
run: node tasks/create-release.js --token ${{secrets.GITHUB_TOKEN}} --tag ${GITHUB_REF_NAME} --legacy build/${GITHUB_REF_NAME}-legacy.zip --site build/${GITHUB_REF_NAME}-site.zip run: node tasks/create-release.js --token ${{secrets.GITHUB_TOKEN}} --tag ${GITHUB_REF_NAME} --legacy build/${GITHUB_REF_NAME}-legacy.zip --site build/${GITHUB_REF_NAME}-site.zip

View File

@@ -6,7 +6,7 @@ import {hideBin} from 'yargs/helpers';
import {readFile, stat} from 'node:fs/promises'; import {readFile, stat} from 'node:fs/promises';
/** /**
* @typedef {Object} ReleaseOptions * @typedef {Object} Options
* @property {string} token The bearer token. * @property {string} token The bearer token.
* @property {string} tag The tag. * @property {string} tag The tag.
* @property {boolean} draft Create a draft release. * @property {boolean} draft Create a draft release.
@@ -20,7 +20,7 @@ const repo = 'openlayers';
/** /**
* Create a release. * Create a release.
* @param {ReleaseOptions} options The release options. * @param {Options} options The release options.
*/ */
async function createRelease(options) { async function createRelease(options) {
const client = new Octokit({ const client = new Octokit({

52
tasks/newest-tag.js Normal file
View File

@@ -0,0 +1,52 @@
import esMain from 'es-main';
import semver from 'semver';
import yargs from 'yargs';
import {getLatestRelease} from './get-latest-release.js';
import {hideBin} from 'yargs/helpers';
/**
* @typedef {Object} Options
* @property {string} tag The tag.
*/
/**
* Check if a tag is ahead of the latest release.
* @param {Options} options The options.
* @return {boolean} The provided tag is ahead of or equal to the latest release.
*/
async function main(options) {
const version = semver.valid(options.tag);
if (!version) {
return false;
}
const parsed = semver.parse(version);
if (parsed.prerelease.length) {
return false;
}
const latest = await getLatestRelease();
return semver.gte(version, latest);
}
if (esMain(import.meta)) {
const options = yargs(hideBin(process.argv))
.option('tag', {
describe: 'The tag to test (e.g. v1.2.3)',
type: 'string',
})
.demandOption('tag')
.parse();
main(options)
.then((newest) => {
if (newest) {
process.stdout.write('true\n', () => process.exit(0));
} else {
process.stderr.write('false\n', () => process.exit(1));
}
})
.catch((err) => {
process.stderr.write(`${err.stack}\n`, () => process.exit(1));
});
}