Skip to content

Commit

Permalink
Add module release actions
Browse files Browse the repository at this point in the history
  • Loading branch information
roborourke committed Oct 18, 2021
1 parent 3a9642e commit cca4845
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/module-auto-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Altis Module Auto Release On Manual Tags

on:
push:
tags:
- '*.0.0'
- '*.0.0-beta*'
- '*.0.0-rc*'

jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/github-script@v5
with:
script: |
const tag = '${{ github.ref }}'.replace( 'refs/tags/', '' );
const [
_,
baseTag,
majorVersion,
stability,
preReleaseVersion,
] = tag.match( /^((\d+)\.\d+\.\d+)(?:-(beta|rc)\.?(\d+)?)?/ )
let nameSuffix = '';
if ( stability ) {
nameSuffix = stability === 'beta' ? 'Beta' : 'Release Candidate';
nameSuffix = ' ' + nameSuffix + ' ' + preReleaseVersion;
}
// Create new release from tag.
await github.request( `POST /repos/${{ github.repository }}/releases`, {
name: `${ baseTag }${ nameSuffix }`,
tag_name: tag,
target_commitish: `v${ majorVersion }-branch`,
generate_release_notes: true,
prerelease: !! stability,
} );
68 changes: 68 additions & 0 deletions .github/workflows/module-auto-tagging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Altis Module Auto Tagging

on:
push:
branches:
- v*-branch*

jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/[email protected]
- run: npm install semver
- uses: actions/github-script@v5
with:
script: |
const semver = require( 'semver' );
const [ owner, repo ] = '${{ github.repository }}'.split( '/' );
const [
ref,
branch,
branchVersion,
isRC
] = '${{ github.ref }}'.match( /^refs\/heads\/(v(\d+)-branch(-rc)?)/ );
const tags = await github.paginate( github.rest.git.listMatchingRefs, {
owner,
repo,
ref: `tags/${ branchVersion }${ isRC ? '' : '.0' }.`,
} );
// Start from lowest possible tag.
const initialTag = isRC ? `${ branchVersion }.1.0-rc.1` : `${ branchVersion }.0.0-beta.1`;
// Find the latest tag from results.
const newTag = tags.reduce( ( carry, tag ) => {
const cleanTag = semver.clean( tag.ref.replace( 'refs/tags/', '' ) );
let nextTag = '';
if ( semver.prerelease( cleanTag ) ) {
nextTag = semver.inc( cleanTag, 'prerelease' );
} else {
nextTag = semver.inc( cleanTag, 'patch' );
}
return semver.gt( nextTag, carry ) ? nextTag : carry;
}, initialTag );
const isPreRelease = semver.prerelease( newTag );
// Don't make new Pre-Release tags once we already have one.
if ( isPreRelease && ! isRC && newTag !== initialTag ) {
return;
}
const baseTag = `${ semver.major( newTag ) }.${ semver.minor( newTag ) }.${ semver.patch( newTag ) }`;
let nameSuffix = '';
if ( isPreRelease ) {
nameSuffix = isRC ? 'Preview Release' : isPreRelease.join( ' ' );
nameSuffix = ' ' + nameSuffix;
}
// Create new tag.
await github.request( `POST /repos/${{ github.repository }}/releases`, {
name: `${ baseTag }${ nameSuffix }`,
tag_name: newTag,
target_commitish: branch,
generate_release_notes: true,
prerelease: !! isPreRelease,
} );

0 comments on commit cca4845

Please sign in to comment.