Skip to content

Commit

Permalink
chore(ci): automatically publish releases based on pull request labels
Browse files Browse the repository at this point in the history
  • Loading branch information
diego-aquino committed Jan 12, 2025
1 parent a190408 commit eaf8982
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 10 deletions.
110 changes: 110 additions & 0 deletions .github/actions/zimic-get-release-settings/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Zimic Get Release Settings
description: Zimic Get Release Settings

inputs:
project-name:
description: Project name
required: true
input-upgrade-type:
description: Upgrade type from the workflow inputs
required: false
input-pre-release-id:
description: Pre-release id from the workflow inputs
required: false
outputs:
upgrade-type:
description: Bumped version
value: ${{ steps.release-settings.outputs.upgrade-type }}
pre-release-id:
description: Bumped version
value: ${{ steps.release-settings.outputs.pre-release-id }}

runs:
using: composite
steps:
- name: Get release settings
id: release-settings
uses: actions/github-script@v7
with:
script: |
function setOutputs(outputs) {
console.log('Outputs:', outputs);
for (const [key, value] of Object.entries(outputs)) {
core.setOutput(key, value);
}
}
const eventName = '${{ github.event_name }}';
const wasManuallyTriggered = eventName === 'workflow_dispatch'
if (wasManuallyTriggered) {
console.log('This workflow was triggered manually.');
setOutputs({
'upgrade-type': '${{ inputs.input-upgrade-type }}',
'pre-release-id': '${{ inputs.input-pre-release-id }}',
})
return
}
const isMergedPullRequest =
eventName === 'pull_request' &&
'${{ github.event.pull_request.merged }}' === 'true';
if (!isMergedPullRequest) {
console.warn('This is not a merged pull request.');
setOutputs({
'upgrade-type': '',
'pre-release-id': '',
})
return
}
console.log('This is a merged pull request. ');
console.log(`Fetching labels for ${context.repo.owner}/${context.repo.repo}#${context.issue.number}...`);
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
console.log('Labels found:', labels);
const expectedProjectName = '${{ inputs.project-name }}';
for (const label of labels) {
const labelMatch = /^(?<projectName>[^:]+):(?<upgradeType>[^-]+)(?:-(?<preReleaseId>.+))?$/.exec(label.name);
if (!labelMatch) {
console.warn(`Label '${label.name}' does not match the expected pattern. Skipping...`);
continue
}
const { projectName, upgradeType, preReleaseId = 'none' } = labelMatch.groups;
if (projectName !== expectedProjectName) {
console.warn(
`Label '${label.name}' does not match the expected project name '${expectedProjectName}'. Skipping...`
);
continue
}
console.log(`Matching label found: '${label.name}'.`);
setOutputs({
'upgrade-type': upgradeType,
'pre-release-id': preReleaseId,
})
return
}
console.warn('No matching labels found.');
setOutputs({
'upgrade-type': '',
'pre-release-id': '',
})
return
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release Zimic
name: Release Zimic Package

on:
release:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
name: Create Zimic GitHub Release
name: Release Zimic to GitHub

on:
pull_request:
types:
- closed
branches:
- canary
- v*
workflow_dispatch:
inputs:
upgrade-type:
Expand Down Expand Up @@ -33,10 +39,10 @@ env:
TURBO_LOG_ORDER: stream

jobs:
create-zimic-github-release:
name: Create Zimic Github Release
release-to-github:
name: Release to GitHub
runs-on: ubuntu-latest
timeout-minutes: 3
timeout-minutes: 5

environment: GitHub

Expand All @@ -54,27 +60,37 @@ jobs:
with:
turbo-token: ${{ env.TURBO_TOKEN }}
turbo-team: ${{ env.TURBO_TEAM }}
install: zimic
install: zimic...

- name: Get Zimic release settings
id: release-settings
uses: ./.github/actions/zimic-get-release-settings
with:
project-name: zimic
input-upgrade-type: ${{ inputs.upgrade-type }}
input-pre-release-id: ${{ inputs.pre-release-id }}

- name: Bump Zimic version
id: bump-version
if: ${{ steps.release-settings.outputs.upgrade-type != '' }}
uses: ./.github/actions/zimic-bump-version
with:
project-name: zimic
project-directory: packages/zimic
upgrade-type: ${{ inputs.upgrade-type }}
pre-release-id: ${{ inputs.pre-release-id }}
upgrade-type: ${{ steps.release-settings.outputs.upgrade-type }}
pre-release-id: ${{ steps.release-settings.outputs.pre-release-id }}
commit-user-name: ${{ vars.RELEASE_COMMIT_USER_NAME }}
commit-user-email: ${{ vars.RELEASE_COMMIT_USER_EMAIL }}

- name: Create GitHub release
if: ${{ steps.release-settings.outputs.upgrade-type != '' }}
uses: ncipollo/release-action@v1
with:
name: v${{ steps.bump-version.outputs.value }}
tag: v${{ steps.bump-version.outputs.value }}
commit: ${{ steps.bump-version.outputs.commit-sha }}
token: ${{ secrets.GITHUB_TOKEN }}
makeLatest: ${{ inputs.pre-release-id == 'none' }}
prerelease: ${{ inputs.pre-release-id != 'node' }}
makeLatest: ${{ steps.release-settings.outputs.pre-release-id == 'none' }}
prerelease: ${{ steps.release-settings.outputs.pre-release-id != 'node' }}
generateReleaseNotes: true
draft: true

0 comments on commit eaf8982

Please sign in to comment.