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), ' ') }}