Deploy website and publish package for release tags
This commit is contained in:
2
.github/workflows/deploy-preview.yml
vendored
2
.github/workflows/deploy-preview.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Deploy Preview
|
name: Deploy Website (Preview)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
|
|||||||
36
.github/workflows/deploy.yml
vendored
36
.github/workflows/deploy.yml
vendored
@@ -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
|
||||||
|
|||||||
29
.github/workflows/publish.yml
vendored
29
.github/workflows/publish.yml
vendored
@@ -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}}
|
||||||
|
|||||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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
52
tasks/newest-tag.js
Normal 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));
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user