in projenrc/release.ts [342:405]
public constructor(project: typescript.TypeScriptProject, name: string, props: AutoTagWorkflowProps) {
const nodeVersion = project.minNodeVersion?.split('.', 1).at(0) ?? 'lts/*';
const workflow = project.github!.addWorkflow(name);
workflow.runName = props.runName;
workflow.on({
schedule:
props.schedule != null
? [
{
cron: props.schedule,
},
]
: undefined,
workflowDispatch: {},
});
workflow.addJob('pre-flight', {
name: 'Pre-Flight Checks',
runsOn: ['ubuntu-latest'],
outputs: {
sha: {
stepId: 'git',
outputName: 'sha',
},
},
permissions: { contents: github.workflows.JobPermission.READ },
steps: [
{ ...ACTIONS_CHECKOUT, with: { ...ACTIONS_CHECKOUT.with, ref: props.branch } },
ACTIONS_SETUP_NODE(nodeVersion),
YARN_INSTALL,
{ name: 'Build', run: 'yarn build' },
{ id: 'git', name: 'Identify git SHA', run: 'echo sha=$(git rev-parse HEAD) >> $GITHUB_OUTPUT' },
],
});
workflow.addJob('auto-tag', {
name: 'Auto-Tag Release',
needs: ['pre-flight'],
runsOn: ['ubuntu-latest'],
permissions: {},
steps: [
{
...ACTIONS_CHECKOUT,
with: {
...ACTIONS_CHECKOUT.with,
ref: '${{ needs.pre-flight.outputs.sha }}',
token: '${{ secrets.PROJEN_GITHUB_TOKEN }}',
},
},
ACTIONS_SETUP_NODE(nodeVersion),
YARN_INSTALL,
{
name: 'Set git identity',
run: ['git config user.name "github-actions"', 'git config user.email "github-actions@github.com"'].join(
'\n',
),
},
{
name: `Tag ${props.preReleaseId ? 'PreRelease' : 'Release'}`,
run: `yarn tag-release --idempotent --no-sign --push ${
props.preReleaseId ? `--prerelease=${props.preReleaseId} ` : ''
}--release-line=${props.releaseLine}`,
},
],
});
}