diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 2c54b0d2..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,3 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -* @npm/cli-team diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml deleted file mode 100644 index d043192f..00000000 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ /dev/null @@ -1,54 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: Bug -description: File a bug/issue -title: "[BUG] " -labels: [ Bug, Needs Triage ] - -body: - - type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please [search here](./issues) to see if an issue already exists for your problem. - options: - - label: I have searched the existing issues - required: true - - type: textarea - attributes: - label: Current Behavior - description: A clear & concise description of what you're experiencing. - validations: - required: false - - type: textarea - attributes: - label: Expected Behavior - description: A clear & concise description of what you expected to happen. - validations: - required: false - - type: textarea - attributes: - label: Steps To Reproduce - description: Steps to reproduce the behavior. - value: | - 1. In this environment... - 2. With this config... - 3. Run '...' - 4. See error... - validations: - required: false - - type: textarea - attributes: - label: Environment - description: | - examples: - - **npm**: 7.6.3 - - **Node**: 13.14.0 - - **OS**: Ubuntu 20.04 - - **platform**: Macbook Pro - value: | - - npm: - - Node: - - OS: - - platform: - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index d640909f..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,3 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -blank_issues_enabled: true diff --git a/.github/matchers/tap.json b/.github/matchers/tap.json deleted file mode 100644 index 2c81ea98..00000000 --- a/.github/matchers/tap.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "//@npmcli/template-oss": "This file is automatically added by @npmcli/template-oss. Do not edit.", - "problemMatcher": [ - { - "owner": "tap", - "pattern": [ - { - "regexp": "^\\s*not ok \\d+ - (.*)", - "message": 1 - }, - { - "regexp": "^\\s*---" - }, - { - "regexp": "^\\s*at:" - }, - { - "regexp": "^\\s*line:\\s*(\\d+)", - "line": 1 - }, - { - "regexp": "^\\s*column:\\s*(\\d+)", - "column": 1 - }, - { - "regexp": "^\\s*file:\\s*(.*)", - "file": 1 - } - ] - } - ] -} diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml deleted file mode 100644 index a4d035a7..00000000 --- a/.github/workflows/audit.yml +++ /dev/null @@ -1,42 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: Audit - -on: - workflow_dispatch: - schedule: - # "At 08:00 UTC (01:00 PT) on Monday" https://crontab.guru/#0_8_*_*_1 - - cron: "0 8 * * 1" - -jobs: - audit: - name: Audit Dependencies - if: github.repository_owner == 'npm' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund --package-lock - - name: Run Production Audit - run: npm audit --omit=dev - - name: Run Full Audit - run: npm audit --audit-level=none diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml deleted file mode 100644 index b062c0a0..00000000 --- a/.github/workflows/ci-release.yml +++ /dev/null @@ -1,223 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: CI - Release - -on: - workflow_dispatch: - inputs: - ref: - required: true - type: string - default: main - workflow_call: - inputs: - ref: - required: true - type: string - check-sha: - required: true - type: string - -jobs: - lint-all: - name: Lint All - if: github.repository_owner == 'npm' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Get Workflow Job - uses: actions/github-script@v6 - if: inputs.check-sha - id: check-output - env: - JOB_NAME: "Lint All" - MATRIX_NAME: "" - with: - script: | - const { owner, repo } = context.repo - - const { data } = await github.rest.actions.listJobsForWorkflowRun({ - owner, - repo, - run_id: context.runId, - per_page: 100 - }) - - const jobName = process.env.JOB_NAME + process.env.MATRIX_NAME - const job = data.jobs.find(j => j.name.endsWith(jobName)) - const jobUrl = job?.html_url - - const shaUrl = `${context.serverUrl}/${owner}/${repo}/commit/${{ inputs.check-sha }}` - - let summary = `This check is assosciated with ${shaUrl}\n\n` - - if (jobUrl) { - summary += `For run logs, click here: ${jobUrl}` - } else { - summary += `Run logs could not be found for a job with name: "${jobName}"` - } - - return { summary } - - name: Create Check - uses: LouisBrunner/checks-action@v1.3.1 - id: check - if: inputs.check-sha - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: in_progress - name: Lint All - sha: ${{ inputs.check-sha }} - output: ${{ steps.check-output.outputs.result }} - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ inputs.ref }} - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Lint - run: npm run lint --ignore-scripts - - name: Post Lint - run: npm run postlint --ignore-scripts - - name: Conclude Check - uses: LouisBrunner/checks-action@v1.3.1 - if: steps.check.outputs.check_id && always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - conclusion: ${{ job.status }} - check_id: ${{ steps.check.outputs.check_id }} - - test-all: - name: Test All - ${{ matrix.platform.name }} - ${{ matrix.node-version }} - if: github.repository_owner == 'npm' - strategy: - fail-fast: false - matrix: - platform: - - name: Linux - os: ubuntu-latest - shell: bash - - name: macOS - os: macos-latest - shell: bash - - name: Windows - os: windows-latest - shell: cmd - node-version: - - 10.x - - 12.x - - 14.x - - 16.x - - 18.x - runs-on: ${{ matrix.platform.os }} - defaults: - run: - shell: ${{ matrix.platform.shell }} - steps: - - name: Get Workflow Job - uses: actions/github-script@v6 - if: inputs.check-sha - id: check-output - env: - JOB_NAME: "Test All" - MATRIX_NAME: " - ${{ matrix.platform.name }} - ${{ matrix.node-version }}" - with: - script: | - const { owner, repo } = context.repo - - const { data } = await github.rest.actions.listJobsForWorkflowRun({ - owner, - repo, - run_id: context.runId, - per_page: 100 - }) - - const jobName = process.env.JOB_NAME + process.env.MATRIX_NAME - const job = data.jobs.find(j => j.name.endsWith(jobName)) - const jobUrl = job?.html_url - - const shaUrl = `${context.serverUrl}/${owner}/${repo}/commit/${{ inputs.check-sha }}` - - let summary = `This check is assosciated with ${shaUrl}\n\n` - - if (jobUrl) { - summary += `For run logs, click here: ${jobUrl}` - } else { - summary += `Run logs could not be found for a job with name: "${jobName}"` - } - - return { summary } - - name: Create Check - uses: LouisBrunner/checks-action@v1.3.1 - id: check - if: inputs.check-sha - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: in_progress - name: Test All - ${{ matrix.platform.name }} - ${{ matrix.node-version }} - sha: ${{ inputs.check-sha }} - output: ${{ steps.check-output.outputs.result }} - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ inputs.ref }} - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: Update Windows npm - # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows - if: matrix.platform.os == 'windows-latest' && (startsWith(matrix.node-version, '12.') || startsWith(matrix.node-version, '14.')) - run: | - curl -sO https://registry.npmjs.org/npm/-/npm-7.5.4.tgz - tar xf npm-7.5.4.tgz - cd package - node lib/npm.js install --no-fund --no-audit -g ..\npm-7.5.4.tgz - cd .. - rmdir /s /q package - - name: Install npm@7 - if: startsWith(matrix.node-version, '10.') || startsWith(matrix.node-version, '12.') - run: npm i --prefer-online --no-fund --no-audit -g npm@7 - - name: Install npm@latest - if: ${{ !startsWith(matrix.node-version, '10.') && !startsWith(matrix.node-version, '12.') }} - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Set Tap RC - run: node ./test/fixtures/taprc.js - - name: Add Problem Matcher - run: echo "::add-matcher::.github/matchers/tap.json" - - name: Test - run: npm test --ignore-scripts - - name: Conclude Check - uses: LouisBrunner/checks-action@v1.3.1 - if: steps.check.outputs.check_id && always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - conclusion: ${{ job.status }} - check_id: ${{ steps.check.outputs.check_id }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dc3cf2e8..d026a49f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,114 +1,39 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - name: CI -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - - latest - schedule: - # "At 09:00 UTC (02:00 PT) on Monday" https://crontab.guru/#0_9_*_*_1 - - cron: "0 9 * * 1" +on: [push, pull_request] jobs: - lint: - name: Lint - if: github.repository_owner == 'npm' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Lint - run: npm run lint --ignore-scripts - - name: Post Lint - run: npm run postlint --ignore-scripts - - test: - name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }} - if: github.repository_owner == 'npm' + build: strategy: - fail-fast: false matrix: + node-version: [16.x, 18.x, 20.x] platform: - - name: Linux - os: ubuntu-latest - shell: bash - - name: macOS - os: macos-latest - shell: bash - - name: Windows - os: windows-latest - shell: cmd - node-version: - - 10.x - - 12.x - - 14.x - - 16.x - - 18.x + - os: ubuntu-latest + shell: bash + - os: macos-latest + shell: bash + - os: windows-latest + shell: bash + - os: windows-latest + shell: powershell + fail-fast: false + runs-on: ${{ matrix.platform.os }} defaults: run: shell: ${{ matrix.platform.shell }} + steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 + - name: Checkout Repository + uses: actions/checkout@v1.1.0 + + - name: Use Nodejs ${{ matrix.node-version }} + uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - name: Update Windows npm - # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows - if: matrix.platform.os == 'windows-latest' && (startsWith(matrix.node-version, '12.') || startsWith(matrix.node-version, '14.')) - run: | - curl -sO https://registry.npmjs.org/npm/-/npm-7.5.4.tgz - tar xf npm-7.5.4.tgz - cd package - node lib/npm.js install --no-fund --no-audit -g ..\npm-7.5.4.tgz - cd .. - rmdir /s /q package - - name: Install npm@7 - if: startsWith(matrix.node-version, '10.') || startsWith(matrix.node-version, '12.') - run: npm i --prefer-online --no-fund --no-audit -g npm@7 - - name: Install npm@latest - if: ${{ !startsWith(matrix.node-version, '10.') && !startsWith(matrix.node-version, '12.') }} - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Set Tap RC - run: node ./test/fixtures/taprc.js - - name: Add Problem Matcher - run: echo "::add-matcher::.github/matchers/tap.json" - - name: Test - run: npm test --ignore-scripts + + - name: Install dependencies + run: npm install + + - name: Run Tests + run: npm test -- -c -t0 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index cf9dc41c..00000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,41 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: CodeQL - -on: - push: - branches: - - main - - latest - pull_request: - branches: - - main - - latest - schedule: - # "At 10:00 UTC (03:00 PT) on Monday" https://crontab.guru/#0_10_*_*_1 - - cron: "0 10 * * 1" - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: javascript - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/post-dependabot.yml b/.github/workflows/post-dependabot.yml deleted file mode 100644 index 3bc9f1f9..00000000 --- a/.github/workflows/post-dependabot.yml +++ /dev/null @@ -1,124 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: Post Dependabot - -on: pull_request - -permissions: - contents: write - -jobs: - template-oss: - name: template-oss - if: github.repository_owner == 'npm' && github.actor == 'dependabot[bot]' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Fetch Dependabot Metadata - id: metadata - uses: dependabot/fetch-metadata@v1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - - # Dependabot can update multiple directories so we output which directory - # it is acting on so we can run the command for the correct root or workspace - - name: Get Dependabot Directory - if: contains(steps.metadata.outputs.dependency-names, '@npmcli/template-oss') - id: flags - run: | - dependabot_dir="${{ steps.metadata.outputs.directory }}" - if [[ "$dependabot_dir" == "/" ]]; then - echo "::set-output name=workspace::-iwr" - else - # strip leading slash from directory so it works as a - # a path to the workspace flag - echo "::set-output name=workspace::-w ${dependabot_dir#/}" - fi - - - name: Apply Changes - if: steps.flags.outputs.workspace - id: apply - run: | - npm run template-oss-apply ${{ steps.flags.outputs.workspace }} - if [[ `git status --porcelain` ]]; then - echo "::set-output name=changes::true" - fi - # This only sets the conventional commit prefix. This workflow can't reliably determine - # what the breaking change is though. If a BREAKING CHANGE message is required then - # this PR check will fail and the commit will be amended with stafftools - if [[ "${{ steps.metadata.outputs.update-type }}" == "version-update:semver-major" ]]; then - prefix='feat!' - else - prefix='chore' - fi - echo "::set-output name=message::$prefix: postinstall for dependabot template-oss PR" - - # This step will fail if template-oss has made any workflow updates. It is impossible - # for a workflow to update other workflows. In the case it does fail, we continue - # and then try to apply only a portion of the changes in the next step - - name: Push All Changes - if: steps.apply.outputs.changes - id: push - continue-on-error: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git commit -am "${{ steps.apply.outputs.message }}" - git push - - # If the previous step failed, then reset the commit and remove any workflow changes - # and attempt to commit and push again. This is helpful because we will have a commit - # with the correct prefix that we can then --amend with @npmcli/stafftools later. - - name: Push All Changes Except Workflows - if: steps.apply.outputs.changes && steps.push.outcome == 'failure' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git reset HEAD~ - git checkout HEAD -- .github/workflows/ - git clean -fd .github/workflows/ - git commit -am "${{ steps.apply.outputs.message }}" - git push - - # Check if all the necessary template-oss changes were applied. Since we continued - # on errors in one of the previous steps, this check will fail if our follow up - # only applied a portion of the changes and we need to followup manually. - # - # Note that this used to run `lint` and `postlint` but that will fail this action - # if we've also shipped any linting changes separate from template-oss. We do - # linting in another action, so we want to fail this one only if there are - # template-oss changes that could not be applied. - - name: Check Changes - if: steps.apply.outputs.changes - run: | - npm exec --offline ${{ steps.flags.outputs.workspace }} -- template-oss-check - - - name: Fail on Breaking Change - if: steps.apply.outputs.changes && startsWith(steps.apply.outputs.message, 'feat!') - run: | - echo "This PR has a breaking change. Run 'npx -p @npmcli/stafftools gh template-oss-fix'" - echo "for more information on how to fix this with a BREAKING CHANGE footer." - exit 1 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml deleted file mode 100644 index a194b619..00000000 --- a/.github/workflows/pull-request.yml +++ /dev/null @@ -1,51 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: Pull Request - -on: - pull_request: - types: - - opened - - reopened - - edited - - synchronize - -jobs: - commitlint: - name: Lint Commits - if: github.repository_owner == 'npm' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Run Commitlint on Commits - id: commit - continue-on-error: true - run: | - npx --offline commitlint -V --from origin/${{ github.base_ref }} --to ${{ github.event.pull_request.head.sha }} - - name: Run Commitlint on PR Title - if: steps.commit.outcome == 'failure' - run: | - echo ${{ github.event.pull_request.title }} | npx --offline commitlint -V diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index e95ae8c6..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,308 +0,0 @@ -# This file is automatically added by @npmcli/template-oss. Do not edit. - -name: Release - -on: - workflow_dispatch: - push: - branches: - - main - - latest - - release/v* - -permissions: - contents: write - pull-requests: write - checks: write - -jobs: - release: - outputs: - pr: ${{ steps.release.outputs.pr }} - releases: ${{ steps.release.outputs.releases }} - release-flags: ${{ steps.release.outputs.release-flags }} - branch: ${{ steps.release.outputs.pr-branch }} - pr-number: ${{ steps.release.outputs.pr-number }} - comment-id: ${{ steps.pr-comment.outputs.result }} - check-id: ${{ steps.check.outputs.check_id }} - name: Release - if: github.repository_owner == 'npm' - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Release Please - id: release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - npx --offline template-oss-release-please ${{ github.ref_name }} ${{ github.event_name }} - - name: Post Pull Request Comment - if: steps.release.outputs.pr-number - uses: actions/github-script@v6 - id: pr-comment - env: - PR_NUMBER: ${{ steps.release.outputs.pr-number }} - REF_NAME: ${{ github.ref_name }} - with: - script: | - const { REF_NAME, PR_NUMBER } = process.env - const repo = { owner: context.repo.owner, repo: context.repo.repo } - const issue = { ...repo, issue_number: PR_NUMBER } - - const { data: workflow } = await github.rest.actions.getWorkflowRun({ ...repo, run_id: context.runId }) - - let body = '## Release Manager\n\n' - - const comments = await github.paginate(github.rest.issues.listComments, issue) - let commentId = comments?.find(c => c.user.login === 'github-actions[bot]' && c.body.startsWith(body))?.id - - body += `Release workflow run: ${workflow.html_url}\n\n#### Force CI to Update This Release\n\n` - body += `This PR will be updated and CI will run for every non-\`chore:\` commit that is pushed to \`main\`. ` - body += `To force CI to update this PR, run this command:\n\n` - body += `\`\`\`\ngh workflow run release.yml -r ${REF_NAME}\n\`\`\`` - - if (commentId) { - await github.rest.issues.updateComment({ ...repo, comment_id: commentId, body }) - } else { - const { data: comment } = await github.rest.issues.createComment({ ...issue, body }) - commentId = comment?.id - } - - return commentId - - name: Get Workflow Job - uses: actions/github-script@v6 - if: steps.release.outputs.pr-sha - id: check-output - env: - JOB_NAME: "Release" - MATRIX_NAME: "" - with: - script: | - const { owner, repo } = context.repo - - const { data } = await github.rest.actions.listJobsForWorkflowRun({ - owner, - repo, - run_id: context.runId, - per_page: 100 - }) - - const jobName = process.env.JOB_NAME + process.env.MATRIX_NAME - const job = data.jobs.find(j => j.name.endsWith(jobName)) - const jobUrl = job?.html_url - - const shaUrl = `${context.serverUrl}/${owner}/${repo}/commit/${{ steps.release.outputs.pr-sha }}` - - let summary = `This check is assosciated with ${shaUrl}\n\n` - - if (jobUrl) { - summary += `For run logs, click here: ${jobUrl}` - } else { - summary += `Run logs could not be found for a job with name: "${jobName}"` - } - - return { summary } - - name: Create Check - uses: LouisBrunner/checks-action@v1.3.1 - id: check - if: steps.release.outputs.pr-sha - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: in_progress - name: Release - sha: ${{ steps.release.outputs.pr-sha }} - output: ${{ steps.check-output.outputs.result }} - - update: - needs: release - outputs: - sha: ${{ steps.commit.outputs.sha }} - check-id: ${{ steps.check.outputs.check_id }} - name: Update - Release - if: github.repository_owner == 'npm' && needs.release.outputs.pr - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ needs.release.outputs.branch }} - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Run Post Pull Request Actions - env: - RELEASE_PR_NUMBER: ${{ needs.release.outputs.pr-number }} - RELEASE_COMMENT_ID: ${{ needs.release.outputs.comment-id }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - npm exec --offline -- template-oss-release-manager --lockfile=false - npm run rp-pull-request --ignore-scripts --if-present - - name: Commit - id: commit - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git commit --all --amend --no-edit || true - git push --force-with-lease - echo "::set-output name=sha::$(git rev-parse HEAD)" - - name: Get Workflow Job - uses: actions/github-script@v6 - if: steps.commit.outputs.sha - id: check-output - env: - JOB_NAME: "Update - Release" - MATRIX_NAME: "" - with: - script: | - const { owner, repo } = context.repo - - const { data } = await github.rest.actions.listJobsForWorkflowRun({ - owner, - repo, - run_id: context.runId, - per_page: 100 - }) - - const jobName = process.env.JOB_NAME + process.env.MATRIX_NAME - const job = data.jobs.find(j => j.name.endsWith(jobName)) - const jobUrl = job?.html_url - - const shaUrl = `${context.serverUrl}/${owner}/${repo}/commit/${{ steps.commit.outputs.sha }}` - - let summary = `This check is assosciated with ${shaUrl}\n\n` - - if (jobUrl) { - summary += `For run logs, click here: ${jobUrl}` - } else { - summary += `Run logs could not be found for a job with name: "${jobName}"` - } - - return { summary } - - name: Create Check - uses: LouisBrunner/checks-action@v1.3.1 - id: check - if: steps.commit.outputs.sha - with: - token: ${{ secrets.GITHUB_TOKEN }} - status: in_progress - name: Release - sha: ${{ steps.commit.outputs.sha }} - output: ${{ steps.check-output.outputs.result }} - - name: Conclude Check - uses: LouisBrunner/checks-action@v1.3.1 - if: needs.release.outputs.check-id && always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - conclusion: ${{ job.status }} - check_id: ${{ needs.release.outputs.check-id }} - - ci: - name: CI - Release - needs: [ release, update ] - if: needs.release.outputs.pr - uses: ./.github/workflows/ci-release.yml - with: - ref: ${{ needs.release.outputs.branch }} - check-sha: ${{ needs.update.outputs.sha }} - - post-ci: - needs: [ release, update, ci ] - name: Post CI - Release - if: github.repository_owner == 'npm' && needs.release.outputs.pr && always() - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Get Needs Result - id: needs-result - run: | - result="" - if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then - result="failure" - elif [[ "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then - result="cancelled" - else - result="success" - fi - echo "::set-output name=result::$result" - - name: Conclude Check - uses: LouisBrunner/checks-action@v1.3.1 - if: needs.update.outputs.check-id && always() - with: - token: ${{ secrets.GITHUB_TOKEN }} - conclusion: ${{ steps.needs-result.outputs.result }} - check_id: ${{ needs.update.outputs.check-id }} - - post-release: - needs: release - name: Post Release - Release - if: github.repository_owner == 'npm' && needs.release.outputs.releases - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - name: Support Long Paths - if: matrix.platform.os == 'windows-latest' - run: git config --system core.longpaths true - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Git User - run: | - git config --global user.email "npm-cli+bot@github.com" - git config --global user.name "npm CLI robot" - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - name: Install npm@latest - run: npm i --prefer-online --no-fund --no-audit -g npm@latest - - name: npm Version - run: npm -v - - name: Install Dependencies - run: npm i --ignore-scripts --no-audit --no-fund - - name: Run Post Release Actions - env: - RELEASES: ${{ needs.release.outputs.releases }} - run: | - npm run rp-release --ignore-scripts --if-present ${{ join(fromJSON(needs.release.outputs.release-flags), ' ') }}