This repository has been archived by the owner on Sep 16, 2024. It is now read-only.
Bump the development-dependencies group with 2 updates #52
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Continuous Delivery: Publish on NPM | |
name: "CD" | |
on: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
inputs: | |
releaseType: | |
description: 'Release type' | |
required: true | |
default: 'prerelease' | |
type: choice | |
options: | |
- prerelease | |
- patch | |
- minor | |
- major | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.ref_name }}" | |
cancel-in-progress: true | |
jobs: | |
ci: | |
uses: ./.github/workflows/ci.yml | |
publish-snapshot: | |
if: ${{ inputs.releaseType == '' }} | |
needs: ci | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
steps: | |
- name: "Checkout repository" | |
uses: actions/checkout@v4 | |
- name: "Setup node & dependencies" | |
uses: ./.github/actions/setup | |
- name: "Create version" | |
id: version | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const run = require('node:util').promisify(require('node:child_process').exec); | |
const semver = require('semver'); | |
const { name, version } = require('./package.json'); | |
if (!name) throw new Error('Could not get package name'); | |
const getVersion = (tag) => run(`npm view ${name}@${tag} version`).then(({ stdout }) => stdout.trim()).catch(() => ''); | |
const distTag = 'snapshot'; | |
const previousVersion = await getVersion(distTag); | |
// Get base version (version from which to increment) | |
let baseVersion = previousVersion; | |
// Prerelease should start with latest NPM version + patch (ex: 'v1.0.0' => 'v1.0.1-alpha.0') | |
if (!baseVersion || !baseVersion.startsWith(semver.inc(version, 'patch'))) { | |
baseVersion = version; | |
} | |
console.log(`Base version: ${baseVersion}`); | |
// Increment version | |
const nextVersion = semver.inc(baseVersion, 'prerelease', distTag); | |
console.log(`New version: ${nextVersion}`); | |
// Update version in package | |
await run(`npm pkg set version=${nextVersion}`); | |
return { name, previousVersion, nextVersion }; | |
- name: "Publish" | |
run: npm publish --provenance --access public --tag snapshot | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: "Deprecate previous snapshot" | |
if: ${{ fromJSON(steps.version.outputs.result).previousVersion != '' }} | |
run: npm deprecate ${{ fromJSON(steps.version.outputs.result).name }}@${{ fromJSON(steps.version.outputs.result).previousVersion }} "snapshot" | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
publish-release: | |
if: ${{ inputs.releaseType != '' && github.ref_name == 'main' }} | |
needs: ci | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
contents: write | |
steps: | |
- name: "Checkout repository" | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Setup node & dependencies" | |
uses: ./.github/actions/setup | |
- name: "Bump version" | |
run: | | |
set -x | |
git config --global user.name "github-actions" | |
git config --global user.email "github-actions@users.noreply.github.com" | |
npm version ${{ inputs.releaseType }} --m "Release v%s" ${{ inputs.releaseType == 'prerelease' && '--preid rc' || '' }} | |
git push | |
git push --tags | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: "Publish" | |
run: npm publish --provenance --access public ${{ inputs.releaseType == 'prerelease' && '--tag prerelease' || '' }} | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |