├── .eslintrc.cjs ├── .github ├── FUNDING.yml ├── dependabot.yml ├── settings.yml └── workflows │ ├── README.md │ ├── ci.yml │ ├── setup-test-workspace │ └── action.yml │ ├── test-action.yml │ ├── test-build.yml │ ├── test-cache.yml │ └── test-inputs.yml ├── .gitignore ├── .npmrc ├── .prettierrc.json ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── __tests__ └── utils.test.ts ├── action.yml ├── dist ├── index.js └── licenses.txt ├── jest.config.js ├── package-lock.json ├── package.json ├── src ├── main.ts ├── rustdoc-cache.ts └── utils.ts └── tsconfig.json /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], 3 | parser: '@typescript-eslint/parser', 4 | plugins: ['@typescript-eslint'], 5 | root: true, 6 | rules: { 7 | 'curly': 'error' 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [obi1kenobi] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | day: "tuesday" 8 | time: "14:38" 9 | timezone: "America/New_York" 10 | -------------------------------------------------------------------------------- /.github/settings.yml: -------------------------------------------------------------------------------- 1 | # These settings are synced to GitHub by https://probot.github.io/apps/settings/ 2 | 3 | repository: 4 | description: A GitHub Action for running cargo-semver-checks 5 | topics: rust cargo semver action 6 | has_issues: true 7 | has_projects: true 8 | has_wiki: true 9 | has_downloads: true 10 | default_branch: main 11 | 12 | allow_squash_merge: true 13 | allow_merge_commit: true 14 | allow_rebase_merge: true 15 | 16 | allow_auto_merge: true 17 | delete_branch_on_merge: true 18 | 19 | labels: 20 | - name: A-action 21 | color: '#f7e101' 22 | description: "Area: the action itself" 23 | - name: A-docs 24 | color: '#f7e101' 25 | description: "Area: documentation for the command and lints" 26 | - name: C-bug 27 | color: '#b60205' 28 | description: "Category: doesn't meet expectations" 29 | - name: C-enhancement 30 | color: '#1d76db' 31 | description: "Category: raise the bar on expectations" 32 | - name: M-breaking-change 33 | color: "#E10C02" 34 | description: "Meta: Implementing or merging this will introduce a breaking change." 35 | - name: E-help-wanted 36 | color: '#02E10C' 37 | description: "Call for participation: Help is requested to fix this issue." 38 | 39 | branches: 40 | - name: main 41 | protection: 42 | required_pull_request_reviews: null 43 | required_conversation_resolution: true 44 | enforce_admins: false 45 | restrictions: null 46 | -------------------------------------------------------------------------------- /.github/workflows/README.md: -------------------------------------------------------------------------------- 1 | The testing workflow is divided into several parts: 2 | 3 | - `test-action.yml`, which contains simple, general integration tests of the action that should be run on each platform 4 | 5 | and the following ones run on `ubuntu-latest`: 6 | 7 | - `test-build.yml` containing source-related checks: linters, formatters and verifying whether the sources match `dist/` directory, 8 | - `test-inputs.yml` containing specific integration tests checking whether the action inputs are processed properly, 9 | - `test-cache.yml` focusing on veryfing whether the baseline rustdoc is cached correctly. 10 | 11 | `setup-test-workspace` is a helper action that creates a workspace containing two crates: the test fork of `ref_slice` and a dummy crate that has no matching baseline version on `crates.io`. 12 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | env: 10 | RUST_BACKTRACE: 1 11 | 12 | jobs: 13 | ci-everything: 14 | name: All CI stages 15 | runs-on: ubuntu-latest 16 | needs: 17 | - test-build 18 | - test-action 19 | - test-inputs 20 | - test-cache 21 | if: ${{ success() || failure() }} # Run this job even if a dependency has failed. 22 | steps: 23 | - name: Job outcomes 24 | run: | 25 | echo "test-build: ${{ needs.test-build.result }}" 26 | echo "test-action: ${{ needs.test-action.result }}" 27 | echo "test-inputs: ${{ needs.test-inputs.result }}" 28 | echo "test-cache: ${{ needs.test-cache.result }}" 29 | 30 | # Fail this required job if any of its dependent jobs have failed. 31 | # 32 | # Do not attempt to consolidate these steps into one step, it won't work. 33 | # Multi-line `if` clauses are not evaluated properly: see the intermediate commits in 34 | # https://github.com/obi1kenobi/cargo-semver-checks/pull/405 35 | - if: ${{ needs.test-build.result != 'success' }} 36 | run: exit 1 37 | - if: ${{ needs.test-action.result != 'success' }} 38 | run: exit 1 39 | - if: ${{ needs.test-inputs.result != 'success' }} 40 | run: exit 1 41 | - if: ${{ needs.test-cache.result != 'success' }} 42 | run: exit 1 43 | 44 | test-build: 45 | name: Test build 46 | uses: ./.github/workflows/test-build.yml 47 | 48 | test-action: 49 | name: Smoke test the action 50 | uses: ./.github/workflows/test-action.yml 51 | 52 | test-inputs: 53 | name: Test action inputs 54 | uses: ./.github/workflows/test-inputs.yml 55 | 56 | test-cache: 57 | name: Test rustdoc caching 58 | uses: ./.github/workflows/test-cache.yml 59 | -------------------------------------------------------------------------------- /.github/workflows/setup-test-workspace/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup test workspace 2 | inputs: 3 | ref-slice-ref: 4 | description: 'Git reference (branch name, tag or commit hash) of the ref_slice test fork to checkout' 5 | required: true 6 | runs: 7 | using: 'composite' 8 | steps: 9 | - name: Checkout the ref-slice fork 10 | uses: actions/checkout@v4 11 | with: 12 | repository: mgr0dzicki/cargo-semver-action-ref-slice 13 | ref: ${{ inputs.ref-slice-ref }} 14 | persist-credentials: true 15 | path: ref_slice 16 | - name: Create dummy crate 17 | # This crates do not have matching baselines on crates.io, so any try 18 | # of checking them should make cargo-semver-checks fail. 19 | run: | 20 | cargo new cargo-semver-action-dummy --lib 21 | cargo new cargo-semver-action-dummy-2 --lib 22 | shell: bash 23 | - name: Create workspace Cargo.toml 24 | run: echo -e "[workspace]\nmembers=['ref_slice','cargo-semver-action-dummy','cargo-semver-action-dummy-2']" > Cargo.toml 25 | shell: bash 26 | -------------------------------------------------------------------------------- /.github/workflows/test-action.yml: -------------------------------------------------------------------------------- 1 | name: Smoke test the action 2 | 3 | # Assumes that the latest published normal version of `ref_slice` not greater 4 | # than 1.2.1 is 1.2.1 itself. 5 | 6 | on: 7 | workflow_call: 8 | 9 | env: 10 | RUST_BACKTRACE: 1 11 | 12 | jobs: 13 | run-tests: 14 | name: Run tests 15 | strategy: 16 | matrix: 17 | os: ['ubuntu-latest', 'windows-latest', 'macos-latest'] 18 | toolchain: ["stable", "beta"] 19 | experimental: [false] 20 | include: 21 | - os: 'ubuntu-latest' 22 | toolchain: 'nightly' 23 | experimental: true 24 | - os: 'windows-latest' 25 | toolchain: 'nightly' 26 | experimental: true 27 | - os: 'macos-latest' 28 | toolchain: 'nightly' 29 | experimental: true 30 | continue-on-error: ${{ matrix.experimental }} 31 | runs-on: ${{ matrix.os }} 32 | steps: 33 | - name: Checkout the test repository and test with patch change and patch version bump 34 | uses: actions/checkout@v4 35 | with: 36 | repository: mgr0dzicki/cargo-semver-action-ref-slice 37 | ref: patch_change 38 | persist-credentials: true 39 | - name: Checkout the action 40 | uses: actions/checkout@v4 41 | with: 42 | path: action 43 | - name: Run the action 44 | uses: ./action/ 45 | with: 46 | rust-toolchain: ${{ matrix.toolchain }} 47 | - name: Checkout the test with major change and patch version bump 48 | run: | 49 | git fetch origin major_change 50 | git checkout major_change 51 | - name: Run the action (expected to fail) 52 | id: action_major 53 | uses: ./action/ 54 | with: 55 | rust-toolchain: ${{ matrix.toolchain }} 56 | continue-on-error: true 57 | - name: Fail if the action has not returned any errors (but it should have) 58 | if: steps.action_major.outcome != 'failure' 59 | run: | 60 | echo "Error! The action should have failed because of the breaking change, but it has not." 61 | exit 1 62 | -------------------------------------------------------------------------------- /.github/workflows/test-build.yml: -------------------------------------------------------------------------------- 1 | name: Test action build 2 | 3 | on: 4 | workflow_call: 5 | 6 | jobs: 7 | test-build: 8 | name: Build the action and run TypeScript tests 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout the action 12 | uses: actions/checkout@v4 13 | 14 | - name: Setup Node.js 20.x 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version: 20 18 | 19 | - name: Install npm-cli-login 20 | run: npm install -g npm-cli-login 21 | - name: Login to GitHub npm registry 22 | # Both username and email address are irrelevant here, but they must be 23 | # specified because otherwise npm-cli-login fails. 24 | run: | 25 | npm-cli-login -s @actions-rs -r https://npm.pkg.github.com \ 26 | -u does_not_matter -p ${{ secrets.GITHUB_TOKEN }} -e does_not_m@ter.com 27 | 28 | - name: Install dependencies 29 | run: npm ci 30 | - name: Rebuild the action and run tests 31 | run: npm run all 32 | 33 | - name: Compare the expected and actual src/ directories 34 | run: | 35 | if [ "$(git diff src/ | wc -l)" -gt "0" ]; then 36 | echo "Source files are not properly formatted!" 37 | exit 1 38 | fi 39 | id: diff_src 40 | 41 | - name: Upload the expected version of src/ in case of failure 42 | uses: actions/upload-artifact@v4 43 | if: ${{ failure() && steps.diff_src.conclusion == 'failure' }} 44 | with: 45 | name: expected-src 46 | path: src/ 47 | 48 | - name: Compare the expected and actual dist/ directories 49 | run: | 50 | if [ "$(git diff dist/ | wc -l)" -gt "0" ]; then 51 | echo "Built sources do not match the content of the dist/ directory!" 52 | exit 1 53 | fi 54 | id: diff_dist 55 | 56 | - name: Upload the expected version of dist/ in case of failure 57 | uses: actions/upload-artifact@v4 58 | if: ${{ failure() && steps.diff_dist.conclusion == 'failure' }} 59 | with: 60 | name: expected-dist 61 | path: dist/ 62 | -------------------------------------------------------------------------------- /.github/workflows/test-cache.yml: -------------------------------------------------------------------------------- 1 | name: Test rustdoc caching 2 | 3 | # Assumes that the latest published normal version of `ref_slice` not greater 4 | # than 1.2.1 is 1.2.1 itself. 5 | 6 | on: 7 | workflow_call: 8 | 9 | env: 10 | RUST_BACKTRACE: 1 11 | 12 | jobs: 13 | test-cache-exists-shared: 14 | name: Check if the cache exists after running the action with shared-key 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout the test repository and test with patch change and patch version bump 18 | uses: actions/checkout@v4 19 | with: 20 | path: 'ref_slice' 21 | repository: mgr0dzicki/cargo-semver-action-ref-slice 22 | ref: patch_change 23 | - name: Checkout the action 24 | uses: actions/checkout@v4 25 | with: 26 | path: action 27 | - name: Run the action 28 | uses: ./action/ 29 | with: 30 | package: ref_slice 31 | manifest-path: 'ref_slice/Cargo.toml' 32 | shared-key: testkey 33 | prefix-key: testprefix 34 | - name: Check if the cache directory exists 35 | run: | 36 | if ! grep -q "ref_slice-1.2.1/src/lib.rs" semver-checks/target/semver-checks/cache/ref_slice-1_2_1*.json; then 37 | echo "Non-existent or invalid cache file!" 38 | exit 1 39 | fi 40 | - name: Move the cache created by the action 41 | run: | 42 | mv semver-checks/target/semver-checks/cache action-cache 43 | - name: Generate primary cache key 44 | id: generate_key 45 | run: | 46 | RUSTC=$(rustc --version | sed -e 's/\s\+/-/g') 47 | SEMVER_CHECKS=$(cargo semver-checks --version | sed -e 's/\s\+/-/g') 48 | echo "KEY=testprefix-testkey-linux-$RUSTC-$SEMVER_CHECKS-d41d8cd98f00b204e9800998ecf8427e-semver-checks-rustdoc" >> $GITHUB_OUTPUT 49 | - name: Download saved cache 50 | uses: actions/cache/restore@v4 51 | with: 52 | path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache 53 | fail-on-cache-miss: true 54 | key: not_a_prefix 55 | restore-keys: | 56 | ${{ steps.generate_key.outputs.KEY }} 57 | - name: Compare local and downloaded cache files 58 | run: | 59 | if ! diff -r "semver-checks/target/semver-checks/cache" "action-cache"; then 60 | echo "Downloaded cache does not match the local version!" 61 | exit 1 62 | fi 63 | 64 | test-cache-exists-default: 65 | name: Check if the cache exists after running the action without shared-key 66 | runs-on: ubuntu-latest 67 | steps: 68 | - name: Checkout the test repository and test with patch change and patch version bump 69 | uses: actions/checkout@v4 70 | with: 71 | path: 'ref_slice' 72 | repository: mgr0dzicki/cargo-semver-action-ref-slice 73 | ref: patch_change 74 | - name: Checkout the action 75 | uses: actions/checkout@v4 76 | with: 77 | path: action 78 | - name: Run the action 79 | uses: ./action/ 80 | with: 81 | package: ref_slice 82 | manifest-path: 'ref_slice/Cargo.toml' 83 | prefix-key: testprefix 84 | - name: Check if the cache directory exists 85 | run: | 86 | if ! grep -q "ref_slice-1.2.1/src/lib.rs" semver-checks/target/semver-checks/cache/ref_slice-1_2_1*.json; then 87 | echo "Non-existent or invalid cache file!" 88 | exit 1 89 | fi 90 | - name: Move the cache created by the action 91 | run: | 92 | mv semver-checks/target/semver-checks/cache action-cache 93 | - name: Generate primary cache key 94 | id: generate_key 95 | run: | 96 | RUSTC=$(rustc --version | sed -e 's/\s\+/-/g') 97 | SEMVER_CHECKS=$(cargo semver-checks --version | sed -e 's/\s\+/-/g') 98 | echo "KEY=testprefix-test-cache-exists-default-d45618ed191f0a73-linux-$RUSTC-$SEMVER_CHECKS-d41d8cd98f00b204e9800998ecf8427e-semver-checks-rustdoc" >> $GITHUB_OUTPUT 99 | - name: Download saved cache 100 | uses: actions/cache/restore@v4 101 | with: 102 | path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache 103 | fail-on-cache-miss: true 104 | key: not_a_prefix 105 | restore-keys: | 106 | ${{ steps.generate_key.outputs.KEY }} 107 | - name: Compare local and downloaded cache files 108 | run: | 109 | if ! diff -r "semver-checks/target/semver-checks/cache" "action-cache"; then 110 | echo "Downloaded cache does not match the local version!" 111 | exit 1 112 | fi 113 | -------------------------------------------------------------------------------- /.github/workflows/test-inputs.yml: -------------------------------------------------------------------------------- 1 | name: Test action inputs 2 | 3 | # Assumes that the latest published normal version of `ref_slice` not greater 4 | # than 1.2.1 is 1.2.1 itself. 5 | 6 | on: 7 | workflow_call: 8 | 9 | env: 10 | RUST_BACKTRACE: 1 11 | 12 | jobs: 13 | test-package-patch: 14 | name: Test input package (patch change) 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout the action 18 | uses: actions/checkout@v4 19 | with: 20 | path: action 21 | - name: Setup the workspace with ref_slice patch change 22 | uses: ./action/.github/workflows/setup-test-workspace 23 | with: 24 | ref-slice-ref: patch_change 25 | - name: Run the action on ref_slice patch change 26 | uses: ./action/ 27 | with: 28 | package: ref_slice 29 | - name: Run the action on the whole workspace (expected to fail) 30 | id: action_all 31 | uses: ./action/ 32 | continue-on-error: true 33 | - name: Fail if the action has not returned any errors (but it should have) 34 | if: steps.action_all.outcome != 'failure' 35 | run: | 36 | echo "Error! The action should have failed because of checking the dummy crate, but it has not!" 37 | exit 1 38 | - name: Run the action on ref_slice fork and one dummy crate (expected to fail) 39 | id: action_one_dummy 40 | uses: ./action/ 41 | with: 42 | package: ref_slice, cargo-semver-action-dummy 43 | continue-on-error: true 44 | - name: Fail if the action has not returned any errors (but it should have) 45 | if: steps.action_one_dummy.outcome != 'failure' 46 | run: | 47 | echo "Error! The action should have failed because of checking the dummy crate, but it has not!" 48 | exit 1 49 | 50 | test-package-major: 51 | name: Test input package (major change) 52 | runs-on: ubuntu-latest 53 | steps: 54 | - name: Checkout the action 55 | uses: actions/checkout@v4 56 | with: 57 | path: action 58 | - name: Setup the workspace with ref_slice major change 59 | uses: ./action/.github/workflows/setup-test-workspace 60 | with: 61 | ref-slice-ref: major_change 62 | - name: Run the action on ref_slice major change (expected to fail) 63 | id: action_major 64 | uses: ./action/ 65 | with: 66 | package: ref_slice 67 | continue-on-error: true 68 | - name: Fail if the action has not returned any errors (but it should have) 69 | if: steps.action_major.outcome != 'failure' 70 | run: | 71 | echo "Error! The action should have failed because of the breaking change, but it has not." 72 | exit 1 73 | 74 | test-package-exclude-rio: 75 | name: Test inputs package and exclude on Rio library 76 | runs-on: ubuntu-latest 77 | steps: 78 | - name: Checkout the Rio repository 79 | uses: actions/checkout@v4 80 | with: 81 | repository: oxigraph/rio 82 | ref: 3bd01c2c977a0b01c918f6840cd05356477db358 # branch main 83 | - name: Checkout the action 84 | uses: actions/checkout@v4 85 | with: 86 | path: action 87 | - name: Run the action using input package 88 | uses: ./action/ 89 | with: 90 | package: rio_api, rio_turtle, rio_xml 91 | - name: Run the action using input exclude 92 | uses: ./action/ 93 | with: 94 | exclude: rio_testsuite 95 | - name: Run with only default features 96 | uses: ./action/ 97 | with: 98 | package: rio_api, rio_turtle 99 | feature-group: default-features 100 | - name: Run with explicit features only 101 | uses: ./action/ 102 | with: 103 | package: rio_api, rio_turtle 104 | feature-group: only-explicit-features 105 | features: generalized 106 | 107 | test-exclude: 108 | name: Test input exclude 109 | runs-on: ubuntu-latest 110 | steps: 111 | - name: Checkout the action 112 | uses: actions/checkout@v4 113 | with: 114 | path: action 115 | - name: Setup the workspace with ref_slice patch change 116 | uses: ./action/.github/workflows/setup-test-workspace 117 | with: 118 | ref-slice-ref: patch_change 119 | - name: Run the action excluding both dummy crates 120 | uses: ./action/ 121 | with: 122 | exclude: cargo-semver-action-dummy, cargo-semver-action-dummy-2 123 | - name: Run the action excluding only one of the dummy crates (expected to fail) 124 | id: action_major 125 | uses: ./action/ 126 | with: 127 | exclude: cargo-semver-action-dummy 128 | continue-on-error: true 129 | - name: Fail if the action has not returned any errors (but it should have) 130 | if: steps.action_major.outcome != 'failure' 131 | run: | 132 | echo "Error! The action should have failed because of the breaking change, but it has not." 133 | exit 1 134 | 135 | test-verbose: 136 | # There is currently no way of asserting that the output is indeed verbose, 137 | # so we at least check if the action runs without an error when the 138 | # verbose option is enabled. 139 | name: Test input verbose 140 | runs-on: ubuntu-latest 141 | steps: 142 | - name: Checkout the test repository 143 | uses: actions/checkout@v4 144 | with: 145 | repository: mgr0dzicki/cargo-semver-action-ref-slice 146 | ref: patch_change 147 | - name: Checkout the action 148 | uses: actions/checkout@v4 149 | with: 150 | path: action 151 | - name: Run the action on ref_slice patch change 152 | uses: ./action/ 153 | with: 154 | verbose: true 155 | 156 | test-manifest-path-patch: 157 | name: Test input manifest-path (patch change) 158 | runs-on: ubuntu-latest 159 | steps: 160 | - name: Checkout the action 161 | uses: actions/checkout@v4 162 | with: 163 | path: action 164 | - name: Setup the workspace with ref_slice patch change 165 | uses: ./action/.github/workflows/setup-test-workspace 166 | with: 167 | ref-slice-ref: patch_change 168 | - name: Run the action on ref_slice patch change (Cargo.toml path) 169 | uses: ./action/ 170 | with: 171 | manifest-path: ref_slice/Cargo.toml 172 | - name: Run the action on ref_slice patch change (crate path) 173 | uses: ./action/ 174 | with: 175 | manifest-path: ref_slice 176 | - name: Run the action on the whole workspace (Cargo.toml path, expected to fail) 177 | id: action_all_cargo_toml 178 | uses: ./action/ 179 | with: 180 | manifest-path: ./Cargo.toml 181 | continue-on-error: true 182 | - name: Fail if the action has not returned any errors (but it should have) 183 | if: steps.action_all_cargo_toml.outcome != 'failure' 184 | run: | 185 | echo "Error! The action should have failed because of checking the dummy crate, but it has not!" 186 | exit 1 187 | 188 | test-manifest-path-major: 189 | name: Test input manifest-path (major change) 190 | runs-on: ubuntu-latest 191 | steps: 192 | - name: Checkout the action 193 | uses: actions/checkout@v4 194 | with: 195 | path: action 196 | - name: Setup the workspace with ref_slice major change 197 | uses: ./action/.github/workflows/setup-test-workspace 198 | with: 199 | ref-slice-ref: major_change 200 | - name: Run the action on ref_slice major change (Cargo.toml path, expected to fail) 201 | id: action_major_cargo_toml 202 | uses: ./action/ 203 | with: 204 | manifest-path: ref_slice/Cargo.toml 205 | continue-on-error: true 206 | - name: Fail if the action has not returned any errors (but it should have) 207 | if: steps.action_major_cargo_toml.outcome != 'failure' 208 | run: | 209 | echo "Error! The action should have failed because of the breaking change, but it has not." 210 | exit 1 211 | - name: Run the action on ref_slice major change (crate path, expected to fail) 212 | id: action_major_crate 213 | uses: ./action/ 214 | with: 215 | manifest-path: ref_slice 216 | continue-on-error: true 217 | - name: Fail if the action has not returned any errors (but it should have) 218 | if: steps.action_major_crate.outcome != 'failure' 219 | run: | 220 | echo "Error! The action should have failed because of the breaking change, but it has not." 221 | exit 1 222 | 223 | test-manifest-path-with-space: 224 | name: Test input manifest-path against path containing space 225 | runs-on: ubuntu-latest 226 | steps: 227 | - name: Checkout the test repository and test with patch change and patch version bump 228 | uses: actions/checkout@v4 229 | with: 230 | # Space inside the directory name is used in order to ensure it will 231 | # be handled properly by the action. 232 | path: 'ref slice' 233 | repository: mgr0dzicki/cargo-semver-action-ref-slice 234 | ref: patch_change 235 | persist-credentials: true 236 | - name: Checkout the action 237 | uses: actions/checkout@v4 238 | with: 239 | path: action 240 | - name: Run the action 241 | uses: ./action/ 242 | with: 243 | manifest-path: 'ref slice/Cargo.toml' 244 | - name: Checkout the test with major change and patch version bump 245 | run: | 246 | cd "ref slice" 247 | git fetch origin major_change 248 | git checkout major_change 249 | - name: Run the action (expected to fail) 250 | id: action_major 251 | uses: ./action/ 252 | with: 253 | manifest-path: 'ref slice/Cargo.toml' 254 | continue-on-error: true 255 | - name: Fail if the action has not returned any errors (but it should have) 256 | if: steps.action_major.outcome != 'failure' 257 | run: | 258 | echo "Error! The action should have failed because of the breaking change, but it has not." 259 | exit 1 260 | 261 | test-rust-toolchain-against-directory-override: 262 | name: Test the action against toolchain override set using rustup 263 | runs-on: ubuntu-latest 264 | steps: 265 | - name: Checkout the test repository 266 | uses: actions/checkout@v4 267 | with: 268 | repository: mgr0dzicki/cargo-semver-action-ref-slice 269 | ref: patch_change 270 | - name: Checkout the action 271 | uses: actions/checkout@v4 272 | with: 273 | path: action 274 | - name: Install latest stable 275 | uses: dtolnay/rust-toolchain@stable 276 | - name: Set local override to stable 277 | run: rustup override set stable 278 | - name: Run the action with rust-toolchain set to beta 279 | uses: ./action/ 280 | with: 281 | rust-toolchain: beta 282 | - name: Get cache key 283 | uses: actions/cache/restore@v4 284 | id: get-cache-key 285 | with: 286 | path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache 287 | fail-on-cache-miss: true 288 | lookup-only: true 289 | key: semver-${{ github.job }} 290 | restore-keys: | 291 | semver-${{ github.job }} 292 | - name: Fail if the toolchain used by the action is invalid 293 | if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'beta') }} 294 | run: | 295 | echo "The toolchain used by the action should be beta, but it is not!" 296 | exit 1 297 | - name: Check the active toolchain 298 | run: | 299 | if ! rustup show active-toolchain | grep -q "stable"; then 300 | echo "The active toolchain should be still stable, but it is $(rustup show active-toolchain)!" 301 | exit 1 302 | fi 303 | 304 | test-rust-toolchain-against-toml-override: 305 | name: Test the action against toolchain override specified in rust-toolchain.toml file 306 | runs-on: ubuntu-latest 307 | steps: 308 | - name: Checkout the test repository 309 | uses: actions/checkout@v4 310 | with: 311 | repository: mgr0dzicki/cargo-semver-action-ref-slice 312 | ref: patch_change 313 | - name: Checkout the action 314 | uses: actions/checkout@v4 315 | with: 316 | path: action 317 | - name: Install latest stable 318 | uses: dtolnay/rust-toolchain@stable 319 | - name: Set override to stable in rust-toolchain.toml file 320 | run: echo -e "[toolchain]\nchannel = \"stable\"" > rust-toolchain.toml 321 | - name: Run the action with rust-toolchain set to beta 322 | uses: ./action/ 323 | with: 324 | rust-toolchain: beta 325 | - name: Get cache key 326 | uses: actions/cache/restore@v4 327 | id: get-cache-key 328 | with: 329 | path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache 330 | fail-on-cache-miss: true 331 | lookup-only: true 332 | key: semver-${{ github.job }} 333 | restore-keys: | 334 | semver-${{ github.job }} 335 | - name: Fail if the toolchain used by the action is invalid 336 | if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'beta') }} 337 | run: | 338 | echo "The toolchain used by the action should be beta, but it is not!" 339 | exit 1 340 | - name: Check the active toolchain 341 | run: | 342 | if ! rustup show active-toolchain | grep -q "stable"; then 343 | echo "The active toolchain should be still stable, but it is $(rustup show active-toolchain)!" 344 | exit 1 345 | fi 346 | 347 | test-rust-toolchain-manual: 348 | name: Test whether action works properly with rust-toolchain set to 'manual' 349 | runs-on: ubuntu-latest 350 | steps: 351 | - name: Checkout the test repository 352 | uses: actions/checkout@v4 353 | with: 354 | repository: mgr0dzicki/cargo-semver-action-ref-slice 355 | ref: patch_change 356 | - name: Checkout the action 357 | uses: actions/checkout@v4 358 | with: 359 | path: action 360 | - name: Install latest beta 361 | uses: dtolnay/rust-toolchain@beta 362 | - name: Set local override to beta 363 | run: rustup override set beta 364 | - name: Run the action with manual rust-toolchain 365 | uses: ./action/ 366 | with: 367 | rust-toolchain: manual 368 | - name: Get cache key 369 | uses: actions/cache/restore@v4 370 | id: get-cache-key 371 | with: 372 | path: ${{ github.workspace }}/semver-checks/target/semver-checks/cache 373 | fail-on-cache-miss: true 374 | lookup-only: true 375 | key: semver-${{ github.job }} 376 | restore-keys: | 377 | semver-${{ github.job }} 378 | - name: Fail if the toolchain used by the action is invalid 379 | if: ${{ ! contains(steps.get-cache-key.outputs.cache-matched-key, 'beta') }} 380 | run: | 381 | echo "The toolchain used by the action should be beta, but it is not!" 382 | exit 1 383 | - name: Uninstall Rust 384 | run: rustup self uninstall -y 385 | - name: Run the action with manual rust-toolchain (expected to fail) 386 | id: action_without_rust 387 | uses: ./action/ 388 | with: 389 | rust-toolchain: manual 390 | continue-on-error: true 391 | - name: Fail if the action has not returned any errors (but it should have) 392 | if: steps.action_without_rust.outcome != 'failure' 393 | run: | 394 | echo "Error! The action should have failed because the Rust is not installed and rust-toolchain was set to '', but it has not." 395 | exit 1 396 | 397 | test-rust-toolchain-installs-rust: 398 | name: Test whether action installs Rust toolchain by default 399 | runs-on: ubuntu-latest 400 | steps: 401 | - name: Checkout the test repository 402 | uses: actions/checkout@v4 403 | with: 404 | repository: mgr0dzicki/cargo-semver-action-ref-slice 405 | ref: patch_change 406 | - name: Checkout the action 407 | uses: actions/checkout@v4 408 | with: 409 | path: action 410 | - name: Uninstall Rust 411 | run: rustup self uninstall -y 412 | - name: Run the action with default arguments 413 | uses: ./action/ 414 | 415 | test-release-type: 416 | name: Test input release-type 417 | runs-on: ubuntu-latest 418 | steps: 419 | - name: Checkout the test repository and test with major change 420 | uses: actions/checkout@v4 421 | with: 422 | repository: mgr0dzicki/cargo-semver-action-ref-slice 423 | ref: major_change 424 | - name: Checkout the action 425 | uses: actions/checkout@v4 426 | with: 427 | path: action 428 | - name: Run the action with release-type set to major 429 | uses: ./action/ 430 | with: 431 | release-type: major 432 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | .vscode 4 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | @actions-rs:registry=https://npm.pkg.github.com 2 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "printWidth": 100 4 | } 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## General 4 | 5 | A good general description on how to develop a GitHub JavaScript action can be found [here](https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action). 6 | 7 | ## Developing locally 8 | 9 | ### Prerequisites 10 | 11 | - Node 20 12 | 13 | ### Logging in to GitHub package registry 14 | 15 | 1. Create a classic Personal Access Token (PAT) for your GitHub profile, 16 | with permission `read:packages`: 17 | https://github.com/settings/tokens 18 | 19 | 1. Use that token to log in to the registry: 20 | `npm login --registry https://npm.pkg.github.com --scope @actions-rs` 21 | Username: dummy 22 | Password: \ 23 | 24 | This allows `@actions-rs` npm packages to be downloaded. 25 | 26 | ### Installing dependencies 27 | 28 | `npm install` 29 | 30 | ### Building the action 31 | 32 | `npm run build` 33 | 34 | Updates the contents of the `dist` folder, which then _needs to be committed_. 35 | 36 | ### Formatting source files 37 | 38 | `npm run format` 39 | 40 | ### Checking formatting of source files 41 | 42 | `npm run format-check` 43 | 44 | ### Linting source files 45 | 46 | `npm run lint` 47 | 48 | ### Running tests 49 | 50 | `npm run test` 51 | 52 | ### Running all of the above sequentially 53 | 54 | `npm run all` 55 | 56 | ## Adding a new input parameter 57 | 58 | The following places need to be updated 59 | 60 | - action.yml 61 | - src/main.ts (`getCheckReleaseArguments()`) 62 | - dist/index.js (automatically generated) 63 | - README.md 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Predrag Gruevski 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cargo-semver-checks-action 2 | Lint your crate API changes for semver violations. 3 | 4 | ```yaml 5 | - name: Check semver 6 | uses: obi1kenobi/cargo-semver-checks-action@v2 7 | - name: Publish to crates.io 8 | run: # your `cargo publish` code here 9 | ``` 10 | 11 | * [Basic usage](#basic-usage) 12 | * [Input options](#input-options) 13 | * [Example scenarios](#example-scenarios) 14 | * [Use outside root directory of a crate or a workspace](#use-outside-root-directory-of-a-crate-or-a-workspace) 15 | * [Specify crates to be checked](#specify-crates-to-be-checked) 16 | * [Exclude crates from being checked](#exclude-crates-from-being-checked) 17 | * [Use toolchain other than `stable`](#use-toolchain-other-than-stable) 18 | * [Build for target other than default](#build-for-target-other-than-default) 19 | * [Customizing baseline rustdoc caching strategy](#customizing-baseline-rustdoc-caching-strategy) 20 | 21 | ## Basic usage 22 | 23 | The action is designed to be used right before `cargo publish`. It will check the API of your crate for semver violations, comparing it to the latest normal (not pre-release or yanked) version published on crates.io. At the moment, the action does not support checking against other baselines, such as the destination branch of a pull request. 24 | 25 | If your repository is just a crate or a workspace, the action will work out-of-the-box with sensible defaults: 26 | ```yaml 27 | semver-checks: 28 | runs-on: ubuntu-latest 29 | steps: 30 | - name: Checkout 31 | uses: actions/checkout@v4 32 | - name: Check semver 33 | uses: obi1kenobi/cargo-semver-checks-action@v2 34 | ``` 35 | > **Note** 36 | > By default, the action always installs the latest stable Rust and ignores the `rust-toolchain.toml` file and any local overrides. This ensures we use the latest version of rustdoc, taking advantage of the latest bugfixes and avoiding false-positives. If you want to change this default behavior, see [Use toolchain other than `stable`](#use-toolchain-other-than-stable). 37 | 38 | ## Input options 39 | 40 | Every argument is optional. 41 | 42 | | Input | Description | Default | 43 | |----------------------|-----------------------------------------------------------------------------------------------------------------------------------|---------| 44 | | `package` | Comma-separated list of the packages whose API to check for semver (in Package Id Specification format, see https://doc.rust-lang.org/cargo/reference/pkgid-spec.html for reference). If not set, all packages defined in the Cargo.toml file are processed. | | 45 | | `exclude` | Comma-separated list of the packages that will be excluded from being processed. Has effect only if the input `package` is not specified. | | 46 | | `manifest-path` | Path to Cargo.toml of crate or workspace to check. If not specified, the action assumes the manifest is under the default [`GITHUB_WORKSPACE`](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables) path. | | 47 | | `feature-group` | Which [feature group](https://github.com/obi1kenobi/cargo-semver-checks#what-features-does-cargo-semver-checks-enable-in-the-tested-crates) to enable. When not set, the action heuristically enables all features that are not unstable, nightly, or internal-only. Possible values: `all-features`, `default-features`, `only-explicit-features`. | | 48 | | `features` | Explicitly enable a list of features when checking. Corresponds to [the tool's `--features` flag](https://github.com/obi1kenobi/cargo-semver-checks#what-features-does-cargo-semver-checks-enable-in-the-tested-crates). | | 49 | | `verbose` | Enables verbose output of `cargo-semver-checks`. | `false` | 50 | | `release-type` | Sets the release type instead of deriving it from the version number specified in the `Cargo.toml` file. Possible values are `major`, `minor`, `patch`. | | 51 | | `rust-toolchain` | Rust toolchain name to use, e.g. `stable`, `nightly` or `1.68.0`. It will be installed if necessary and used regardless of local overrides and the `rust-toolchain.toml` file. However, if the input is set to `manual`, the action assumes some Rust toolchain is already installed and uses the default one. | `stable` | 52 | | `rust-target` | Rust target to build for, e.g. `x86_64-pc-windows-msvc` or `aarch64-apple-darwin`. It will be installed if necessary and used regardless of the `.cargo/config.toml` file. However, if `rust-toolchain` is set to `manual`, the action assumes the target is already installed. | | 53 | | `shared-key` | A cache key that will be used instead of the automatic key based on the name of the GitHub job and values of the inputs `package`, `exclude` and `manifest-path`. Might be provided e.g. to share the cache between the jobs. | | 54 | | `prefix-key` | Additional prefix of the cache key, can be set to start a new cache manually. | | 55 | | `github-token` | The `GITHUB_TOKEN` secret used to download precompiled binaries from GitHub API. If not specified, the [automatic GitHub token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) provided to the workflow will be used. The token may be alternatively passed in an environment variable `GITHUB_TOKEN`. | `${{ github.token }}` | 56 | 57 | ## Example scenarios 58 | 59 | ### Use outside root directory of a crate or a workspace 60 | 61 | The action will work well with defaults settings if it is run inside the package root directory. When the package location is different, you have to specify the path to its `Cargo.toml` file: 62 | ```yaml 63 | - name: Check semver for my-crate 64 | uses: obi1kenobi/cargo-semver-checks-action@v2 65 | with: 66 | manifest-path: semver/my-crate/Cargo.toml # or just semver/my-crate/ 67 | ``` 68 | 69 | In the same way you can provide the path to the workspace `Cargo.toml` file, which will result in checking all its crates: 70 | ```yaml 71 | - name: Check semver for all crates from my-workspace 72 | uses: obi1kenobi/cargo-semver-checks-action@v2 73 | with: 74 | manifest-path: semver/my-workspace/Cargo.toml # or just semver/my-workspace/ 75 | ``` 76 | 77 | ### Specify crates to be checked 78 | 79 | By default, all packages defined in the `Cargo.toml` file are processed. You can specify one or more packages to be checked instead using input `package`. 80 | 81 | For example, this will check `my-crate-api` and `my-crate-core`: 82 | ```yaml 83 | - name: Check semver for my-crate-api and my-crate-core 84 | uses: obi1kenobi/cargo-semver-checks-action@v2 85 | with: 86 | package: my-crate-api, my-crate-core 87 | ``` 88 | 89 | Inputs `package` and `manifest-path` might be used together: 90 | ```yaml 91 | - name: Check semver for my-crate from my-workspace 92 | uses: obi1kenobi/cargo-semver-checks-action@v2 93 | with: 94 | manifest-path: semver/my-workspace/Cargo.toml # or just semver/my-workspace/ 95 | package: my-crate 96 | ``` 97 | 98 | ### Exclude crates from being checked 99 | 100 | This will process all crates from the current workspace except `my-crate-tests`: 101 | ```yaml 102 | - name: Check semver for all crates except my-crate-tests 103 | uses: obi1kenobi/cargo-semver-checks-action@v2 104 | with: 105 | exclude: my-crate-tests 106 | ``` 107 | 108 | ### Use toolchain other than `stable` 109 | 110 | By default, the action installs (if necessary) and then uses the `stable` toolchain regardless of local overrides and the `rust-toolchain.toml` file. You can force using a different toolchain using `rust-toolchain`: 111 | ```yaml 112 | - name: Check semver 113 | uses: obi1kenobi/cargo-semver-checks-action@v2 114 | with: 115 | rust-toolchain: nightly 116 | ``` 117 | If you want to setup the toolchain manually, you can set `rust-toolchain` to `manual`. In this case, the action assumes some Rust toolchain is already installed and uses the default one: 118 | ```yaml 119 | - name: Setup Rust 120 | uses: actions-rust-lang/setup-rust-toolchain@v1 121 | with: 122 | toolchain: stable 123 | - name: Check semver 124 | uses: obi1kenobi/cargo-semver-checks-action@v2 125 | with: 126 | rust-toolchain: manual 127 | ``` 128 | 129 | ### Build for target other than default 130 | 131 | By default, the action uses the default target based on the host platform. You can force using a different target (which will be installed if missing) using `rust-target`. For example, you can check an `aarch64-apple-darwin` build while using the default Linux-based GitHub Actions runner: 132 | ```yaml 133 | - name: Check semver 134 | uses: obi1kenobi/cargo-semver-checks-action@v2 135 | with: 136 | rust-target: aarch64-apple-darwin 137 | ``` 138 | If you want to set up the toolchain manually, you can set `rust-toolchain` to `manual`. In this case, the action will *not* attempt to install the target — instead, it assumes the target is already set up: 139 | ```yaml 140 | - name: Setup Rust 141 | uses: actions-rust-lang/setup-rust-toolchain@v1 142 | with: 143 | toolchain: stable 144 | target: aarch64-apple-darwin 145 | - name: Check semver 146 | uses: obi1kenobi/cargo-semver-checks-action@v2 147 | with: 148 | rust-toolchain: manual 149 | rust-target: aarch64-apple-darwin 150 | ``` 151 | 152 | ## Customizing baseline rustdoc caching strategy 153 | 154 | The action caches the baseline rustdoc for each package in the workspace. The keys used to distinguish the caches consist of four components: 155 | 156 | - `prefix-key` input, which defaults to an empty string, 157 | - `shared-key` input if provided, otherwise the value of environmental variable `GITHUB_JOB` concatenated with a hash of the values of inputs `package`, `exclude` and `manifest-path` (we hash the path itself, not the file it points to), 158 | - internal, unchangable component, being a concatenation of the runner OS, `rustc` version, `cargo-semver-checks` version and hash of all `Cargo.lock` files in the current workspace, 159 | - constant suffix `"semver-checks-rustdoc"`. 160 | 161 | Runs that differ in at least one of the above components will use separate caches. Inputs `prefix-key` and `shared-key` might be therefore used to customize the caching strategy. For example, the two following jobs will share the key even despite using different `manifest-path`: 162 | ```yaml 163 | semver: 164 | runs-on: ubuntu-latest 165 | steps: 166 | - name: Checkout 167 | uses: actions/checkout@v4 168 | - name: Check semver 169 | uses: obi1kenobi/cargo-semver-checks-action@v2 170 | with: 171 | shared-key: my-workspace-semver 172 | 173 | semver2: 174 | runs-on: ubuntu-latest 175 | steps: 176 | - name: Checkout 177 | uses: actions/checkout@v4 178 | with: 179 | path: semver 180 | - name: Check semver 181 | uses: obi1kenobi/cargo-semver-checks-action@v2 182 | with: 183 | manifest-path: semver/Cargo.toml 184 | shared-key: my-workspace-semver 185 | ``` 186 | which is reasonable until they are checking the same packages. Runs with different targets must not share the cache! For example, the below job is doing well with default settings: 187 | ```yaml 188 | semver: 189 | runs-on: ubuntu-latest 190 | strategy: 191 | matrix: 192 | crate: ['api', 'core'] 193 | steps: 194 | - name: Checkout 195 | uses: actions/checkout@v4 196 | - name: Check semver 197 | uses: obi1kenobi/cargo-semver-checks-action@v2 198 | with: 199 | package: ${{ matrix.crate }} 200 | # Do not do this! 201 | # shared-key: 'my-workspace-semver' 202 | ``` 203 | as both runs will use separate caches, but providing the shared key will lead to data race and significant drop of performance. On the other hand, if you want to further separate the caches that are shared by default, you can use the input `prefix-key`: 204 | ```yaml 205 | - name: Check semver 206 | uses: obi1kenobi/cargo-semver-checks-action@v2 207 | with: 208 | prefix-key: v1 209 | ``` 210 | -------------------------------------------------------------------------------- /__tests__/utils.test.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import { join } from "path"; 3 | import * as crypto from "crypto"; 4 | 5 | import { hashFiles } from "../src/utils"; 6 | import { hashElement } from "folder-hash"; 7 | 8 | test("test hashFiles on ** pattern", async () => { 9 | const tmpDir = await fs.promises.mkdtemp("cargo-semver-checks-action-test"); 10 | await fs.promises.writeFile(join(tmpDir, "Cargo.lock"), "test1"); 11 | await fs.promises.mkdir(join(tmpDir, "inner")); 12 | await fs.promises.writeFile(join(tmpDir, "inner", "Cargo.lock"), "test2"); 13 | 14 | const hashAll = await hashFiles([join(tmpDir, "**", "Cargo.lock")]); 15 | 16 | const hashNodeOuter = await hashElement(join(tmpDir, "Cargo.lock")); 17 | const hashNodeInner = await hashElement(join(tmpDir, "inner", "Cargo.lock")); 18 | 19 | await fs.promises.rm(tmpDir, { recursive: true }); 20 | 21 | const hasher = crypto.createHash("md5"); 22 | hasher.update(hashNodeOuter.hash); 23 | hasher.update(hashNodeInner.hash); 24 | expect(hashAll).toBe(hasher.digest("hex")); 25 | }); 26 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'cargo-semver-checks' 2 | description: 'Ensure the public API in your Rust crate follows semantic versioning' 3 | branding: 4 | icon: 'check-circle' 5 | color: 'green' 6 | inputs: 7 | package: 8 | description: 'Comma-separated list of the packages whose API to check for semver (in Package Id Specification format, see https://doc.rust-lang.org/cargo/reference/pkgid-spec.html for reference). If not set, all packages defined in the Cargo.toml file are processed.' 9 | required: false 10 | exclude: 11 | description: 'Comma-separated list of the packages that will be excluded from being processed. Has effect only if the input `package` is not specified.' 12 | required: false 13 | manifest-path: 14 | description: 'Path to Cargo.toml of crate or workspace to check. If not specified, the action assumes the manifest is under the default `GITHUB_WORKSPACE` path.' 15 | required: false 16 | feature-group: 17 | description: 'Override the feature group used for semver-checking, for example if you only want to check with default features.' 18 | required: false 19 | features: 20 | description: 'Comma-separated list of crate features to explicitly include when semver-checking.' 21 | required: false 22 | verbose: 23 | description: 'Enables verbose output of `cargo-semver-checks`.' 24 | required: true 25 | default: 'false' 26 | release-type: 27 | description: 'Sets the release type instead of deriving it from the version number specified in the `Cargo.toml` file.' 28 | required: false 29 | rust-toolchain: 30 | description: 'Rust toolchain name to use, e.g. `stable`, `nightly` or `1.68.0`. It will be installed if necessary and used regardless of local overrides and the `rust-toolchain.toml` file. However, if the input is set to `manual`, the action assumes some Rust toolchain is already installed and uses the default one.' 31 | default: 'stable' 32 | rust-target: 33 | description: 'Rust target to build for, e.g. `x86_64-pc-windows-msvc` or `aarch64-apple-darwin`. It will be installed if necessary and used regardless of the `.cargo/config.toml` file. However, if `rust-toolchain` is set to `manual`, the action assumes the target is already installed.' 34 | default: '' 35 | shared-key: 36 | description: 'A cache key that will be used instead of the automatic key based on the name of the GitHub job and values of the inputs `package`, `exclude` and `manifest-path`. Might be provided e.g. to share the cache between the jobs.' 37 | required: false 38 | default: '' 39 | prefix-key: 40 | description: 'Additional prefix of the cache key, can be set to start a new cache manually.' 41 | required: false 42 | github-token: 43 | description: 'The `GITHUB_TOKEN` secret used to download precompiled binaries from GitHub API. If not specified, the automatic GitHub token provided to the workflow will be used.' 44 | required: false 45 | default: ${{ github.token }} 46 | runs: 47 | using: 'node20' 48 | main: 'dist/index.js' 49 | -------------------------------------------------------------------------------- /dist/licenses.txt: -------------------------------------------------------------------------------- 1 | @actions-rs/core 2 | MIT 3 | 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2019 actions-rs team and contributors 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | @actions/cache 28 | MIT 29 | The MIT License (MIT) 30 | 31 | Copyright 2019 GitHub 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 34 | 35 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 36 | 37 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 38 | 39 | @actions/core 40 | MIT 41 | The MIT License (MIT) 42 | 43 | Copyright 2019 GitHub 44 | 45 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 46 | 47 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 48 | 49 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 50 | 51 | @actions/exec 52 | MIT 53 | The MIT License (MIT) 54 | 55 | Copyright 2019 GitHub 56 | 57 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 60 | 61 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 62 | 63 | @actions/github 64 | MIT 65 | The MIT License (MIT) 66 | 67 | Copyright 2019 GitHub 68 | 69 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 70 | 71 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 72 | 73 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 74 | 75 | @actions/glob 76 | MIT 77 | The MIT License (MIT) 78 | 79 | Copyright 2019 GitHub 80 | 81 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 82 | 83 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 84 | 85 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 86 | 87 | @actions/http-client 88 | MIT 89 | Actions Http Client for Node.js 90 | 91 | Copyright (c) GitHub, Inc. 92 | 93 | All rights reserved. 94 | 95 | MIT License 96 | 97 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 98 | associated documentation files (the "Software"), to deal in the Software without restriction, 99 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 100 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 101 | subject to the following conditions: 102 | 103 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 104 | 105 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 106 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 107 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 108 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 109 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 110 | 111 | 112 | @actions/io 113 | MIT 114 | The MIT License (MIT) 115 | 116 | Copyright 2019 GitHub 117 | 118 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 119 | 120 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 121 | 122 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 123 | 124 | @actions/tool-cache 125 | MIT 126 | The MIT License (MIT) 127 | 128 | Copyright 2019 GitHub 129 | 130 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 131 | 132 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 133 | 134 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 135 | 136 | @azure/abort-controller 137 | MIT 138 | The MIT License (MIT) 139 | 140 | Copyright (c) 2020 Microsoft 141 | 142 | Permission is hereby granted, free of charge, to any person obtaining a copy 143 | of this software and associated documentation files (the "Software"), to deal 144 | in the Software without restriction, including without limitation the rights 145 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 146 | copies of the Software, and to permit persons to whom the Software is 147 | furnished to do so, subject to the following conditions: 148 | 149 | The above copyright notice and this permission notice shall be included in all 150 | copies or substantial portions of the Software. 151 | 152 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 153 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 154 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 155 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 156 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 157 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 158 | SOFTWARE. 159 | 160 | 161 | @azure/core-auth 162 | MIT 163 | The MIT License (MIT) 164 | 165 | Copyright (c) 2020 Microsoft 166 | 167 | Permission is hereby granted, free of charge, to any person obtaining a copy 168 | of this software and associated documentation files (the "Software"), to deal 169 | in the Software without restriction, including without limitation the rights 170 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 171 | copies of the Software, and to permit persons to whom the Software is 172 | furnished to do so, subject to the following conditions: 173 | 174 | The above copyright notice and this permission notice shall be included in all 175 | copies or substantial portions of the Software. 176 | 177 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 178 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 179 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 180 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 181 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 182 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 183 | SOFTWARE. 184 | 185 | 186 | @azure/core-client 187 | MIT 188 | The MIT License (MIT) 189 | 190 | Copyright (c) 2020 Microsoft 191 | 192 | Permission is hereby granted, free of charge, to any person obtaining a copy 193 | of this software and associated documentation files (the "Software"), to deal 194 | in the Software without restriction, including without limitation the rights 195 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 196 | copies of the Software, and to permit persons to whom the Software is 197 | furnished to do so, subject to the following conditions: 198 | 199 | The above copyright notice and this permission notice shall be included in all 200 | copies or substantial portions of the Software. 201 | 202 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 203 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 204 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 205 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 206 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 207 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 208 | SOFTWARE. 209 | 210 | 211 | @azure/core-http-compat 212 | MIT 213 | The MIT License (MIT) 214 | 215 | Copyright (c) 2020 Microsoft 216 | 217 | Permission is hereby granted, free of charge, to any person obtaining a copy 218 | of this software and associated documentation files (the "Software"), to deal 219 | in the Software without restriction, including without limitation the rights 220 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 221 | copies of the Software, and to permit persons to whom the Software is 222 | furnished to do so, subject to the following conditions: 223 | 224 | The above copyright notice and this permission notice shall be included in all 225 | copies or substantial portions of the Software. 226 | 227 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 228 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 229 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 230 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 231 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 232 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 233 | SOFTWARE. 234 | 235 | 236 | @azure/core-lro 237 | MIT 238 | The MIT License (MIT) 239 | 240 | Copyright (c) 2020 Microsoft 241 | 242 | Permission is hereby granted, free of charge, to any person obtaining a copy 243 | of this software and associated documentation files (the "Software"), to deal 244 | in the Software without restriction, including without limitation the rights 245 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 246 | copies of the Software, and to permit persons to whom the Software is 247 | furnished to do so, subject to the following conditions: 248 | 249 | The above copyright notice and this permission notice shall be included in all 250 | copies or substantial portions of the Software. 251 | 252 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 253 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 254 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 255 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 256 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 257 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 258 | SOFTWARE. 259 | 260 | 261 | @azure/core-rest-pipeline 262 | MIT 263 | The MIT License (MIT) 264 | 265 | Copyright (c) 2020 Microsoft 266 | 267 | Permission is hereby granted, free of charge, to any person obtaining a copy 268 | of this software and associated documentation files (the "Software"), to deal 269 | in the Software without restriction, including without limitation the rights 270 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 271 | copies of the Software, and to permit persons to whom the Software is 272 | furnished to do so, subject to the following conditions: 273 | 274 | The above copyright notice and this permission notice shall be included in all 275 | copies or substantial portions of the Software. 276 | 277 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 278 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 279 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 280 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 281 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 282 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 283 | SOFTWARE. 284 | 285 | 286 | @azure/core-tracing 287 | MIT 288 | The MIT License (MIT) 289 | 290 | Copyright (c) 2020 Microsoft 291 | 292 | Permission is hereby granted, free of charge, to any person obtaining a copy 293 | of this software and associated documentation files (the "Software"), to deal 294 | in the Software without restriction, including without limitation the rights 295 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 296 | copies of the Software, and to permit persons to whom the Software is 297 | furnished to do so, subject to the following conditions: 298 | 299 | The above copyright notice and this permission notice shall be included in all 300 | copies or substantial portions of the Software. 301 | 302 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 303 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 304 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 305 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 306 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 307 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 308 | SOFTWARE. 309 | 310 | 311 | @azure/core-util 312 | MIT 313 | The MIT License (MIT) 314 | 315 | Copyright (c) 2020 Microsoft 316 | 317 | Permission is hereby granted, free of charge, to any person obtaining a copy 318 | of this software and associated documentation files (the "Software"), to deal 319 | in the Software without restriction, including without limitation the rights 320 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 321 | copies of the Software, and to permit persons to whom the Software is 322 | furnished to do so, subject to the following conditions: 323 | 324 | The above copyright notice and this permission notice shall be included in all 325 | copies or substantial portions of the Software. 326 | 327 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 328 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 329 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 330 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 331 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 332 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 333 | SOFTWARE. 334 | 335 | 336 | @azure/core-xml 337 | MIT 338 | The MIT License (MIT) 339 | 340 | Copyright (c) 2020 Microsoft 341 | 342 | Permission is hereby granted, free of charge, to any person obtaining a copy 343 | of this software and associated documentation files (the "Software"), to deal 344 | in the Software without restriction, including without limitation the rights 345 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 346 | copies of the Software, and to permit persons to whom the Software is 347 | furnished to do so, subject to the following conditions: 348 | 349 | The above copyright notice and this permission notice shall be included in all 350 | copies or substantial portions of the Software. 351 | 352 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 353 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 354 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 355 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 356 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 357 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 358 | SOFTWARE. 359 | 360 | 361 | @azure/logger 362 | MIT 363 | The MIT License (MIT) 364 | 365 | Copyright (c) 2020 Microsoft 366 | 367 | Permission is hereby granted, free of charge, to any person obtaining a copy 368 | of this software and associated documentation files (the "Software"), to deal 369 | in the Software without restriction, including without limitation the rights 370 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 371 | copies of the Software, and to permit persons to whom the Software is 372 | furnished to do so, subject to the following conditions: 373 | 374 | The above copyright notice and this permission notice shall be included in all 375 | copies or substantial portions of the Software. 376 | 377 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 378 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 379 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 380 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 381 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 382 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 383 | SOFTWARE. 384 | 385 | 386 | @azure/storage-blob 387 | MIT 388 | The MIT License (MIT) 389 | 390 | Copyright (c) 2020 Microsoft 391 | 392 | Permission is hereby granted, free of charge, to any person obtaining a copy 393 | of this software and associated documentation files (the "Software"), to deal 394 | in the Software without restriction, including without limitation the rights 395 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 396 | copies of the Software, and to permit persons to whom the Software is 397 | furnished to do so, subject to the following conditions: 398 | 399 | The above copyright notice and this permission notice shall be included in all 400 | copies or substantial portions of the Software. 401 | 402 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 403 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 404 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 405 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 406 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 407 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 408 | SOFTWARE. 409 | 410 | 411 | @fastify/busboy 412 | MIT 413 | Copyright Brian White. All rights reserved. 414 | 415 | Permission is hereby granted, free of charge, to any person obtaining a copy 416 | of this software and associated documentation files (the "Software"), to 417 | deal in the Software without restriction, including without limitation the 418 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 419 | sell copies of the Software, and to permit persons to whom the Software is 420 | furnished to do so, subject to the following conditions: 421 | 422 | The above copyright notice and this permission notice shall be included in 423 | all copies or substantial portions of the Software. 424 | 425 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 426 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 427 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 428 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 429 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 430 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 431 | IN THE SOFTWARE. 432 | 433 | @octokit/auth-token 434 | MIT 435 | The MIT License 436 | 437 | Copyright (c) 2019 Octokit contributors 438 | 439 | Permission is hereby granted, free of charge, to any person obtaining a copy 440 | of this software and associated documentation files (the "Software"), to deal 441 | in the Software without restriction, including without limitation the rights 442 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 443 | copies of the Software, and to permit persons to whom the Software is 444 | furnished to do so, subject to the following conditions: 445 | 446 | The above copyright notice and this permission notice shall be included in 447 | all copies or substantial portions of the Software. 448 | 449 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 450 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 451 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 452 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 453 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 454 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 455 | THE SOFTWARE. 456 | 457 | 458 | @octokit/core 459 | MIT 460 | The MIT License 461 | 462 | Copyright (c) 2019 Octokit contributors 463 | 464 | Permission is hereby granted, free of charge, to any person obtaining a copy 465 | of this software and associated documentation files (the "Software"), to deal 466 | in the Software without restriction, including without limitation the rights 467 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 468 | copies of the Software, and to permit persons to whom the Software is 469 | furnished to do so, subject to the following conditions: 470 | 471 | The above copyright notice and this permission notice shall be included in 472 | all copies or substantial portions of the Software. 473 | 474 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 475 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 476 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 477 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 478 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 479 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 480 | THE SOFTWARE. 481 | 482 | 483 | @octokit/endpoint 484 | MIT 485 | The MIT License 486 | 487 | Copyright (c) 2018 Octokit contributors 488 | 489 | Permission is hereby granted, free of charge, to any person obtaining a copy 490 | of this software and associated documentation files (the "Software"), to deal 491 | in the Software without restriction, including without limitation the rights 492 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 493 | copies of the Software, and to permit persons to whom the Software is 494 | furnished to do so, subject to the following conditions: 495 | 496 | The above copyright notice and this permission notice shall be included in 497 | all copies or substantial portions of the Software. 498 | 499 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 500 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 501 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 502 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 503 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 504 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 505 | THE SOFTWARE. 506 | 507 | 508 | @octokit/graphql 509 | MIT 510 | The MIT License 511 | 512 | Copyright (c) 2018 Octokit contributors 513 | 514 | Permission is hereby granted, free of charge, to any person obtaining a copy 515 | of this software and associated documentation files (the "Software"), to deal 516 | in the Software without restriction, including without limitation the rights 517 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 518 | copies of the Software, and to permit persons to whom the Software is 519 | furnished to do so, subject to the following conditions: 520 | 521 | The above copyright notice and this permission notice shall be included in 522 | all copies or substantial portions of the Software. 523 | 524 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 525 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 526 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 527 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 528 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 529 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 530 | THE SOFTWARE. 531 | 532 | 533 | @octokit/plugin-paginate-rest 534 | MIT 535 | MIT License Copyright (c) 2019 Octokit contributors 536 | 537 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 538 | 539 | The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. 540 | 541 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 542 | 543 | 544 | @octokit/plugin-rest-endpoint-methods 545 | MIT 546 | MIT License Copyright (c) 2019 Octokit contributors 547 | 548 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 549 | 550 | The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. 551 | 552 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 553 | 554 | 555 | @octokit/request 556 | MIT 557 | The MIT License 558 | 559 | Copyright (c) 2018 Octokit contributors 560 | 561 | Permission is hereby granted, free of charge, to any person obtaining a copy 562 | of this software and associated documentation files (the "Software"), to deal 563 | in the Software without restriction, including without limitation the rights 564 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 565 | copies of the Software, and to permit persons to whom the Software is 566 | furnished to do so, subject to the following conditions: 567 | 568 | The above copyright notice and this permission notice shall be included in 569 | all copies or substantial portions of the Software. 570 | 571 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 572 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 573 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 574 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 575 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 576 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 577 | THE SOFTWARE. 578 | 579 | 580 | @octokit/request-error 581 | MIT 582 | The MIT License 583 | 584 | Copyright (c) 2019 Octokit contributors 585 | 586 | Permission is hereby granted, free of charge, to any person obtaining a copy 587 | of this software and associated documentation files (the "Software"), to deal 588 | in the Software without restriction, including without limitation the rights 589 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 590 | copies of the Software, and to permit persons to whom the Software is 591 | furnished to do so, subject to the following conditions: 592 | 593 | The above copyright notice and this permission notice shall be included in 594 | all copies or substantial portions of the Software. 595 | 596 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 597 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 598 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 599 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 600 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 601 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 602 | THE SOFTWARE. 603 | 604 | 605 | @protobuf-ts/runtime 606 | (Apache-2.0 AND BSD-3-Clause) 607 | Apache License 608 | Version 2.0, January 2004 609 | http://www.apache.org/licenses/ 610 | 611 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 612 | 613 | 1. Definitions. 614 | 615 | "License" shall mean the terms and conditions for use, reproduction, 616 | and distribution as defined by Sections 1 through 9 of this document. 617 | 618 | "Licensor" shall mean the copyright owner or entity authorized by 619 | the copyright owner that is granting the License. 620 | 621 | "Legal Entity" shall mean the union of the acting entity and all 622 | other entities that control, are controlled by, or are under common 623 | control with that entity. For the purposes of this definition, 624 | "control" means (i) the power, direct or indirect, to cause the 625 | direction or management of such entity, whether by contract or 626 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 627 | outstanding shares, or (iii) beneficial ownership of such entity. 628 | 629 | "You" (or "Your") shall mean an individual or Legal Entity 630 | exercising permissions granted by this License. 631 | 632 | "Source" form shall mean the preferred form for making modifications, 633 | including but not limited to software source code, documentation 634 | source, and configuration files. 635 | 636 | "Object" form shall mean any form resulting from mechanical 637 | transformation or translation of a Source form, including but 638 | not limited to compiled object code, generated documentation, 639 | and conversions to other media types. 640 | 641 | "Work" shall mean the work of authorship, whether in Source or 642 | Object form, made available under the License, as indicated by a 643 | copyright notice that is included in or attached to the work 644 | (an example is provided in the Appendix below). 645 | 646 | "Derivative Works" shall mean any work, whether in Source or Object 647 | form, that is based on (or derived from) the Work and for which the 648 | editorial revisions, annotations, elaborations, or other modifications 649 | represent, as a whole, an original work of authorship. For the purposes 650 | of this License, Derivative Works shall not include works that remain 651 | separable from, or merely link (or bind by name) to the interfaces of, 652 | the Work and Derivative Works thereof. 653 | 654 | "Contribution" shall mean any work of authorship, including 655 | the original version of the Work and any modifications or additions 656 | to that Work or Derivative Works thereof, that is intentionally 657 | submitted to Licensor for inclusion in the Work by the copyright owner 658 | or by an individual or Legal Entity authorized to submit on behalf of 659 | the copyright owner. For the purposes of this definition, "submitted" 660 | means any form of electronic, verbal, or written communication sent 661 | to the Licensor or its representatives, including but not limited to 662 | communication on electronic mailing lists, source code control systems, 663 | and issue tracking systems that are managed by, or on behalf of, the 664 | Licensor for the purpose of discussing and improving the Work, but 665 | excluding communication that is conspicuously marked or otherwise 666 | designated in writing by the copyright owner as "Not a Contribution." 667 | 668 | "Contributor" shall mean Licensor and any individual or Legal Entity 669 | on behalf of whom a Contribution has been received by Licensor and 670 | subsequently incorporated within the Work. 671 | 672 | 2. Grant of Copyright License. Subject to the terms and conditions of 673 | this License, each Contributor hereby grants to You a perpetual, 674 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 675 | copyright license to reproduce, prepare Derivative Works of, 676 | publicly display, publicly perform, sublicense, and distribute the 677 | Work and such Derivative Works in Source or Object form. 678 | 679 | 3. Grant of Patent License. Subject to the terms and conditions of 680 | this License, each Contributor hereby grants to You a perpetual, 681 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 682 | (except as stated in this section) patent license to make, have made, 683 | use, offer to sell, sell, import, and otherwise transfer the Work, 684 | where such license applies only to those patent claims licensable 685 | by such Contributor that are necessarily infringed by their 686 | Contribution(s) alone or by combination of their Contribution(s) 687 | with the Work to which such Contribution(s) was submitted. If You 688 | institute patent litigation against any entity (including a 689 | cross-claim or counterclaim in a lawsuit) alleging that the Work 690 | or a Contribution incorporated within the Work constitutes direct 691 | or contributory patent infringement, then any patent licenses 692 | granted to You under this License for that Work shall terminate 693 | as of the date such litigation is filed. 694 | 695 | 4. Redistribution. You may reproduce and distribute copies of the 696 | Work or Derivative Works thereof in any medium, with or without 697 | modifications, and in Source or Object form, provided that You 698 | meet the following conditions: 699 | 700 | (a) You must give any other recipients of the Work or 701 | Derivative Works a copy of this License; and 702 | 703 | (b) You must cause any modified files to carry prominent notices 704 | stating that You changed the files; and 705 | 706 | (c) You must retain, in the Source form of any Derivative Works 707 | that You distribute, all copyright, patent, trademark, and 708 | attribution notices from the Source form of the Work, 709 | excluding those notices that do not pertain to any part of 710 | the Derivative Works; and 711 | 712 | (d) If the Work includes a "NOTICE" text file as part of its 713 | distribution, then any Derivative Works that You distribute must 714 | include a readable copy of the attribution notices contained 715 | within such NOTICE file, excluding those notices that do not 716 | pertain to any part of the Derivative Works, in at least one 717 | of the following places: within a NOTICE text file distributed 718 | as part of the Derivative Works; within the Source form or 719 | documentation, if provided along with the Derivative Works; or, 720 | within a display generated by the Derivative Works, if and 721 | wherever such third-party notices normally appear. The contents 722 | of the NOTICE file are for informational purposes only and 723 | do not modify the License. You may add Your own attribution 724 | notices within Derivative Works that You distribute, alongside 725 | or as an addendum to the NOTICE text from the Work, provided 726 | that such additional attribution notices cannot be construed 727 | as modifying the License. 728 | 729 | You may add Your own copyright statement to Your modifications and 730 | may provide additional or different license terms and conditions 731 | for use, reproduction, or distribution of Your modifications, or 732 | for any such Derivative Works as a whole, provided Your use, 733 | reproduction, and distribution of the Work otherwise complies with 734 | the conditions stated in this License. 735 | 736 | 5. Submission of Contributions. Unless You explicitly state otherwise, 737 | any Contribution intentionally submitted for inclusion in the Work 738 | by You to the Licensor shall be under the terms and conditions of 739 | this License, without any additional terms or conditions. 740 | Notwithstanding the above, nothing herein shall supersede or modify 741 | the terms of any separate license agreement you may have executed 742 | with Licensor regarding such Contributions. 743 | 744 | 6. Trademarks. This License does not grant permission to use the trade 745 | names, trademarks, service marks, or product names of the Licensor, 746 | except as required for reasonable and customary use in describing the 747 | origin of the Work and reproducing the content of the NOTICE file. 748 | 749 | 7. Disclaimer of Warranty. Unless required by applicable law or 750 | agreed to in writing, Licensor provides the Work (and each 751 | Contributor provides its Contributions) on an "AS IS" BASIS, 752 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 753 | implied, including, without limitation, any warranties or conditions 754 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 755 | PARTICULAR PURPOSE. You are solely responsible for determining the 756 | appropriateness of using or redistributing the Work and assume any 757 | risks associated with Your exercise of permissions under this License. 758 | 759 | 8. Limitation of Liability. In no event and under no legal theory, 760 | whether in tort (including negligence), contract, or otherwise, 761 | unless required by applicable law (such as deliberate and grossly 762 | negligent acts) or agreed to in writing, shall any Contributor be 763 | liable to You for damages, including any direct, indirect, special, 764 | incidental, or consequential damages of any character arising as a 765 | result of this License or out of the use or inability to use the 766 | Work (including but not limited to damages for loss of goodwill, 767 | work stoppage, computer failure or malfunction, or any and all 768 | other commercial damages or losses), even if such Contributor 769 | has been advised of the possibility of such damages. 770 | 771 | 9. Accepting Warranty or Additional Liability. While redistributing 772 | the Work or Derivative Works thereof, You may choose to offer, 773 | and charge a fee for, acceptance of support, warranty, indemnity, 774 | or other liability obligations and/or rights consistent with this 775 | License. However, in accepting such obligations, You may act only 776 | on Your own behalf and on Your sole responsibility, not on behalf 777 | of any other Contributor, and only if You agree to indemnify, 778 | defend, and hold each Contributor harmless for any liability 779 | incurred by, or claims asserted against, such Contributor by reason 780 | of your accepting any such warranty or additional liability. 781 | 782 | 783 | @protobuf-ts/runtime-rpc 784 | Apache-2.0 785 | Apache License 786 | Version 2.0, January 2004 787 | http://www.apache.org/licenses/ 788 | 789 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 790 | 791 | 1. Definitions. 792 | 793 | "License" shall mean the terms and conditions for use, reproduction, 794 | and distribution as defined by Sections 1 through 9 of this document. 795 | 796 | "Licensor" shall mean the copyright owner or entity authorized by 797 | the copyright owner that is granting the License. 798 | 799 | "Legal Entity" shall mean the union of the acting entity and all 800 | other entities that control, are controlled by, or are under common 801 | control with that entity. For the purposes of this definition, 802 | "control" means (i) the power, direct or indirect, to cause the 803 | direction or management of such entity, whether by contract or 804 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 805 | outstanding shares, or (iii) beneficial ownership of such entity. 806 | 807 | "You" (or "Your") shall mean an individual or Legal Entity 808 | exercising permissions granted by this License. 809 | 810 | "Source" form shall mean the preferred form for making modifications, 811 | including but not limited to software source code, documentation 812 | source, and configuration files. 813 | 814 | "Object" form shall mean any form resulting from mechanical 815 | transformation or translation of a Source form, including but 816 | not limited to compiled object code, generated documentation, 817 | and conversions to other media types. 818 | 819 | "Work" shall mean the work of authorship, whether in Source or 820 | Object form, made available under the License, as indicated by a 821 | copyright notice that is included in or attached to the work 822 | (an example is provided in the Appendix below). 823 | 824 | "Derivative Works" shall mean any work, whether in Source or Object 825 | form, that is based on (or derived from) the Work and for which the 826 | editorial revisions, annotations, elaborations, or other modifications 827 | represent, as a whole, an original work of authorship. For the purposes 828 | of this License, Derivative Works shall not include works that remain 829 | separable from, or merely link (or bind by name) to the interfaces of, 830 | the Work and Derivative Works thereof. 831 | 832 | "Contribution" shall mean any work of authorship, including 833 | the original version of the Work and any modifications or additions 834 | to that Work or Derivative Works thereof, that is intentionally 835 | submitted to Licensor for inclusion in the Work by the copyright owner 836 | or by an individual or Legal Entity authorized to submit on behalf of 837 | the copyright owner. For the purposes of this definition, "submitted" 838 | means any form of electronic, verbal, or written communication sent 839 | to the Licensor or its representatives, including but not limited to 840 | communication on electronic mailing lists, source code control systems, 841 | and issue tracking systems that are managed by, or on behalf of, the 842 | Licensor for the purpose of discussing and improving the Work, but 843 | excluding communication that is conspicuously marked or otherwise 844 | designated in writing by the copyright owner as "Not a Contribution." 845 | 846 | "Contributor" shall mean Licensor and any individual or Legal Entity 847 | on behalf of whom a Contribution has been received by Licensor and 848 | subsequently incorporated within the Work. 849 | 850 | 2. Grant of Copyright License. Subject to the terms and conditions of 851 | this License, each Contributor hereby grants to You a perpetual, 852 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 853 | copyright license to reproduce, prepare Derivative Works of, 854 | publicly display, publicly perform, sublicense, and distribute the 855 | Work and such Derivative Works in Source or Object form. 856 | 857 | 3. Grant of Patent License. Subject to the terms and conditions of 858 | this License, each Contributor hereby grants to You a perpetual, 859 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 860 | (except as stated in this section) patent license to make, have made, 861 | use, offer to sell, sell, import, and otherwise transfer the Work, 862 | where such license applies only to those patent claims licensable 863 | by such Contributor that are necessarily infringed by their 864 | Contribution(s) alone or by combination of their Contribution(s) 865 | with the Work to which such Contribution(s) was submitted. If You 866 | institute patent litigation against any entity (including a 867 | cross-claim or counterclaim in a lawsuit) alleging that the Work 868 | or a Contribution incorporated within the Work constitutes direct 869 | or contributory patent infringement, then any patent licenses 870 | granted to You under this License for that Work shall terminate 871 | as of the date such litigation is filed. 872 | 873 | 4. Redistribution. You may reproduce and distribute copies of the 874 | Work or Derivative Works thereof in any medium, with or without 875 | modifications, and in Source or Object form, provided that You 876 | meet the following conditions: 877 | 878 | (a) You must give any other recipients of the Work or 879 | Derivative Works a copy of this License; and 880 | 881 | (b) You must cause any modified files to carry prominent notices 882 | stating that You changed the files; and 883 | 884 | (c) You must retain, in the Source form of any Derivative Works 885 | that You distribute, all copyright, patent, trademark, and 886 | attribution notices from the Source form of the Work, 887 | excluding those notices that do not pertain to any part of 888 | the Derivative Works; and 889 | 890 | (d) If the Work includes a "NOTICE" text file as part of its 891 | distribution, then any Derivative Works that You distribute must 892 | include a readable copy of the attribution notices contained 893 | within such NOTICE file, excluding those notices that do not 894 | pertain to any part of the Derivative Works, in at least one 895 | of the following places: within a NOTICE text file distributed 896 | as part of the Derivative Works; within the Source form or 897 | documentation, if provided along with the Derivative Works; or, 898 | within a display generated by the Derivative Works, if and 899 | wherever such third-party notices normally appear. The contents 900 | of the NOTICE file are for informational purposes only and 901 | do not modify the License. You may add Your own attribution 902 | notices within Derivative Works that You distribute, alongside 903 | or as an addendum to the NOTICE text from the Work, provided 904 | that such additional attribution notices cannot be construed 905 | as modifying the License. 906 | 907 | You may add Your own copyright statement to Your modifications and 908 | may provide additional or different license terms and conditions 909 | for use, reproduction, or distribution of Your modifications, or 910 | for any such Derivative Works as a whole, provided Your use, 911 | reproduction, and distribution of the Work otherwise complies with 912 | the conditions stated in this License. 913 | 914 | 5. Submission of Contributions. Unless You explicitly state otherwise, 915 | any Contribution intentionally submitted for inclusion in the Work 916 | by You to the Licensor shall be under the terms and conditions of 917 | this License, without any additional terms or conditions. 918 | Notwithstanding the above, nothing herein shall supersede or modify 919 | the terms of any separate license agreement you may have executed 920 | with Licensor regarding such Contributions. 921 | 922 | 6. Trademarks. This License does not grant permission to use the trade 923 | names, trademarks, service marks, or product names of the Licensor, 924 | except as required for reasonable and customary use in describing the 925 | origin of the Work and reproducing the content of the NOTICE file. 926 | 927 | 7. Disclaimer of Warranty. Unless required by applicable law or 928 | agreed to in writing, Licensor provides the Work (and each 929 | Contributor provides its Contributions) on an "AS IS" BASIS, 930 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 931 | implied, including, without limitation, any warranties or conditions 932 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 933 | PARTICULAR PURPOSE. You are solely responsible for determining the 934 | appropriateness of using or redistributing the Work and assume any 935 | risks associated with Your exercise of permissions under this License. 936 | 937 | 8. Limitation of Liability. In no event and under no legal theory, 938 | whether in tort (including negligence), contract, or otherwise, 939 | unless required by applicable law (such as deliberate and grossly 940 | negligent acts) or agreed to in writing, shall any Contributor be 941 | liable to You for damages, including any direct, indirect, special, 942 | incidental, or consequential damages of any character arising as a 943 | result of this License or out of the use or inability to use the 944 | Work (including but not limited to damages for loss of goodwill, 945 | work stoppage, computer failure or malfunction, or any and all 946 | other commercial damages or losses), even if such Contributor 947 | has been advised of the possibility of such damages. 948 | 949 | 9. Accepting Warranty or Additional Liability. While redistributing 950 | the Work or Derivative Works thereof, You may choose to offer, 951 | and charge a fee for, acceptance of support, warranty, indemnity, 952 | or other liability obligations and/or rights consistent with this 953 | License. However, in accepting such obligations, You may act only 954 | on Your own behalf and on Your sole responsibility, not on behalf 955 | of any other Contributor, and only if You agree to indemnify, 956 | defend, and hold each Contributor harmless for any liability 957 | incurred by, or claims asserted against, such Contributor by reason 958 | of your accepting any such warranty or additional liability. 959 | 960 | 961 | @vercel/ncc 962 | MIT 963 | Copyright 2018 ZEIT, Inc. 964 | 965 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 966 | 967 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 968 | 969 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 970 | 971 | agent-base 972 | MIT 973 | (The MIT License) 974 | 975 | Copyright (c) 2013 Nathan Rajlich 976 | 977 | Permission is hereby granted, free of charge, to any person obtaining 978 | a copy of this software and associated documentation files (the 979 | 'Software'), to deal in the Software without restriction, including 980 | without limitation the rights to use, copy, modify, merge, publish, 981 | distribute, sublicense, and/or sell copies of the Software, and to 982 | permit persons to whom the Software is furnished to do so, subject to 983 | the following conditions: 984 | 985 | The above copyright notice and this permission notice shall be 986 | included in all copies or substantial portions of the Software. 987 | 988 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 989 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 990 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 991 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 992 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 993 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 994 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 995 | 996 | balanced-match 997 | MIT 998 | (MIT) 999 | 1000 | Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> 1001 | 1002 | Permission is hereby granted, free of charge, to any person obtaining a copy of 1003 | this software and associated documentation files (the "Software"), to deal in 1004 | the Software without restriction, including without limitation the rights to 1005 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 1006 | of the Software, and to permit persons to whom the Software is furnished to do 1007 | so, subject to the following conditions: 1008 | 1009 | The above copyright notice and this permission notice shall be included in all 1010 | copies or substantial portions of the Software. 1011 | 1012 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1013 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1014 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1015 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1016 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1017 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1018 | SOFTWARE. 1019 | 1020 | 1021 | before-after-hook 1022 | Apache-2.0 1023 | Apache License 1024 | Version 2.0, January 2004 1025 | http://www.apache.org/licenses/ 1026 | 1027 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1028 | 1029 | 1. Definitions. 1030 | 1031 | "License" shall mean the terms and conditions for use, reproduction, 1032 | and distribution as defined by Sections 1 through 9 of this document. 1033 | 1034 | "Licensor" shall mean the copyright owner or entity authorized by 1035 | the copyright owner that is granting the License. 1036 | 1037 | "Legal Entity" shall mean the union of the acting entity and all 1038 | other entities that control, are controlled by, or are under common 1039 | control with that entity. For the purposes of this definition, 1040 | "control" means (i) the power, direct or indirect, to cause the 1041 | direction or management of such entity, whether by contract or 1042 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 1043 | outstanding shares, or (iii) beneficial ownership of such entity. 1044 | 1045 | "You" (or "Your") shall mean an individual or Legal Entity 1046 | exercising permissions granted by this License. 1047 | 1048 | "Source" form shall mean the preferred form for making modifications, 1049 | including but not limited to software source code, documentation 1050 | source, and configuration files. 1051 | 1052 | "Object" form shall mean any form resulting from mechanical 1053 | transformation or translation of a Source form, including but 1054 | not limited to compiled object code, generated documentation, 1055 | and conversions to other media types. 1056 | 1057 | "Work" shall mean the work of authorship, whether in Source or 1058 | Object form, made available under the License, as indicated by a 1059 | copyright notice that is included in or attached to the work 1060 | (an example is provided in the Appendix below). 1061 | 1062 | "Derivative Works" shall mean any work, whether in Source or Object 1063 | form, that is based on (or derived from) the Work and for which the 1064 | editorial revisions, annotations, elaborations, or other modifications 1065 | represent, as a whole, an original work of authorship. For the purposes 1066 | of this License, Derivative Works shall not include works that remain 1067 | separable from, or merely link (or bind by name) to the interfaces of, 1068 | the Work and Derivative Works thereof. 1069 | 1070 | "Contribution" shall mean any work of authorship, including 1071 | the original version of the Work and any modifications or additions 1072 | to that Work or Derivative Works thereof, that is intentionally 1073 | submitted to Licensor for inclusion in the Work by the copyright owner 1074 | or by an individual or Legal Entity authorized to submit on behalf of 1075 | the copyright owner. For the purposes of this definition, "submitted" 1076 | means any form of electronic, verbal, or written communication sent 1077 | to the Licensor or its representatives, including but not limited to 1078 | communication on electronic mailing lists, source code control systems, 1079 | and issue tracking systems that are managed by, or on behalf of, the 1080 | Licensor for the purpose of discussing and improving the Work, but 1081 | excluding communication that is conspicuously marked or otherwise 1082 | designated in writing by the copyright owner as "Not a Contribution." 1083 | 1084 | "Contributor" shall mean Licensor and any individual or Legal Entity 1085 | on behalf of whom a Contribution has been received by Licensor and 1086 | subsequently incorporated within the Work. 1087 | 1088 | 2. Grant of Copyright License. Subject to the terms and conditions of 1089 | this License, each Contributor hereby grants to You a perpetual, 1090 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 1091 | copyright license to reproduce, prepare Derivative Works of, 1092 | publicly display, publicly perform, sublicense, and distribute the 1093 | Work and such Derivative Works in Source or Object form. 1094 | 1095 | 3. Grant of Patent License. Subject to the terms and conditions of 1096 | this License, each Contributor hereby grants to You a perpetual, 1097 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 1098 | (except as stated in this section) patent license to make, have made, 1099 | use, offer to sell, sell, import, and otherwise transfer the Work, 1100 | where such license applies only to those patent claims licensable 1101 | by such Contributor that are necessarily infringed by their 1102 | Contribution(s) alone or by combination of their Contribution(s) 1103 | with the Work to which such Contribution(s) was submitted. If You 1104 | institute patent litigation against any entity (including a 1105 | cross-claim or counterclaim in a lawsuit) alleging that the Work 1106 | or a Contribution incorporated within the Work constitutes direct 1107 | or contributory patent infringement, then any patent licenses 1108 | granted to You under this License for that Work shall terminate 1109 | as of the date such litigation is filed. 1110 | 1111 | 4. Redistribution. You may reproduce and distribute copies of the 1112 | Work or Derivative Works thereof in any medium, with or without 1113 | modifications, and in Source or Object form, provided that You 1114 | meet the following conditions: 1115 | 1116 | (a) You must give any other recipients of the Work or 1117 | Derivative Works a copy of this License; and 1118 | 1119 | (b) You must cause any modified files to carry prominent notices 1120 | stating that You changed the files; and 1121 | 1122 | (c) You must retain, in the Source form of any Derivative Works 1123 | that You distribute, all copyright, patent, trademark, and 1124 | attribution notices from the Source form of the Work, 1125 | excluding those notices that do not pertain to any part of 1126 | the Derivative Works; and 1127 | 1128 | (d) If the Work includes a "NOTICE" text file as part of its 1129 | distribution, then any Derivative Works that You distribute must 1130 | include a readable copy of the attribution notices contained 1131 | within such NOTICE file, excluding those notices that do not 1132 | pertain to any part of the Derivative Works, in at least one 1133 | of the following places: within a NOTICE text file distributed 1134 | as part of the Derivative Works; within the Source form or 1135 | documentation, if provided along with the Derivative Works; or, 1136 | within a display generated by the Derivative Works, if and 1137 | wherever such third-party notices normally appear. The contents 1138 | of the NOTICE file are for informational purposes only and 1139 | do not modify the License. You may add Your own attribution 1140 | notices within Derivative Works that You distribute, alongside 1141 | or as an addendum to the NOTICE text from the Work, provided 1142 | that such additional attribution notices cannot be construed 1143 | as modifying the License. 1144 | 1145 | You may add Your own copyright statement to Your modifications and 1146 | may provide additional or different license terms and conditions 1147 | for use, reproduction, or distribution of Your modifications, or 1148 | for any such Derivative Works as a whole, provided Your use, 1149 | reproduction, and distribution of the Work otherwise complies with 1150 | the conditions stated in this License. 1151 | 1152 | 5. Submission of Contributions. Unless You explicitly state otherwise, 1153 | any Contribution intentionally submitted for inclusion in the Work 1154 | by You to the Licensor shall be under the terms and conditions of 1155 | this License, without any additional terms or conditions. 1156 | Notwithstanding the above, nothing herein shall supersede or modify 1157 | the terms of any separate license agreement you may have executed 1158 | with Licensor regarding such Contributions. 1159 | 1160 | 6. Trademarks. This License does not grant permission to use the trade 1161 | names, trademarks, service marks, or product names of the Licensor, 1162 | except as required for reasonable and customary use in describing the 1163 | origin of the Work and reproducing the content of the NOTICE file. 1164 | 1165 | 7. Disclaimer of Warranty. Unless required by applicable law or 1166 | agreed to in writing, Licensor provides the Work (and each 1167 | Contributor provides its Contributions) on an "AS IS" BASIS, 1168 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1169 | implied, including, without limitation, any warranties or conditions 1170 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 1171 | PARTICULAR PURPOSE. You are solely responsible for determining the 1172 | appropriateness of using or redistributing the Work and assume any 1173 | risks associated with Your exercise of permissions under this License. 1174 | 1175 | 8. Limitation of Liability. In no event and under no legal theory, 1176 | whether in tort (including negligence), contract, or otherwise, 1177 | unless required by applicable law (such as deliberate and grossly 1178 | negligent acts) or agreed to in writing, shall any Contributor be 1179 | liable to You for damages, including any direct, indirect, special, 1180 | incidental, or consequential damages of any character arising as a 1181 | result of this License or out of the use or inability to use the 1182 | Work (including but not limited to damages for loss of goodwill, 1183 | work stoppage, computer failure or malfunction, or any and all 1184 | other commercial damages or losses), even if such Contributor 1185 | has been advised of the possibility of such damages. 1186 | 1187 | 9. Accepting Warranty or Additional Liability. While redistributing 1188 | the Work or Derivative Works thereof, You may choose to offer, 1189 | and charge a fee for, acceptance of support, warranty, indemnity, 1190 | or other liability obligations and/or rights consistent with this 1191 | License. However, in accepting such obligations, You may act only 1192 | on Your own behalf and on Your sole responsibility, not on behalf 1193 | of any other Contributor, and only if You agree to indemnify, 1194 | defend, and hold each Contributor harmless for any liability 1195 | incurred by, or claims asserted against, such Contributor by reason 1196 | of your accepting any such warranty or additional liability. 1197 | 1198 | END OF TERMS AND CONDITIONS 1199 | 1200 | APPENDIX: How to apply the Apache License to your work. 1201 | 1202 | To apply the Apache License to your work, attach the following 1203 | boilerplate notice, with the fields enclosed by brackets "{}" 1204 | replaced with your own identifying information. (Don't include 1205 | the brackets!) The text should be enclosed in the appropriate 1206 | comment syntax for the file format. We also recommend that a 1207 | file or class name and description of purpose be included on the 1208 | same "printed page" as the copyright notice for easier 1209 | identification within third-party archives. 1210 | 1211 | Copyright 2018 Gregor Martynus and other contributors. 1212 | 1213 | Licensed under the Apache License, Version 2.0 (the "License"); 1214 | you may not use this file except in compliance with the License. 1215 | You may obtain a copy of the License at 1216 | 1217 | http://www.apache.org/licenses/LICENSE-2.0 1218 | 1219 | Unless required by applicable law or agreed to in writing, software 1220 | distributed under the License is distributed on an "AS IS" BASIS, 1221 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1222 | See the License for the specific language governing permissions and 1223 | limitations under the License. 1224 | 1225 | 1226 | brace-expansion 1227 | MIT 1228 | MIT License 1229 | 1230 | Copyright (c) 2013 Julian Gruber 1231 | 1232 | Permission is hereby granted, free of charge, to any person obtaining a copy 1233 | of this software and associated documentation files (the "Software"), to deal 1234 | in the Software without restriction, including without limitation the rights 1235 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1236 | copies of the Software, and to permit persons to whom the Software is 1237 | furnished to do so, subject to the following conditions: 1238 | 1239 | The above copyright notice and this permission notice shall be included in all 1240 | copies or substantial portions of the Software. 1241 | 1242 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1243 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1244 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1245 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1246 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1247 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1248 | SOFTWARE. 1249 | 1250 | 1251 | concat-map 1252 | MIT 1253 | This software is released under the MIT license: 1254 | 1255 | Permission is hereby granted, free of charge, to any person obtaining a copy of 1256 | this software and associated documentation files (the "Software"), to deal in 1257 | the Software without restriction, including without limitation the rights to 1258 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 1259 | the Software, and to permit persons to whom the Software is furnished to do so, 1260 | subject to the following conditions: 1261 | 1262 | The above copyright notice and this permission notice shall be included in all 1263 | copies or substantial portions of the Software. 1264 | 1265 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1266 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 1267 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 1268 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 1269 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 1270 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1271 | 1272 | 1273 | debug 1274 | MIT 1275 | (The MIT License) 1276 | 1277 | Copyright (c) 2014-2017 TJ Holowaychuk 1278 | Copyright (c) 2018-2021 Josh Junon 1279 | 1280 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 1281 | and associated documentation files (the 'Software'), to deal in the Software without restriction, 1282 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 1283 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 1284 | subject to the following conditions: 1285 | 1286 | The above copyright notice and this permission notice shall be included in all copies or substantial 1287 | portions of the Software. 1288 | 1289 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 1290 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1291 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 1292 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 1293 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1294 | 1295 | 1296 | 1297 | deprecation 1298 | ISC 1299 | The ISC License 1300 | 1301 | Copyright (c) Gregor Martynus and contributors 1302 | 1303 | Permission to use, copy, modify, and/or distribute this software for any 1304 | purpose with or without fee is hereby granted, provided that the above 1305 | copyright notice and this permission notice appear in all copies. 1306 | 1307 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1308 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1309 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1310 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1311 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1312 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1313 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1314 | 1315 | 1316 | fast-xml-parser 1317 | MIT 1318 | MIT License 1319 | 1320 | Copyright (c) 2017 Amit Kumar Gupta 1321 | 1322 | Permission is hereby granted, free of charge, to any person obtaining a copy 1323 | of this software and associated documentation files (the "Software"), to deal 1324 | in the Software without restriction, including without limitation the rights 1325 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1326 | copies of the Software, and to permit persons to whom the Software is 1327 | furnished to do so, subject to the following conditions: 1328 | 1329 | The above copyright notice and this permission notice shall be included in all 1330 | copies or substantial portions of the Software. 1331 | 1332 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1333 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1334 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1335 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1336 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1337 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1338 | SOFTWARE. 1339 | 1340 | 1341 | folder-hash 1342 | MIT 1343 | MIT License 1344 | Copyright (c) 2015 Marc Walter 1345 | 1346 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1347 | 1348 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1349 | 1350 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1351 | 1352 | glob 1353 | ISC 1354 | The ISC License 1355 | 1356 | Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors 1357 | 1358 | Permission to use, copy, modify, and/or distribute this software for any 1359 | purpose with or without fee is hereby granted, provided that the above 1360 | copyright notice and this permission notice appear in all copies. 1361 | 1362 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1363 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1364 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1365 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1366 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1367 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1368 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1369 | 1370 | 1371 | has-flag 1372 | MIT 1373 | MIT License 1374 | 1375 | Copyright (c) Sindre Sorhus (sindresorhus.com) 1376 | 1377 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1378 | 1379 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1380 | 1381 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1382 | 1383 | 1384 | http-proxy-agent 1385 | MIT 1386 | (The MIT License) 1387 | 1388 | Copyright (c) 2013 Nathan Rajlich 1389 | 1390 | Permission is hereby granted, free of charge, to any person obtaining 1391 | a copy of this software and associated documentation files (the 1392 | 'Software'), to deal in the Software without restriction, including 1393 | without limitation the rights to use, copy, modify, merge, publish, 1394 | distribute, sublicense, and/or sell copies of the Software, and to 1395 | permit persons to whom the Software is furnished to do so, subject to 1396 | the following conditions: 1397 | 1398 | The above copyright notice and this permission notice shall be 1399 | included in all copies or substantial portions of the Software. 1400 | 1401 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 1402 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1403 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1404 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 1405 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 1406 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 1407 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1408 | 1409 | 1410 | https-proxy-agent 1411 | MIT 1412 | (The MIT License) 1413 | 1414 | Copyright (c) 2013 Nathan Rajlich 1415 | 1416 | Permission is hereby granted, free of charge, to any person obtaining 1417 | a copy of this software and associated documentation files (the 1418 | 'Software'), to deal in the Software without restriction, including 1419 | without limitation the rights to use, copy, modify, merge, publish, 1420 | distribute, sublicense, and/or sell copies of the Software, and to 1421 | permit persons to whom the Software is furnished to do so, subject to 1422 | the following conditions: 1423 | 1424 | The above copyright notice and this permission notice shall be 1425 | included in all copies or substantial portions of the Software. 1426 | 1427 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 1428 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1429 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1430 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 1431 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 1432 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 1433 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1434 | 1435 | is-plain-object 1436 | MIT 1437 | The MIT License (MIT) 1438 | 1439 | Copyright (c) 2014-2017, Jon Schlinkert. 1440 | 1441 | Permission is hereby granted, free of charge, to any person obtaining a copy 1442 | of this software and associated documentation files (the "Software"), to deal 1443 | in the Software without restriction, including without limitation the rights 1444 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1445 | copies of the Software, and to permit persons to whom the Software is 1446 | furnished to do so, subject to the following conditions: 1447 | 1448 | The above copyright notice and this permission notice shall be included in 1449 | all copies or substantial portions of the Software. 1450 | 1451 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1452 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1453 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1454 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1455 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1456 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1457 | THE SOFTWARE. 1458 | 1459 | 1460 | lru-cache 1461 | ISC 1462 | The ISC License 1463 | 1464 | Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors 1465 | 1466 | Permission to use, copy, modify, and/or distribute this software for any 1467 | purpose with or without fee is hereby granted, provided that the above 1468 | copyright notice and this permission notice appear in all copies. 1469 | 1470 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1471 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1472 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1473 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1474 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1475 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1476 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1477 | 1478 | 1479 | minimatch 1480 | ISC 1481 | The ISC License 1482 | 1483 | Copyright (c) Isaac Z. Schlueter and Contributors 1484 | 1485 | Permission to use, copy, modify, and/or distribute this software for any 1486 | purpose with or without fee is hereby granted, provided that the above 1487 | copyright notice and this permission notice appear in all copies. 1488 | 1489 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1490 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1491 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1492 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1493 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1494 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1495 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1496 | 1497 | 1498 | minipass 1499 | ISC 1500 | The ISC License 1501 | 1502 | Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors 1503 | 1504 | Permission to use, copy, modify, and/or distribute this software for any 1505 | purpose with or without fee is hereby granted, provided that the above 1506 | copyright notice and this permission notice appear in all copies. 1507 | 1508 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1509 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1510 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1511 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1512 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1513 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1514 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1515 | 1516 | 1517 | ms 1518 | MIT 1519 | The MIT License (MIT) 1520 | 1521 | Copyright (c) 2016 Zeit, Inc. 1522 | 1523 | Permission is hereby granted, free of charge, to any person obtaining a copy 1524 | of this software and associated documentation files (the "Software"), to deal 1525 | in the Software without restriction, including without limitation the rights 1526 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1527 | copies of the Software, and to permit persons to whom the Software is 1528 | furnished to do so, subject to the following conditions: 1529 | 1530 | The above copyright notice and this permission notice shall be included in all 1531 | copies or substantial portions of the Software. 1532 | 1533 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1534 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1535 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1536 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1537 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1538 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1539 | SOFTWARE. 1540 | 1541 | 1542 | node-fetch 1543 | MIT 1544 | The MIT License (MIT) 1545 | 1546 | Copyright (c) 2016 David Frank 1547 | 1548 | Permission is hereby granted, free of charge, to any person obtaining a copy 1549 | of this software and associated documentation files (the "Software"), to deal 1550 | in the Software without restriction, including without limitation the rights 1551 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1552 | copies of the Software, and to permit persons to whom the Software is 1553 | furnished to do so, subject to the following conditions: 1554 | 1555 | The above copyright notice and this permission notice shall be included in all 1556 | copies or substantial portions of the Software. 1557 | 1558 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1559 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1560 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1561 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1562 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1563 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1564 | SOFTWARE. 1565 | 1566 | 1567 | 1568 | once 1569 | ISC 1570 | The ISC License 1571 | 1572 | Copyright (c) Isaac Z. Schlueter and Contributors 1573 | 1574 | Permission to use, copy, modify, and/or distribute this software for any 1575 | purpose with or without fee is hereby granted, provided that the above 1576 | copyright notice and this permission notice appear in all copies. 1577 | 1578 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1579 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1580 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1581 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1582 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1583 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1584 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1585 | 1586 | 1587 | path-scurry 1588 | BlueOak-1.0.0 1589 | # Blue Oak Model License 1590 | 1591 | Version 1.0.0 1592 | 1593 | ## Purpose 1594 | 1595 | This license gives everyone as much permission to work with 1596 | this software as possible, while protecting contributors 1597 | from liability. 1598 | 1599 | ## Acceptance 1600 | 1601 | In order to receive this license, you must agree to its 1602 | rules. The rules of this license are both obligations 1603 | under that agreement and conditions to your license. 1604 | You must not do anything with this software that triggers 1605 | a rule that you cannot or will not follow. 1606 | 1607 | ## Copyright 1608 | 1609 | Each contributor licenses you to do everything with this 1610 | software that would otherwise infringe that contributor's 1611 | copyright in it. 1612 | 1613 | ## Notices 1614 | 1615 | You must ensure that everyone who gets a copy of 1616 | any part of this software from you, with or without 1617 | changes, also gets the text of this license or a link to 1618 | . 1619 | 1620 | ## Excuse 1621 | 1622 | If anyone notifies you in writing that you have not 1623 | complied with [Notices](#notices), you can keep your 1624 | license by taking all practical steps to comply within 30 1625 | days after the notice. If you do not do so, your license 1626 | ends immediately. 1627 | 1628 | ## Patent 1629 | 1630 | Each contributor licenses you to do everything with this 1631 | software that would otherwise infringe any patent claims 1632 | they can license or become able to license. 1633 | 1634 | ## Reliability 1635 | 1636 | No contributor can revoke this license. 1637 | 1638 | ## No Liability 1639 | 1640 | ***As far as the law allows, this software comes as is, 1641 | without any warranty or condition, and no contributor 1642 | will be liable to anyone for any damages related to this 1643 | software or this license, under any kind of legal claim.*** 1644 | 1645 | 1646 | semver 1647 | ISC 1648 | The ISC License 1649 | 1650 | Copyright (c) Isaac Z. Schlueter and Contributors 1651 | 1652 | Permission to use, copy, modify, and/or distribute this software for any 1653 | purpose with or without fee is hereby granted, provided that the above 1654 | copyright notice and this permission notice appear in all copies. 1655 | 1656 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1657 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1658 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1659 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1660 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1661 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1662 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1663 | 1664 | 1665 | strnum 1666 | MIT 1667 | MIT License 1668 | 1669 | Copyright (c) 2021 Natural Intelligence 1670 | 1671 | Permission is hereby granted, free of charge, to any person obtaining a copy 1672 | of this software and associated documentation files (the "Software"), to deal 1673 | in the Software without restriction, including without limitation the rights 1674 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1675 | copies of the Software, and to permit persons to whom the Software is 1676 | furnished to do so, subject to the following conditions: 1677 | 1678 | The above copyright notice and this permission notice shall be included in all 1679 | copies or substantial portions of the Software. 1680 | 1681 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1682 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1683 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1684 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1685 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1686 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1687 | SOFTWARE. 1688 | 1689 | 1690 | supports-color 1691 | MIT 1692 | MIT License 1693 | 1694 | Copyright (c) Sindre Sorhus (sindresorhus.com) 1695 | 1696 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1697 | 1698 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1699 | 1700 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1701 | 1702 | 1703 | tr46 1704 | MIT 1705 | 1706 | tslib 1707 | 0BSD 1708 | Copyright (c) Microsoft Corporation. 1709 | 1710 | Permission to use, copy, modify, and/or distribute this software for any 1711 | purpose with or without fee is hereby granted. 1712 | 1713 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 1714 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 1715 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 1716 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 1717 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 1718 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 1719 | PERFORMANCE OF THIS SOFTWARE. 1720 | 1721 | tunnel 1722 | MIT 1723 | The MIT License (MIT) 1724 | 1725 | Copyright (c) 2012 Koichi Kobayashi 1726 | 1727 | Permission is hereby granted, free of charge, to any person obtaining a copy 1728 | of this software and associated documentation files (the "Software"), to deal 1729 | in the Software without restriction, including without limitation the rights 1730 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1731 | copies of the Software, and to permit persons to whom the Software is 1732 | furnished to do so, subject to the following conditions: 1733 | 1734 | The above copyright notice and this permission notice shall be included in 1735 | all copies or substantial portions of the Software. 1736 | 1737 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1738 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1739 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1740 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1741 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1742 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1743 | THE SOFTWARE. 1744 | 1745 | 1746 | undici 1747 | MIT 1748 | MIT License 1749 | 1750 | Copyright (c) Matteo Collina and Undici contributors 1751 | 1752 | Permission is hereby granted, free of charge, to any person obtaining a copy 1753 | of this software and associated documentation files (the "Software"), to deal 1754 | in the Software without restriction, including without limitation the rights 1755 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1756 | copies of the Software, and to permit persons to whom the Software is 1757 | furnished to do so, subject to the following conditions: 1758 | 1759 | The above copyright notice and this permission notice shall be included in all 1760 | copies or substantial portions of the Software. 1761 | 1762 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1763 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1764 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1765 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1766 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1767 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1768 | SOFTWARE. 1769 | 1770 | 1771 | universal-user-agent 1772 | ISC 1773 | # [ISC License](https://spdx.org/licenses/ISC) 1774 | 1775 | Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m) 1776 | 1777 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 1778 | 1779 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1780 | 1781 | 1782 | uuid 1783 | MIT 1784 | The MIT License (MIT) 1785 | 1786 | Copyright (c) 2010-2016 Robert Kieffer and other contributors 1787 | 1788 | Permission is hereby granted, free of charge, to any person obtaining a copy 1789 | of this software and associated documentation files (the "Software"), to deal 1790 | in the Software without restriction, including without limitation the rights 1791 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1792 | copies of the Software, and to permit persons to whom the Software is 1793 | furnished to do so, subject to the following conditions: 1794 | 1795 | The above copyright notice and this permission notice shall be included in all 1796 | copies or substantial portions of the Software. 1797 | 1798 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1799 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1800 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1801 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1802 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1803 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1804 | SOFTWARE. 1805 | 1806 | 1807 | webidl-conversions 1808 | BSD-2-Clause 1809 | # The BSD 2-Clause License 1810 | 1811 | Copyright (c) 2014, Domenic Denicola 1812 | All rights reserved. 1813 | 1814 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1815 | 1816 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 1817 | 1818 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 1819 | 1820 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1821 | 1822 | 1823 | whatwg-url 1824 | MIT 1825 | The MIT License (MIT) 1826 | 1827 | Copyright (c) 2015–2016 Sebastian Mayr 1828 | 1829 | Permission is hereby granted, free of charge, to any person obtaining a copy 1830 | of this software and associated documentation files (the "Software"), to deal 1831 | in the Software without restriction, including without limitation the rights 1832 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1833 | copies of the Software, and to permit persons to whom the Software is 1834 | furnished to do so, subject to the following conditions: 1835 | 1836 | The above copyright notice and this permission notice shall be included in 1837 | all copies or substantial portions of the Software. 1838 | 1839 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1840 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1841 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1842 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1843 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1844 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1845 | THE SOFTWARE. 1846 | 1847 | 1848 | wrappy 1849 | ISC 1850 | The ISC License 1851 | 1852 | Copyright (c) Isaac Z. Schlueter and Contributors 1853 | 1854 | Permission to use, copy, modify, and/or distribute this software for any 1855 | purpose with or without fee is hereby granted, provided that the above 1856 | copyright notice and this permission notice appear in all copies. 1857 | 1858 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1859 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1860 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1861 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1862 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1863 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1864 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1865 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | moduleFileExtensions: ['js', 'ts'], 4 | testMatch: ['**/*.test.ts'], 5 | transform: { 6 | '^.+\\.ts$': 'ts-jest' 7 | }, 8 | verbose: true 9 | } 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cargo-semver-checks-action", 3 | "version": "2.0.0", 4 | "description": "Lint your crate API changes for semver violations.", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "ncc build src/main.ts --license licenses.txt --minify", 8 | "format": "prettier --write src/**/*.ts", 9 | "format-check": "prettier --check src/**/*.ts", 10 | "lint": "eslint src/**/*.ts", 11 | "test": "jest", 12 | "all": "npm run format && npm run lint && npm run build && npm test" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/mgr0dzicki/cargo-semver-checks-action.git" 17 | }, 18 | "keywords": [], 19 | "author": "", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/mgr0dzicki/cargo-semver-checks-action/issues" 23 | }, 24 | "homepage": "https://github.com/mgr0dzicki/cargo-semver-checks-action#readme", 25 | "dependencies": { 26 | "@actions-rs/core": "^0.1.6", 27 | "@actions/cache": "^4.0.3", 28 | "@actions/core": "^1.10.0", 29 | "@actions/exec": "^1.1.1", 30 | "@actions/github": "^6.0.0", 31 | "@actions/io": "^1.1.2", 32 | "@actions/tool-cache": "^2.0.1", 33 | "folder-hash": "^4.0.4", 34 | "glob": "^11.0.0" 35 | }, 36 | "devDependencies": { 37 | "@types/folder-hash": "^4.0.2", 38 | "@types/jest": "^29.5.1", 39 | "@types/node": "^20.11.30", 40 | "@typescript-eslint/eslint-plugin": "^7.3.1", 41 | "@typescript-eslint/parser": "^7.3.1", 42 | "@vercel/ncc": "^0.38.1", 43 | "eslint": "^8.57.0", 44 | "eslint-config-prettier": "^9.1.0", 45 | "jest": "^29.5.0", 46 | "prettier": "^3.2.5", 47 | "ts-jest": "^29.1.0", 48 | "typescript": "^5.4.2" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as core from "@actions/core"; 3 | import * as github from "@actions/github"; 4 | import * as io from "@actions/io"; 5 | import * as toolCache from "@actions/tool-cache"; 6 | import * as rustCore from "@actions-rs/core"; 7 | 8 | import { 9 | getErrorMessage, 10 | getPlatformMatchingTarget, 11 | getRustcVersion, 12 | optionFromList, 13 | optionIfValueProvided, 14 | } from "./utils"; 15 | import { RustdocCache } from "./rustdoc-cache"; 16 | 17 | const CARGO_TARGET_DIR = path.join("semver-checks", "target"); 18 | 19 | function getCheckReleaseArguments(): string[] { 20 | return [ 21 | optionFromList("--package", rustCore.input.getInputList("package")), 22 | optionFromList("--exclude", rustCore.input.getInputList("exclude")), 23 | optionIfValueProvided("--target", rustCore.input.getInput("rust-target")), 24 | optionIfValueProvided("--manifest-path", rustCore.input.getInput("manifest-path")), 25 | optionIfValueProvided("--release-type", rustCore.input.getInput("release-type")), 26 | getFeatureGroup(rustCore.input.getInput("feature-group")), 27 | optionFromList("--features", rustCore.input.getInputList("features")), 28 | rustCore.input.getInputBool("verbose") ? ["--verbose"] : [], 29 | ].flat(); 30 | } 31 | 32 | function getFeatureGroup(name = ""): string[] { 33 | switch (name) { 34 | case "all-features": 35 | return ["--all-features"]; 36 | case "default-features": 37 | return ["--default-features"]; 38 | case "only-explicit-features": 39 | return ["--only-explicit-features"]; 40 | case "": 41 | return []; 42 | default: 43 | throw new Error(`Unsupported feature group: ${name}`); 44 | } 45 | } 46 | 47 | function getGitHubToken(): string { 48 | const token = process.env["GITHUB_TOKEN"] || rustCore.input.getInput("github-token"); 49 | if (!token) { 50 | throw new Error("Querying the GitHub API is possible only if the GitHub token is set."); 51 | } 52 | return token; 53 | } 54 | 55 | async function getCargoSemverChecksDownloadURL(target: string): Promise { 56 | const octokit = github.getOctokit(getGitHubToken()); 57 | 58 | const getReleaseUrl = await octokit.rest.repos.getLatestRelease({ 59 | owner: "obi1kenobi", 60 | repo: "cargo-semver-checks", 61 | }); 62 | 63 | const asset = getReleaseUrl.data.assets.find((asset) => { 64 | return asset["name"].endsWith(`${target}.tar.gz`); 65 | }); 66 | 67 | if (!asset) { 68 | throw new Error(`Couldn't find a release for target ${target}.`); 69 | } 70 | 71 | return asset.url; 72 | } 73 | 74 | async function installRustUpIfRequested(): Promise { 75 | const toolchain = rustCore.input.getInput("rust-toolchain") || "stable"; 76 | if (toolchain != "manual") { 77 | const rustup = await rustCore.RustUp.getOrInstall(); 78 | await rustup.call(["show"]); 79 | await rustup.setProfile("minimal"); 80 | await rustup.installToolchain(toolchain); 81 | 82 | const target = rustCore.input.getInput("rust-target"); 83 | if (target) { 84 | await rustup.addTarget(target, toolchain); 85 | } 86 | 87 | // Setting the environment variable here affects only processes spawned 88 | // by this action, so it will not override the default toolchain globally. 89 | process.env["RUSTUP_TOOLCHAIN"] = toolchain; 90 | } 91 | 92 | // Disable incremental compilation. 93 | process.env["CARGO_INCREMENTAL"] ||= "0"; 94 | 95 | // Enable colors in the output. 96 | process.env["CARGO_TERM_COLOR"] ||= "always"; 97 | 98 | // Enable sparse checkout for crates.io except for Rust 1.66 and 1.67, 99 | // on which it is unstable. 100 | if (!process.env["CARGO_REGISTRIES_CRATES_IO_PROTOCOL"]) { 101 | const rustcVersion = await getRustcVersion(); 102 | if (!rustcVersion.startsWith("rustc-1.66") && !rustcVersion.startsWith("rustc-1.67")) { 103 | process.env["CARGO_REGISTRIES_CRATES_IO_PROTOCOL"] = "sparse"; 104 | } 105 | } 106 | } 107 | 108 | async function runCargoSemverChecks(cargo: rustCore.Cargo): Promise { 109 | // The default location of the target directory varies depending on whether 110 | // the action is run inside a workspace or on a single crate. We therefore 111 | // need to set the target directory explicitly. 112 | process.env["CARGO_TARGET_DIR"] = CARGO_TARGET_DIR; 113 | 114 | await cargo.call(["semver-checks", "check-release"].concat(getCheckReleaseArguments())); 115 | } 116 | 117 | async function installCargoSemverChecksFromPrecompiledBinary(): Promise { 118 | const url = await getCargoSemverChecksDownloadURL(getPlatformMatchingTarget()); 119 | 120 | core.info(`downloading cargo-semver-checks from ${url}`); 121 | const tarballPath = await toolCache.downloadTool(url, undefined, `token ${getGitHubToken()}`, { 122 | accept: "application/octet-stream", 123 | }); 124 | core.info(`extracting ${tarballPath}`); 125 | const binPath = await toolCache.extractTar(tarballPath, undefined, ["xz"]); 126 | 127 | core.addPath(binPath); 128 | } 129 | 130 | async function installCargoSemverChecksUsingCargo(cargo: rustCore.Cargo): Promise { 131 | await cargo.call(["install", "cargo-semver-checks", "--locked"]); 132 | } 133 | 134 | async function installCargoSemverChecks(cargo: rustCore.Cargo): Promise { 135 | if ((await io.which("cargo-semver-checks")) != "") { 136 | return; 137 | } 138 | 139 | core.info("cargo-semver-checks is not installed, installing now..."); 140 | 141 | try { 142 | await installCargoSemverChecksFromPrecompiledBinary(); 143 | } catch (error) { 144 | core.info("Failed to download precompiled binary of cargo-semver-checks."); 145 | core.info(`Error: ${getErrorMessage(error)}`); 146 | core.info("Installing using cargo install..."); 147 | 148 | await installCargoSemverChecksUsingCargo(cargo); 149 | } 150 | } 151 | 152 | async function run(): Promise { 153 | const manifestPath = path.resolve(rustCore.input.getInput("manifest-path") || "./"); 154 | const manifestDir = path.extname(manifestPath) ? path.dirname(manifestPath) : manifestPath; 155 | 156 | await installRustUpIfRequested(); 157 | 158 | const cargo = await rustCore.Cargo.get(); 159 | 160 | await installCargoSemverChecks(cargo); 161 | 162 | const cache = new RustdocCache( 163 | cargo, 164 | path.join(CARGO_TARGET_DIR, "semver-checks", "cache"), 165 | manifestDir, 166 | ); 167 | 168 | await cache.restore(); 169 | await runCargoSemverChecks(cargo); 170 | await cache.save(); 171 | } 172 | 173 | async function main() { 174 | try { 175 | await run(); 176 | } catch (error) { 177 | core.setFailed(getErrorMessage(error)); 178 | } 179 | } 180 | 181 | main(); 182 | -------------------------------------------------------------------------------- /src/rustdoc-cache.ts: -------------------------------------------------------------------------------- 1 | import os = require("os"); 2 | 3 | import * as path from "path"; 4 | import * as crypto from "crypto"; 5 | import * as cache from "@actions/cache"; 6 | import * as core from "@actions/core"; 7 | import * as rustCore from "@actions-rs/core"; 8 | 9 | import { 10 | getCargoSemverChecksVersion, 11 | getRustcVersion, 12 | hashFiles, 13 | hashFolderContent, 14 | } from "./utils"; 15 | 16 | export class RustdocCache { 17 | private readonly cargo; 18 | private readonly cachePath; 19 | private readonly workspaceRoot; 20 | private restoredCacheKey = ""; 21 | private __cacheKey = ""; 22 | 23 | constructor(cargo: rustCore.Cargo, cachePath: string, workspaceRoot: string) { 24 | this.cargo = cargo; 25 | this.cachePath = path.resolve(cachePath); 26 | this.workspaceRoot = path.resolve(workspaceRoot); 27 | } 28 | 29 | async save(): Promise { 30 | const cacheKeyWithLocalHash = `${await this.cacheKey()}-${await this.getLocalCacheHash()}`; 31 | if (this.restoredCacheKey == cacheKeyWithLocalHash) { 32 | core.info("Rustdoc cache is up to date, skipping saving."); 33 | } else { 34 | core.info(`Saving rustdoc cache using key ${cacheKeyWithLocalHash}`); 35 | await cache.saveCache([this.cachePath], cacheKeyWithLocalHash); 36 | this.restoredCacheKey = cacheKeyWithLocalHash; 37 | } 38 | } 39 | 40 | async restore(): Promise { 41 | core.info("Restoring rustdoc cache..."); 42 | core.info(`Rustdoc cache path: ${this.cachePath}.`); 43 | core.info(`Rustdoc cache key: ${await this.cacheKey()}.`); 44 | 45 | const key = await cache.restoreCache([this.cachePath], await this.cacheKey(), [ 46 | await this.cacheKey(), 47 | ]); 48 | if (key) { 49 | core.info(`Restored rustdoc cache using key ${key}.`); 50 | this.restoredCacheKey = key; 51 | return true; 52 | } else { 53 | core.info(`Rustdoc cache not found.`); 54 | return false; 55 | } 56 | } 57 | 58 | private async cacheKey(): Promise { 59 | if (!this.__cacheKey) { 60 | this.__cacheKey = [ 61 | rustCore.input.getInput("prefix-key") || "semver", 62 | rustCore.input.getInput("shared-key") || this.getRunDependentKey(), 63 | os.platform() as string, 64 | await getRustcVersion(), 65 | await getCargoSemverChecksVersion(this.cargo), 66 | await this.getCargoLocksHash(), 67 | "semver-checks-rustdoc", 68 | ].join("-"); 69 | } 70 | 71 | return this.__cacheKey; 72 | } 73 | 74 | private getRunDependentKey(): string { 75 | const hasher = crypto.createHash("md5"); 76 | hasher.update(JSON.stringify({ package: rustCore.input.getInputList("package").sort() })); 77 | hasher.update(JSON.stringify({ exclude: rustCore.input.getInputList("exclude").sort() })); 78 | hasher.update(JSON.stringify({ manifest_path: rustCore.input.getInput("manifest-path") })); 79 | 80 | return [process.env["GITHUB_JOB"] || "", hasher.digest("hex").substring(0, 16)].join("-"); 81 | } 82 | 83 | private async getLocalCacheHash(): Promise { 84 | return await hashFolderContent(this.cachePath); 85 | } 86 | 87 | private async getCargoLocksHash(): Promise { 88 | return await hashFiles([path.join(this.workspaceRoot, "**", "Cargo.lock")]); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import os = require("os"); 2 | 3 | import * as crypto from "crypto"; 4 | import { glob } from "glob"; 5 | import { hashElement } from "folder-hash"; 6 | import * as exec from "@actions/exec"; 7 | import * as rustCore from "@actions-rs/core"; 8 | 9 | export function getErrorMessage(error: unknown): string { 10 | if (error instanceof Error) { 11 | return error.message; 12 | } else { 13 | return String(error); 14 | } 15 | } 16 | 17 | export function getPlatformMatchingTarget(): string { 18 | const platform = os.platform() as string; 19 | switch (platform) { 20 | case "linux": 21 | return "x86_64-unknown-linux-gnu"; 22 | case "win32": 23 | return "x86_64-pc-windows-msvc"; 24 | case "darwin": 25 | return "x86_64-apple-darwin"; 26 | default: 27 | throw new Error("Unsupported runner"); 28 | } 29 | } 30 | 31 | export function optionIfValueProvided(option: string, value?: string): string[] { 32 | return value ? [option, value] : []; 33 | } 34 | 35 | export function optionFromList(option: string, values: string[]): string[] { 36 | return values.map((value) => [option, value]).flat(); 37 | } 38 | 39 | export async function hashFolderContent(path: string): Promise { 40 | const node = await hashElement(path, { encoding: "hex", folders: { ignoreRootName: true } }); 41 | return node.hash; 42 | } 43 | 44 | export async function hashFiles(patterns: string[] = []): Promise { 45 | const files = await glob(patterns); 46 | const nodes = await Promise.all(files.sort().map((filename) => hashElement(filename))); 47 | 48 | const hasher = crypto.createHash("md5"); 49 | nodes.forEach((node) => hasher.update(node.hash)); 50 | return hasher.digest("hex"); 51 | } 52 | 53 | function makeExecOptions(stdout: { s: string }): exec.ExecOptions { 54 | return { 55 | listeners: { 56 | stdout: (buffer: Buffer): void => { 57 | stdout.s += buffer.toString(); 58 | }, 59 | }, 60 | }; 61 | } 62 | 63 | function removeWhitespaces(str: string): string { 64 | return str.trim().replace(/\s/g, "-"); 65 | } 66 | 67 | export async function getRustcVersion(): Promise { 68 | const stdout = { s: "" }; 69 | await exec.exec("rustc", ["--version"], makeExecOptions(stdout)); 70 | return removeWhitespaces(stdout.s); 71 | } 72 | 73 | export async function getCargoSemverChecksVersion(cargo: rustCore.Cargo): Promise { 74 | const stdout = { s: "" }; 75 | await cargo.call(["semver-checks", "--version"], makeExecOptions(stdout)); 76 | return removeWhitespaces(stdout.s); 77 | } 78 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "outDir": "dist", 5 | "strict": true, 6 | "target": "ES2022" 7 | }, 8 | "include": [ 9 | "src/**/*.ts" 10 | ], 11 | } 12 | --------------------------------------------------------------------------------