public constructor()

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}`,
        },
      ],
    });
  }