From dd92d87ebe1b057cb0ebf2ebf54480b8a5425e68 Mon Sep 17 00:00:00 2001 From: leafkevin Date: Sat, 10 May 2025 18:31:59 +0800 Subject: [PATCH] update --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++ .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.md | 18 ++ .github/dependabot.yml | 22 ++ .github/eslint-compact.json | 18 ++ .github/eslint-stylish.json | 22 ++ .github/pull_request_template.md | 9 + .github/tsc.json | 18 ++ .github/workflows/basic-validation.yml | 19 ++ .github/workflows/check-dist.yml | 19 ++ .github/workflows/codeql-analysis.yml | 14 + .github/workflows/e2e-cache.yml | 245 ++++++++++++++++ .github/workflows/licensed.yml | 15 + .github/workflows/proxy.yml | 52 ++++ .../workflows/publish-immutable-actions.yml | 20 ++ .../workflows/release-new-action-version.yml | 28 ++ .github/workflows/update-config-files.yml | 11 + .github/workflows/versions.yml | 277 ++++++++++++++++++ 18 files changed, 846 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/dependabot.yml create mode 100644 .github/eslint-compact.json create mode 100644 .github/eslint-stylish.json create mode 100644 .github/pull_request_template.md create mode 100644 .github/tsc.json create mode 100644 .github/workflows/basic-validation.yml create mode 100644 .github/workflows/check-dist.yml create mode 100644 .github/workflows/codeql-analysis.yml create mode 100644 .github/workflows/e2e-cache.yml create mode 100644 .github/workflows/licensed.yml create mode 100644 .github/workflows/proxy.yml create mode 100644 .github/workflows/publish-immutable-actions.yml create mode 100644 .github/workflows/release-new-action-version.yml create mode 100644 .github/workflows/update-config-files.yml create mode 100644 .github/workflows/versions.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..ca88112 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a bug report +title: '' +labels: bug, needs triage +assignees: '' + +--- + + + + +**Description:** +A clear and concise description of what the bug is. + +**Action version:** +Specify the action version + +**Platform:** +- [ ] Ubuntu +- [ ] macOS +- [ ] Windows + +**Runner type:** +- [ ] Hosted +- [ ] Self-hosted + +**Tools version:** + + +**Repro steps:** +A description with steps to reproduce the issue. If you have a public example or repo to share, please provide the link. + +**Expected behavior:** +A description of what you expected to happen. + +**Actual behavior:** +A description of what is actually happening. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..1c37027 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,18 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: feature request, needs triage +assignees: '' +--- + + + +**Description:** +Describe your proposal. + +**Justification:** +Justification or a use case for your proposal. + +**Are you willing to submit a PR?** + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..853bc0a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + # Enable version updates for npm + - package-ecosystem: 'npm' + # Look for `package.json` and `lock` files in the `root` directory + directory: '/' + # Check the npm registry for updates every day (weekdays) + schedule: + interval: 'weekly' + + # Enable version updates for GitHub Actions + - package-ecosystem: 'github-actions' + # Workflow files stored in the default location of `.github/workflows` + # You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`. + directory: '/' + schedule: + interval: 'weekly' diff --git a/.github/eslint-compact.json b/.github/eslint-compact.json new file mode 100644 index 0000000..d577d49 --- /dev/null +++ b/.github/eslint-compact.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "eslint-compact", + "pattern": [ + { + "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s([Ee]rror|[Ww]arning|[Ii]nfo)\\s-\\s(.+)\\s\\((.+)\\)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5, + "code": 6 + } + ] + } + ] +} diff --git a/.github/eslint-stylish.json b/.github/eslint-stylish.json new file mode 100644 index 0000000..db9655b --- /dev/null +++ b/.github/eslint-stylish.json @@ -0,0 +1,22 @@ +{ + "problemMatcher": [ + { + "owner": "eslint-stylish", + "pattern": [ + { + "regexp": "^\\s*([^\\s].*)$", + "file": 1 + }, + { + "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", + "line": 1, + "column": 2, + "severity": 3, + "message": 4, + "code": 5, + "loop": true + } + ] + } + ] +} diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..ef54aca --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,9 @@ +**Description:** +Describe your changes. + +**Related issue:** +Add link to the related issue. + +**Check list:** +- [ ] Mark if documentation changes are required. +- [ ] Mark if tests were added or updated to cover the changes. \ No newline at end of file diff --git a/.github/tsc.json b/.github/tsc.json new file mode 100644 index 0000000..7d8df56 --- /dev/null +++ b/.github/tsc.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "tsc", + "pattern": [ + { + "regexp": "^([^\\s].*)[\\(:](\\d+)[,:](\\d+)(?:\\):\\s+|\\s+-\\s+)(error|warning|info)\\s+TS(\\d+)\\s*:\\s*(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "code": 5, + "message": 6 + } + ] + } + ] +} diff --git a/.github/workflows/basic-validation.yml b/.github/workflows/basic-validation.yml new file mode 100644 index 0000000..d2b406f --- /dev/null +++ b/.github/workflows/basic-validation.yml @@ -0,0 +1,19 @@ +name: Basic validation + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + call-basic-validation: + name: Basic validation + uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main + with: + node-version: '20.x' diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml new file mode 100644 index 0000000..64d4047 --- /dev/null +++ b/.github/workflows/check-dist.yml @@ -0,0 +1,19 @@ +name: Check dist + +on: + push: + branches: + - main + paths-ignore: + - '**.md' + pull_request: + paths-ignore: + - '**.md' + workflow_dispatch: + +jobs: + call-check-dist: + name: Check dist/ + uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main + with: + node-version: '20.x' diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..7a82612 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,14 @@ +name: CodeQL analysis + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: '0 3 * * 0' + +jobs: + call-codeQL-analysis: + name: CodeQL analysis + uses: actions/reusable-workflows/.github/workflows/codeql-analysis.yml@main diff --git a/.github/workflows/e2e-cache.yml b/.github/workflows/e2e-cache.yml new file mode 100644 index 0000000..cede9b6 --- /dev/null +++ b/.github/workflows/e2e-cache.yml @@ -0,0 +1,245 @@ +name: e2e-cache + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + node-npm-depencies-caching: + name: Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Clean global cache + run: npm cache clean --force + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - name: Install dependencies + run: npm install + - name: Verify node and npm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + node-pnpm-depencies-caching: + name: Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 6.10.0 + - name: Generate pnpm file + run: pnpm install + - name: Remove dependencies + shell: pwsh + run: Remove-Item node_modules -Force -Recurse + - name: Clean global cache + run: rm -rf ~/.pnpm-store + shell: bash + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + - name: Install dependencies + run: pnpm install + - name: Verify node and pnpm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + node-yarn1-depencies-caching: + name: Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20] + steps: + - uses: actions/checkout@v4 + - name: Yarn version + run: yarn --version + - name: Generate yarn file + run: yarn install + - name: Remove dependencies + shell: pwsh + run: Remove-Item node_modules -Force -Recurse + - name: Clean global cache + run: yarn cache clean + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + - name: Install dependencies + run: yarn install --ignore-engines + - name: Verify node and yarn + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + node-yarn3-depencies-caching: + name: Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) + runs-on: ${{ matrix.os }} + env: + YARN_ENABLE_IMMUTABLE_INSTALLS: false + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Update yarn + run: yarn set version 3.6.4 + - name: Yarn version + run: yarn --version + - name: Generate simple .yarnrc.yml + run: | + echo "nodeLinker: node-modules" >> .yarnrc.yml + - name: Generate yarn file + run: yarn install + - name: Remove dependencies + shell: pwsh + run: Remove-Item node_modules -Force -Recurse + - name: Clean global cache + run: yarn cache clean --all + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + - name: Install dependencies + run: yarn install + - name: Verify node and yarn + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + yarn-subprojects: + name: Test yarn subprojects + strategy: + matrix: + node-version: [18, 20, 22] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: prepare sub-projects + run: __tests__/prepare-yarn-subprojects.sh yarn1 + + # expect + # - no errors + # - log + # ##[debug]Cache Paths: + # ##[debug]["sub2/.yarn/cache","sub3/.yarn/cache","../../../.cache/yarn/v6"] + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + cache-dependency-path: | + **/*.lock + yarn.lock + + yarn-subprojects-berry-local: + name: Test yarn subprojects all locally managed + strategy: + matrix: + node-version: [18, 20, 22] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: prepare sub-projects + run: __tests__/prepare-yarn-subprojects.sh keepcache keepcache + + # expect + # - no errors + # - log + # ##[info]All dependencies are managed locally by yarn3, the previous cache can be used + # ##[debug]["node-cache-Linux-yarn-401024703386272f1a950c9f014cbb1bb79a7a5b6e1fb00e8b90d06734af41ee","node-cache-Linux-yarn"] + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + cache-dependency-path: | + sub2/*.lock + sub3/*.lock + + yarn-subprojects-berry-global: + name: Test yarn subprojects some locally managed + strategy: + matrix: + node-version: [18, 20, 22] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: prepare sub-projects + run: __tests__/prepare-yarn-subprojects.sh global + + # expect + # - no errors + # - log must + # ##[debug]"/home/runner/work/setup-node-test/setup-node-test/sub2" dependencies are managed by yarn 3 locally + # ##[debug]"/home/runner/work/setup-node-test/setup-node-test/sub3" dependencies are not managed by yarn 3 locally + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + cache-dependency-path: | + sub2/*.lock + sub3/*.lock + + yarn-subprojects-berry-git: + name: Test yarn subprojects managed by git + strategy: + matrix: + node-version: [18, 20, 22] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: prepare sub-projects + run: /bin/bash __tests__/prepare-yarn-subprojects.sh keepcache + + # expect + # - no errors + # - log + # [debug]"/home/runner/work/setup-node-test/setup-node-test/sub2" has .yarn/cache - dependencies are kept in the repository + # [debug]"/home/runner/work/setup-node-test/setup-node-test/sub3" has .yarn/cache - dependencies are kept in the repository + # [debug]["node-cache-Linux-yarn-401024703386272f1a950c9f014cbb1bb79a7a5b6e1fb00e8b90d06734af41ee"] + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + cache-dependency-path: | + sub2/*.lock + sub3/*.lock diff --git a/.github/workflows/licensed.yml b/.github/workflows/licensed.yml new file mode 100644 index 0000000..37f1560 --- /dev/null +++ b/.github/workflows/licensed.yml @@ -0,0 +1,15 @@ +name: Licensed + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + call-licensed: + name: Licensed + uses: actions/reusable-workflows/.github/workflows/licensed.yml@main diff --git a/.github/workflows/proxy.yml b/.github/workflows/proxy.yml new file mode 100644 index 0000000..ff29d73 --- /dev/null +++ b/.github/workflows/proxy.yml @@ -0,0 +1,52 @@ +name: proxy + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + test-proxy: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + options: --dns 127.0.0.1 + services: + squid-proxy: + image: ubuntu/squid:latest + ports: + - 3128:3128 + env: + https_proxy: http://squid-proxy:3128 + steps: + - uses: actions/checkout@v4 + - name: Clear tool cache + run: rm -rf $RUNNER_TOOL_CACHE/* + - name: Setup node 14 + uses: ./ + with: + node-version: 14.x + - name: Verify node and npm + run: __tests__/verify-node.sh 14 + + test-bypass-proxy: + runs-on: ubuntu-latest + env: + https_proxy: http://no-such-proxy:3128 + no_proxy: api.github.com,github.com,nodejs.org,registry.npmjs.org,*.s3.amazonaws.com,s3.amazonaws.com + steps: + - uses: actions/checkout@v4 + - name: Clear tool cache + run: rm -rf $RUNNER_TOOL_CACHE/* + - name: Setup node 11 + uses: ./ + with: + node-version: 11 + - name: Verify node and npm + run: __tests__/verify-node.sh 11 diff --git a/.github/workflows/publish-immutable-actions.yml b/.github/workflows/publish-immutable-actions.yml new file mode 100644 index 0000000..7c25834 --- /dev/null +++ b/.github/workflows/publish-immutable-actions.yml @@ -0,0 +1,20 @@ +name: 'Publish Immutable Action Version' + +on: + release: + types: [published] + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + packages: write + + steps: + - name: Checking out + uses: actions/checkout@v4 + - name: Publish + id: publish + uses: actions/publish-immutable-action@v0.0.4 diff --git a/.github/workflows/release-new-action-version.yml b/.github/workflows/release-new-action-version.yml new file mode 100644 index 0000000..7e5de34 --- /dev/null +++ b/.github/workflows/release-new-action-version.yml @@ -0,0 +1,28 @@ +name: Release new action version + +on: + release: + types: [released] + workflow_dispatch: + inputs: + TAG_NAME: + description: 'Tag name that the major tag will point to' + required: true + +env: + TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} +permissions: + contents: write + +jobs: + update_tag: + name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes + environment: + name: releaseNewActionVersion + runs-on: ubuntu-latest + steps: + - name: Update the ${{ env.TAG_NAME }} tag + uses: actions/publish-action@v0.3.0 + with: + source-tag: ${{ env.TAG_NAME }} + slack-webhook: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/update-config-files.yml b/.github/workflows/update-config-files.yml new file mode 100644 index 0000000..87af500 --- /dev/null +++ b/.github/workflows/update-config-files.yml @@ -0,0 +1,11 @@ +name: Update configuration files + +on: + schedule: + - cron: '0 3 * * 0' + workflow_dispatch: + +jobs: + call-update-configuration-files: + name: Update configuration files + uses: actions/reusable-workflows/.github/workflows/update-config-files.yml@main diff --git a/.github/workflows/versions.yml b/.github/workflows/versions.yml new file mode 100644 index 0000000..b51ba8b --- /dev/null +++ b/.github/workflows/versions.yml @@ -0,0 +1,277 @@ +name: versions + +on: + pull_request: + paths-ignore: + - '**.md' + push: + branches: + - main + - releases/* + paths-ignore: + - '**.md' + +jobs: + local-cache: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + lts-syntax: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-13] + node-version: [lts/dubnium, lts/erbium, lts/fermium, lts/*, lts/-1] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + check-latest: true + - if: runner.os != 'Windows' && runner.os != 'macOS' + name: Verify node and npm + run: | + . "$NVM_DIR/nvm.sh" + [[ $(nvm version-remote "${{ matrix.node-version }}") =~ ^v([^.]+) ]] + __tests__/verify-node.sh "${BASH_REMATCH[1]}" + shell: bash + + v8-canary-syntax: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: + [ + '20-v8-canary', + '20.0.0-v8-canary', + '20.0.0-v8-canary20221101e50e45c9f8' + ] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: | + canaryVersion="${{ matrix.node-version }}" + majorVersion=$(echo $canaryVersion | cut -d- -f1) + __tests__/verify-node.sh "$majorVersion" + shell: bash + + nightly-syntax: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [20-nightly, 21-nightly, 18.0.0-nightly] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: | + nightlyVersion="${{ matrix.node-version }}" + majorVersion=$(echo $nightlyVersion | cut -d- -f1) + __tests__/verify-node.sh "$majorVersion" + shell: bash + + rc-syntax: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [20.0.0-rc.1, 18.0.0-rc.2, 19.0.0-rc.0] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: | + rcVersion="${{ matrix.node-version }}" + majorVersion=$(echo $rcVersion | cut -d- -f1) + __tests__/verify-node.sh "$majorVersion" + shell: bash + + manifest: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18.20.0, 20.10.0, 22.0.0] + steps: + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + check-latest: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Setup Node and check latest + uses: ./ + with: + node-version: ${{ matrix.node-version }} + check-latest: true + - name: Verify node and npm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + version-file: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version-file: + [.nvmrc, .tool-versions, .tool-versions-node, package.json] + steps: + - uses: actions/checkout@v4 + - name: Setup node from node version file + uses: ./ + with: + node-version-file: '__tests__/data/${{ matrix.node-version-file }}' + - name: Verify node + run: __tests__/verify-node.sh 20 + + version-file-volta: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + steps: + - uses: actions/checkout@v4 + - name: Setup node from node version file + uses: ./ + with: + node-version-file: '__tests__/data/package-volta.json' + - name: Verify node + run: __tests__/verify-node.sh 20 + + version-file-volta-extends: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + steps: + - uses: actions/checkout@v4 + - name: Setup node from node version file + uses: ./ + with: + node-version-file: '__tests__/data/package-volta-extends.json' + - name: Verify node + run: __tests__/verify-node.sh 20 + + node-dist: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [17, 19] + steps: + - uses: actions/checkout@v4 + - name: Setup Node from dist + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Verify node and npm + run: __tests__/verify-node.sh "${{ matrix.node-version }}" + shell: bash + + old-versions: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-13] + steps: + - uses: actions/checkout@v4 + # test old versions which didn't have npm and layout different + - name: Setup node 0.12.18 from dist + uses: ./ + with: + node-version: 0.12.18 + - name: Verify node + run: __tests__/verify-node.sh 0.12.18 SKIP_NPM + shell: bash + + arch: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - name: Setup node 20 x86 from dist + uses: ./ + with: + node-version: '20' + architecture: 'x86' + - name: Verify node + run: __tests__/verify-arch.sh "ia32" + shell: bash + + node-latest-aliases: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest, macos-13] + node-version: [current, latest, node] + steps: + - name: Get node version + run: | + latestNodeVersion=$(curl https://nodejs.org/dist/index.json | jq -r '. [0].version') + echo "LATEST_NODE_VERSION=$latestNodeVersion" >> $GITHUB_OUTPUT + id: version + shell: bash + - uses: actions/checkout@v4 + - name: Setup Node + uses: ./ + with: + node-version: ${{ matrix.node-version }} + - name: Retrieve version after install + run: | + updatedVersion=$(echo $(node --version)) + echo "NODE_VERSION_UPDATED=$updatedVersion" >> $GITHUB_OUTPUT + id: updatedVersion + shell: bash + - name: Compare versions + if: ${{ steps.version.outputs.LATEST_NODE_VERSION != steps.updatedVersion.outputs.NODE_VERSION_UPDATED}} + run: | + echo "Latest node version failed to download." + exit 1