mirror of
https://github.com/taiki-e/install-action.git
synced 2026-04-27 09:30:29 +00:00
Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe065954f6 | ||
|
|
aaa64a3351 | ||
|
|
f99317473f | ||
|
|
3523902f5a | ||
|
|
e6e3706b36 | ||
|
|
9469185794 | ||
|
|
1b8d452217 | ||
|
|
d125c0a835 | ||
|
|
319a0f2f5f | ||
|
|
0fe4860065 | ||
|
|
44e8874873 | ||
|
|
5f3e9b7a2d | ||
|
|
55912949de | ||
|
|
e26ea2a159 | ||
|
|
00b370abc3 | ||
|
|
6ae49f1b8b | ||
|
|
2967b5da19 | ||
|
|
5a32d87288 | ||
|
|
1f8124ee27 | ||
|
|
b58c61fa21 | ||
|
|
333ea3e9a4 | ||
|
|
172419740d | ||
|
|
6d0e68ca2c | ||
|
|
b4c13e81de | ||
|
|
62b3405f01 | ||
|
|
c87777c316 | ||
|
|
1fde53ce9d | ||
|
|
0779861fb4 | ||
|
|
975a95d384 | ||
|
|
da05975632 | ||
|
|
df5dec2a2f | ||
|
|
4eafe80cf6 | ||
|
|
7d472ffc8d | ||
|
|
f82e1be4c6 | ||
|
|
a4d120e1c4 | ||
|
|
08d473f7b2 | ||
|
|
94493127b2 | ||
|
|
50698ce116 | ||
|
|
ed51b980a0 | ||
|
|
a86da1a3cb | ||
|
|
1668c0c558 | ||
|
|
a779dafd49 | ||
|
|
2a650b8687 | ||
|
|
656b4969d3 | ||
|
|
52b84660a3 | ||
|
|
84ccb7b697 | ||
|
|
63d5217a35 | ||
|
|
cf1be1a00f | ||
|
|
444e3608dd | ||
|
|
716fb8f756 | ||
|
|
870e4de1b5 |
@@ -11,7 +11,7 @@ indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{json,md,rb,yml,yaml}]
|
||||
[*.{json,md,rb,sh,yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.{js,yml,yaml}]
|
||||
|
||||
2
.github/.cspell/project-dictionary.txt
vendored
2
.github/.cspell/project-dictionary.txt
vendored
@@ -24,6 +24,7 @@ protoc
|
||||
pwsh
|
||||
quickinstall
|
||||
rclone
|
||||
rootfs
|
||||
sccache
|
||||
syft
|
||||
udeps
|
||||
@@ -31,4 +32,3 @@ wasmtime
|
||||
watchexec
|
||||
xbuild
|
||||
xscale
|
||||
zigbuild
|
||||
|
||||
8
.github/dependabot.yml
vendored
8
.github/dependabot.yml
vendored
@@ -7,10 +7,6 @@ updates:
|
||||
commit-message:
|
||||
prefix: ''
|
||||
labels: []
|
||||
groups:
|
||||
cargo:
|
||||
patterns:
|
||||
- '*'
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule:
|
||||
@@ -18,7 +14,3 @@ updates:
|
||||
commit-message:
|
||||
prefix: ''
|
||||
labels: []
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- '*'
|
||||
|
||||
29
.github/workflows/ci.yml
vendored
29
.github/workflows/ci.yml
vendored
@@ -25,7 +25,7 @@ env:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
shell: bash --noprofile --norc -CeEuxo pipefail {0}
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
||||
@@ -46,9 +46,10 @@ jobs:
|
||||
matrix:
|
||||
include:
|
||||
# NB: Sync list with https://github.com/taiki-e/checkout-action/blob/HEAD/.github/workflows/ci.yml
|
||||
- os: ubuntu-20.04
|
||||
- os: ubuntu-22.04
|
||||
- os: ubuntu-22.04-arm
|
||||
- os: ubuntu-24.04
|
||||
- os: ubuntu-24.04-arm
|
||||
- os: ubuntu-22.04
|
||||
tool: major.minor.patch
|
||||
- os: ubuntu-22.04
|
||||
@@ -68,6 +69,11 @@ jobs:
|
||||
bash: msys64
|
||||
- os: windows-2022
|
||||
bash: cygwin
|
||||
- os: windows-2025
|
||||
- os: windows-2025
|
||||
bash: msys64
|
||||
- os: windows-2025
|
||||
bash: cygwin
|
||||
- os: windows-2022
|
||||
tool: major.minor.patch
|
||||
- os: windows-2022
|
||||
@@ -79,7 +85,7 @@ jobs:
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
|
||||
- run: rm Cargo.toml
|
||||
- run: rm -- Cargo.toml
|
||||
- name: Generate tool list
|
||||
id: tool-list
|
||||
run: tools/ci/tool-list.sh "${{ matrix.tool }}" "${{ matrix.os }}" "${{ matrix.bash }}" >>"${GITHUB_OUTPUT}"
|
||||
@@ -154,13 +160,13 @@ jobs:
|
||||
- opensuse/tumbleweed:latest # glibc 2.39 (as of 2024-07-19)
|
||||
- archlinux:latest # glibc 2.39 (as of 2024-07-19)
|
||||
- alpine:latest # musl 1.2.5 (as of alpine 3.20)
|
||||
# - openwrt/rootfs:x86-64-openwrt-24.10 # musl 1.2.5
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
container: ${{ matrix.container }}
|
||||
steps:
|
||||
- name: Install requirements (old debian)
|
||||
run: |
|
||||
set -CeEuxo pipefail
|
||||
# In Debian, the old repositories is removed from the main mirrors some time after EoL.
|
||||
sed -i /etc/apt/sources.list -e 's/deb.debian.org/archive.debian.org/g' \
|
||||
-e 's|security.debian.org|archive.debian.org/|g' \
|
||||
@@ -168,7 +174,6 @@ jobs:
|
||||
if: startsWith(matrix.container, 'debian:9')
|
||||
- name: Install requirements (centos)
|
||||
run: |
|
||||
set -CeEuxo pipefail
|
||||
# In CentOS, the old repositories is removed from the main mirrors just after EoL.
|
||||
# https://github.com/rust-lang/rust/pull/126352
|
||||
sed -i /etc/yum.repos.d/*.repo -e 's!^mirrorlist!#mirrorlist!' \
|
||||
@@ -191,7 +196,7 @@ jobs:
|
||||
if: startsWith(matrix.container, 'centos')
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
|
||||
- run: rm Cargo.toml
|
||||
- run: rm -- Cargo.toml
|
||||
- name: Generate tool list
|
||||
id: tool-list
|
||||
run: tools/ci/tool-list.sh >>"${GITHUB_OUTPUT}"
|
||||
@@ -204,6 +209,16 @@ jobs:
|
||||
tool: ${{ steps.tool-list.outputs.tool }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Test bash
|
||||
run: just --version && shfmt --version
|
||||
shell: bash
|
||||
# TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
|
||||
if: (!startsWith(matrix.container, 'opensuse'))
|
||||
- name: Test sh
|
||||
run: just --version && shfmt --version
|
||||
shell: sh
|
||||
# TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
|
||||
if: (!startsWith(matrix.container, 'opensuse'))
|
||||
|
||||
manifest:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -242,7 +257,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.CREATE_PR_TOKEN }}
|
||||
PR_NUMBER: ${{ steps.create-pull-request.outputs.pull-request-number }}
|
||||
if: github.repository_owner == 'taiki-e' && (github.event_name == 'schedule' || github.event_name == 'push' && github.ref == 'refs/heads/main') && steps.diff.outputs.success == 'false' && steps.create-pull-request.outputs.pull-request-operation == 'created'
|
||||
- name: Auto approve for auto-generated PR
|
||||
- name: Approve auto-generated PR for auto-merge
|
||||
run: gh pr review --approve "${PR_NUMBER:?}"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
shell: bash --noprofile --norc -CeEuxo pipefail {0}
|
||||
|
||||
jobs:
|
||||
create-release:
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# https://github.com/DavidAnson/markdownlint#rules--aliases
|
||||
# https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md
|
||||
config:
|
||||
line-length: false
|
||||
no-duplicate-heading: false
|
||||
no-inline-html: false
|
||||
no-emphasis-as-heading: false
|
||||
line-length: false # MD013
|
||||
no-duplicate-heading: false # MD024
|
||||
no-blanks-blockquote: false # MD028
|
||||
no-inline-html: false # MD033
|
||||
no-emphasis-as-heading: false # MD036
|
||||
|
||||
# https://github.com/DavidAnson/markdownlint-cli2#markdownlint-cli2jsonc
|
||||
noBanner: true
|
||||
|
||||
93
CHANGELOG.md
93
CHANGELOG.md
@@ -10,6 +10,82 @@ Note: In this file, do not use the hard wrap in the middle of a sentence for com
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.47.17] - 2025-01-19
|
||||
|
||||
- Update `cargo-audit@latest` to 0.21.1.
|
||||
|
||||
## [2.47.16] - 2025-01-18
|
||||
|
||||
- Update `cargo-make@latest` to 0.37.24.
|
||||
|
||||
## [2.47.15] - 2025-01-16
|
||||
|
||||
- Update `cargo-tarpaulin@latest` to 0.31.5.
|
||||
|
||||
- Update `cargo-llvm-cov@latest` to 0.6.16.
|
||||
|
||||
- Update `cargo-hack@latest` to 0.6.34.
|
||||
|
||||
## [2.47.14] - 2025-01-16
|
||||
|
||||
- Update `cargo-nextest@latest` to 0.9.88.
|
||||
|
||||
## [2.47.13] - 2025-01-15
|
||||
|
||||
- Update `wasmtime@latest` to 28.0.1.
|
||||
|
||||
- Update `release-plz@latest` to 0.3.113.
|
||||
|
||||
- Update `cargo-binstall@latest` to 1.10.21.
|
||||
|
||||
## [2.47.12] - 2025-01-13
|
||||
|
||||
- Update `wasm-bindgen@latest` to 0.2.100.
|
||||
|
||||
- Update `rclone@latest` to 1.69.0.
|
||||
|
||||
- Update `cargo-binstall@latest` to 1.10.20.
|
||||
|
||||
## [2.47.11] - 2025-01-11
|
||||
|
||||
- Update `editorconfig-checker@latest` to 3.1.2.
|
||||
|
||||
## [2.47.10] - 2025-01-10
|
||||
|
||||
- Update `cargo-udeps@latest` to 0.1.54.
|
||||
|
||||
## [2.47.9] - 2025-01-09
|
||||
|
||||
- Update `editorconfig-checker@latest` to 3.1.1.
|
||||
|
||||
- Update `protoc@latest` to 3.29.3.
|
||||
|
||||
## [2.47.8] - 2025-01-07
|
||||
|
||||
- Update `sccache@latest` to 0.9.1.
|
||||
|
||||
- Update `cargo-binstall@latest` to 1.10.19.
|
||||
|
||||
## [2.47.7] - 2025-01-03
|
||||
|
||||
- Update `typos@latest` to 1.29.4.
|
||||
|
||||
## [2.47.6] - 2025-01-03
|
||||
|
||||
- Update `typos@latest` to 1.29.3.
|
||||
|
||||
## [2.47.5] - 2025-01-02
|
||||
|
||||
- Update `typos@latest` to 1.29.1.
|
||||
|
||||
## [2.47.4] - 2025-01-02
|
||||
|
||||
- Update `xh@latest` to 0.23.1.
|
||||
|
||||
## [2.47.3] - 2025-01-02
|
||||
|
||||
- Update `knope@latest` to 0.18.2.
|
||||
|
||||
## [2.47.2] - 2024-12-31
|
||||
|
||||
- Update `typos@latest` to 1.29.0.
|
||||
@@ -3274,7 +3350,22 @@ Note: This release is considered a breaking change because installing on version
|
||||
|
||||
Initial release
|
||||
|
||||
[Unreleased]: https://github.com/taiki-e/install-action/compare/v2.47.2...HEAD
|
||||
[Unreleased]: https://github.com/taiki-e/install-action/compare/v2.47.17...HEAD
|
||||
[2.47.17]: https://github.com/taiki-e/install-action/compare/v2.47.16...v2.47.17
|
||||
[2.47.16]: https://github.com/taiki-e/install-action/compare/v2.47.15...v2.47.16
|
||||
[2.47.15]: https://github.com/taiki-e/install-action/compare/v2.47.14...v2.47.15
|
||||
[2.47.14]: https://github.com/taiki-e/install-action/compare/v2.47.13...v2.47.14
|
||||
[2.47.13]: https://github.com/taiki-e/install-action/compare/v2.47.12...v2.47.13
|
||||
[2.47.12]: https://github.com/taiki-e/install-action/compare/v2.47.11...v2.47.12
|
||||
[2.47.11]: https://github.com/taiki-e/install-action/compare/v2.47.10...v2.47.11
|
||||
[2.47.10]: https://github.com/taiki-e/install-action/compare/v2.47.9...v2.47.10
|
||||
[2.47.9]: https://github.com/taiki-e/install-action/compare/v2.47.8...v2.47.9
|
||||
[2.47.8]: https://github.com/taiki-e/install-action/compare/v2.47.7...v2.47.8
|
||||
[2.47.7]: https://github.com/taiki-e/install-action/compare/v2.47.6...v2.47.7
|
||||
[2.47.6]: https://github.com/taiki-e/install-action/compare/v2.47.5...v2.47.6
|
||||
[2.47.5]: https://github.com/taiki-e/install-action/compare/v2.47.4...v2.47.5
|
||||
[2.47.4]: https://github.com/taiki-e/install-action/compare/v2.47.3...v2.47.4
|
||||
[2.47.3]: https://github.com/taiki-e/install-action/compare/v2.47.2...v2.47.3
|
||||
[2.47.2]: https://github.com/taiki-e/install-action/compare/v2.47.1...v2.47.2
|
||||
[2.47.1]: https://github.com/taiki-e/install-action/compare/v2.47.0...v2.47.1
|
||||
[2.47.0]: https://github.com/taiki-e/install-action/compare/v2.46.20...v2.47.0
|
||||
|
||||
@@ -13,6 +13,7 @@ rust_2018_idioms = "warn"
|
||||
single_use_lifetimes = "warn"
|
||||
unexpected_cfgs = { level = "warn", check-cfg = [
|
||||
] }
|
||||
unnameable_types = "warn"
|
||||
unreachable_pub = "warn"
|
||||
unsafe_op_in_unsafe_fn = "warn"
|
||||
[workspace.lints.clippy]
|
||||
@@ -25,6 +26,7 @@ inline_asm_x86_att_syntax = "warn"
|
||||
trailing_empty_array = "warn"
|
||||
transmute_undefined_repr = "warn"
|
||||
undocumented_unsafe_blocks = "warn"
|
||||
unused_trait_names = "warn"
|
||||
# Suppress buggy or noisy clippy lints
|
||||
bool_assert_comparison = { level = "allow", priority = 1 }
|
||||
borrow_as_ptr = { level = "allow", priority = 1 } # https://github.com/rust-lang/rust-clippy/issues/8286
|
||||
|
||||
@@ -22,8 +22,8 @@ GitHub Action for installing development tools (mainly from GitHub Releases).
|
||||
|
||||
| Name | Required | Description | Type | Default |
|
||||
| -------- |:--------:| --------------------------------------- | ------- | ------- |
|
||||
| tool | **true** | Tools to install (comma-separated list) | String | |
|
||||
| checksum | false | Whether to enable checksums | Boolean | `true` |
|
||||
| tool | **✓** | Tools to install (comma-separated list) | String | |
|
||||
| checksum | | Whether to enable checksums | Boolean | `true` |
|
||||
|
||||
### Example workflow
|
||||
|
||||
|
||||
22
manifests/cargo-audit.json
generated
22
manifests/cargo-audit.json
generated
@@ -20,10 +20,28 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0](https://github.com/rustsec/rustsec/blob/HEAD/cargo-audit/LICENSE-APACHE) OR [MIT](https://github.com/rustsec/rustsec/blob/HEAD/cargo-audit/LICENSE-MIT)",
|
||||
"latest": {
|
||||
"version": "0.21.0"
|
||||
"version": "0.21.1"
|
||||
},
|
||||
"0.21": {
|
||||
"version": "0.21.0"
|
||||
"version": "0.21.1"
|
||||
},
|
||||
"0.21.1": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD383807A86B60",
|
||||
"checksum": "e1d057a43028cb2359adcb75029e345b5791fbd2a1a01a3b8f16521035662cf3"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD3837D203A3C3",
|
||||
"checksum": "ca21223691975d97a2442623a4d90e933d349199a728fdabaf98124ff65ee53f"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD383870DE65E0",
|
||||
"checksum": "cb90ebf6c76bdf7014fb0114b3bc897917ce0ea5ecaf16f7dc7009612941dace"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"etag": "0x8DD383809DEED88",
|
||||
"checksum": "bd9a9ceb4887f28c8ace1a35da39818cbdcf98b1088bcd47544bff3a07e856bf"
|
||||
}
|
||||
},
|
||||
"0.21.0": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
28
manifests/cargo-binstall.json
generated
28
manifests/cargo-binstall.json
generated
@@ -22,32 +22,32 @@
|
||||
},
|
||||
"license_markdown": "[GPL-3.0](https://github.com/cargo-bins/cargo-binstall/blob/HEAD/crates/bin/LICENSE)",
|
||||
"latest": {
|
||||
"version": "1.10.18"
|
||||
"version": "1.10.21"
|
||||
},
|
||||
"1.10.18": {
|
||||
"1.10.21": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2701DB5E5F3C",
|
||||
"checksum": "3cee9a0e3074a9ed397b33de8d6f73c1bc591a041af3b57c4e9f5aa9939a5c21"
|
||||
"etag": "0x8DD33DF3B7A2D85",
|
||||
"checksum": "625fa622a761030e989c6f4ed950da7b1309d707970496480d890c551a3de184"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD270174067A5B",
|
||||
"checksum": "7ae2edf8c057b4da57374de604047125d6ffcff36c13e1481912707c016245c1"
|
||||
"etag": "0x8DD33DF2DD25A04",
|
||||
"checksum": "c8ecb8506608d5f5392d6b21b018283c01de64e2c97bea01cd6541a5e52d64c6"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD27029B083B68",
|
||||
"checksum": "b0fde17b48f0a43b57d218388e58ce89689b3b91d8e272500ed85789656510b5"
|
||||
"etag": "0x8DD33E01EB03384",
|
||||
"checksum": "baa90496dfee7ff099cba47f93a4130b9661b56c46fbe63518ce94a340b7b611"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD270186728539",
|
||||
"checksum": "f9d1c2cc5f703eebf4e15260298ac7d644dc25d5691b23413b2337da340787dc"
|
||||
"etag": "0x8DD33DEDFBD8200",
|
||||
"checksum": "dfa4a1aee56e0f078db8559113a4da7fd1fcf8298484db0f7254d09d89d81163"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2701C1E5AD95",
|
||||
"checksum": "cdd82130ba1c98ca4db63c44087881d6ae92ba642ba6361654987a707040aabd"
|
||||
"etag": "0x8DD33DF5BDB3971",
|
||||
"checksum": "2e51fb2911cdb9c9e7f8ef909c5c9b96373fa72c8c009b4698ca40f4110b9ca6"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DD270271851C1E",
|
||||
"checksum": "e8c206865a9bac281e44939968f53d53c31c466f8b15e2cf7ac293c793a0da46"
|
||||
"etag": "0x8DD33DFE9223054",
|
||||
"checksum": "bbded110d168b8406e34cd4155c061402a6ec7b2d66a1a2e78980f304f038d37"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
36
manifests/cargo-hack.json
generated
36
manifests/cargo-hack.json
generated
@@ -3,10 +3,42 @@
|
||||
"template": null,
|
||||
"license_markdown": "[Apache-2.0](https://github.com/taiki-e/cargo-hack/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-hack/blob/main/LICENSE-MIT)",
|
||||
"latest": {
|
||||
"version": "0.6.33"
|
||||
"version": "0.6.34"
|
||||
},
|
||||
"0.6": {
|
||||
"version": "0.6.33"
|
||||
"version": "0.6.34"
|
||||
},
|
||||
"0.6.34": {
|
||||
"x86_64_linux_musl": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-x86_64-unknown-linux-musl.tar.gz",
|
||||
"etag": "0x8DD364BF6437B65",
|
||||
"checksum": "7b58e29544ae7b357deda5118a17053e4929f94f8d8595215d27cbbb415c47a5"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-x86_64-apple-darwin.tar.gz",
|
||||
"etag": "0x8DD364C545B2CF1",
|
||||
"checksum": "4fc72e4b3e1d7c7063efeddd4ebc196b4ee062e9b772dad24bebf8cb15749e21"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-x86_64-pc-windows-msvc.tar.gz",
|
||||
"etag": "0x8DD364C4A143D6D",
|
||||
"checksum": "6206ca07f99945f58765d1669fb2a995d96d809424ff7424257ce5f0fad23401"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-aarch64-unknown-linux-musl.tar.gz",
|
||||
"etag": "0x8DD364BFC48B3B7",
|
||||
"checksum": "2b30401f9eb7664affdda7ce13b5d8421e2ea5ea74a854a71679ff68bf766761"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-aarch64-apple-darwin.tar.gz",
|
||||
"etag": "0x8DD364C24072F24",
|
||||
"checksum": "f2e88526e44b5934b5a0a2aa10fbf621ec44fe509c6ac6a82e1d49fa41d70943"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/taiki-e/cargo-hack/releases/download/v0.6.34/cargo-hack-aarch64-pc-windows-msvc.tar.gz",
|
||||
"etag": "0x8DD364C3F0E09C1",
|
||||
"checksum": "9c9903aa9ae2caaf38c37a0375e18afc50da1c1ca69c3f89b4219b530ab59a0c"
|
||||
}
|
||||
},
|
||||
"0.6.33": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
26
manifests/cargo-llvm-cov.json
generated
26
manifests/cargo-llvm-cov.json
generated
@@ -19,10 +19,32 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0](https://github.com/taiki-e/cargo-llvm-cov/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-llvm-cov/blob/main/LICENSE-MIT)",
|
||||
"latest": {
|
||||
"version": "0.6.15"
|
||||
"version": "0.6.16"
|
||||
},
|
||||
"0.6": {
|
||||
"version": "0.6.15"
|
||||
"version": "0.6.16"
|
||||
},
|
||||
"0.6.16": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD364B5D41374E",
|
||||
"checksum": "2145d09b8263ba8bdf32f362919e0e2bb8170404bf6edd380b7b442f9017df58"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD364B96067E67",
|
||||
"checksum": "337c619978c7595113353db5775cf953052aba85746f884085e31d2757a03e87"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD364BA6E069FE",
|
||||
"checksum": "39f9ee12b9673f081bee6b250a186fbf438bb3f4b8897417d23ee74b199e02ce"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD364B61561F48",
|
||||
"checksum": "02a3a2d9c5de145319bd01f7ae63b6a76f0b57229887859a79b9fc0f57978b33"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD364B8C4E0B3B",
|
||||
"checksum": "f1ab5f573d6c49d463f8117501462e2a6a0cead9124b68b4a2fbd8a3f5aad7ba"
|
||||
}
|
||||
},
|
||||
"0.6.15": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
22
manifests/cargo-make.json
generated
22
manifests/cargo-make.json
generated
@@ -20,10 +20,28 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0](https://github.com/sagiegurari/cargo-make/blob/master/LICENSE)",
|
||||
"latest": {
|
||||
"version": "0.37.23"
|
||||
"version": "0.37.24"
|
||||
},
|
||||
"0.37": {
|
||||
"version": "0.37.23"
|
||||
"version": "0.37.24"
|
||||
},
|
||||
"0.37.24": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD37D36A8C5F07",
|
||||
"checksum": "ff76969f0caab39c56d168b94b2540fde34609aa6562d555081818ece387b005"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD37D2ECB9F67A",
|
||||
"checksum": "afd10db16ce089e0208d4829d46351833d9eb61f3181452a38a2a089bafedc31"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD37D379E8369F",
|
||||
"checksum": "f7c757c7e147023ac86d80b134e5a59e0ed8ff032e39be3464cc4aad1e5e0f33"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD37D2EB99C51D",
|
||||
"checksum": "823fe51d2baa5679a5dfd33c703d0176374f8f023a2ee950f2e03dc4f31ee523"
|
||||
}
|
||||
},
|
||||
"0.37.23": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
27
manifests/cargo-nextest.json
generated
27
manifests/cargo-nextest.json
generated
@@ -19,10 +19,33 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0](https://github.com/nextest-rs/nextest/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/nextest-rs/nextest/blob/main/LICENSE-MIT)",
|
||||
"latest": {
|
||||
"version": "0.9.87"
|
||||
"version": "0.9.88"
|
||||
},
|
||||
"0.9": {
|
||||
"version": "0.9.87"
|
||||
"version": "0.9.88"
|
||||
},
|
||||
"0.9.88": {
|
||||
"previous_stable_version": "0.9.87",
|
||||
"x86_64_linux_gnu": {
|
||||
"etag": "0x8DD35B614AADEF1",
|
||||
"checksum": "6fdb196e5643d50cad6daeefea5c978fff4904f5593eecba472f5ea3150e2aa0"
|
||||
},
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD35B63691ECBA",
|
||||
"checksum": "6fd7676908b4211f12f6298726544509fcb8c6b49a74bacb755d002260b3172c"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD35B6411A656E",
|
||||
"checksum": "fe12274625473fe3c9895e28550364fb0afd1faea4e222c36a79b0c1ce1933ae"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD35B657950DD1",
|
||||
"checksum": "ddc050a9c52db279bc2a532edf374633c27fb04a4cff679e574a6a19171d6d99"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"etag": "0x8DD35B62BE93E0B",
|
||||
"checksum": "040c1fd58f8853a2104f64c2cc1e7c66bfb48b72637ab1e72027375672d94b6c"
|
||||
}
|
||||
},
|
||||
"0.9.87": {
|
||||
"previous_stable_version": "0.9.86",
|
||||
|
||||
26
manifests/cargo-tarpaulin.json
generated
26
manifests/cargo-tarpaulin.json
generated
@@ -19,10 +19,32 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/xd009642/tarpaulin/blob/develop/LICENSE-MIT) OR [Apache-2.0](https://github.com/xd009642/tarpaulin/blob/develop/LICENSE-APACHE)",
|
||||
"latest": {
|
||||
"version": "0.31.4"
|
||||
"version": "0.31.5"
|
||||
},
|
||||
"0.31": {
|
||||
"version": "0.31.4"
|
||||
"version": "0.31.5"
|
||||
},
|
||||
"0.31.5": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD36405804CBF3",
|
||||
"checksum": "a5f2fdf67023775444c95afe5f0c190885944ca91250d39ac03788924eaa486d"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD3640173A9B5F",
|
||||
"checksum": "8376c76c9d16f35ea0358d3683a4cfc638286eabf7fe12acdb31c4efb4ebeb6b"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD3640D5D46201",
|
||||
"checksum": "96d93282bcd9c8e52fbe1dab2dff023512f198b5f0cff375c2fbce12fd978c5e"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD364052DB3E9D",
|
||||
"checksum": "b371cd0b30c8b7ae86badb9d92965acd740baa3412e11975cfb2ed54dc1b8130"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD364041B7A438",
|
||||
"checksum": "476cd4eafea7ebaa21eb560dcd708cf412090214df17a45703c6454a88727cf1"
|
||||
}
|
||||
},
|
||||
"0.31.4": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
30
manifests/cargo-udeps.json
generated
30
manifests/cargo-udeps.json
generated
@@ -32,10 +32,36 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0 OR MIT](https://github.com/est31/cargo-udeps/blob/HEAD/LICENSE)",
|
||||
"latest": {
|
||||
"version": "0.1.53"
|
||||
"version": "0.1.54"
|
||||
},
|
||||
"0.1": {
|
||||
"version": "0.1.53"
|
||||
"version": "0.1.54"
|
||||
},
|
||||
"0.1.54": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD31143C857BA5",
|
||||
"checksum": "866b51683487d8aa69a59e7b7728e3f6d302388eda40db8816943d14d30fbc42"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD31146F76A8A8",
|
||||
"checksum": "9bf127b7f9bacc54eaf8f1a764d6458530c7df6bce782ec4b8cba034c6bfd36c"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD3114B71A7832",
|
||||
"checksum": "c34dc47902d3b9dadf567808ecab19863ab0bd01c039c0cca5df938efd59eb79"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD311439500EB5",
|
||||
"checksum": "69a061b2f3111fefcc7bfe3d0cc927c54dcd2f5f6db0cfe15277bdb9bc17e925"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD311411580373",
|
||||
"checksum": "36b225eaf938c4520578cfa77471bd05e9f4a09067ee4fee545ddf63e6dbfba4"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DD3114D12BF7AC",
|
||||
"checksum": "0257ad2d653751c94828ee27cec916f8297681954ea51907d10c7e2a4cdea155"
|
||||
}
|
||||
},
|
||||
"0.1.53": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
212
manifests/editorconfig-checker.json
generated
212
manifests/editorconfig-checker.json
generated
@@ -1,143 +1,283 @@
|
||||
{
|
||||
"rust_crate": null,
|
||||
"template": {
|
||||
"template": null,
|
||||
"license_markdown": "[MIT](https://github.com/editorconfig-checker/editorconfig-checker/blob/main/LICENSE)",
|
||||
"latest": {
|
||||
"version": "3.1.2"
|
||||
},
|
||||
"3": {
|
||||
"version": "3.1.2"
|
||||
},
|
||||
"3.1": {
|
||||
"version": "3.1.2"
|
||||
},
|
||||
"3.1.2": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-linux-amd64.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DD31C3802BB3A5",
|
||||
"checksum": "3fd4fc81e5077f89faddb71ff05a5d6e2983b8c3953d1b1b6663c7245300e653",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-darwin-amd64.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DD31C37FF6AE95",
|
||||
"checksum": "f9077b2bbf93db1e7019cc35a567aa80937cd5680cf8453ed00f3eb47e9feea4",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-windows-amd64.exe.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-windows-amd64.zip",
|
||||
"etag": "0x8DD31C380C87BA2",
|
||||
"checksum": "58ced741383e4e8d68aeeda4c2a6c08deb52e45fbb3a5a976c52f161b62b8032",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-linux-arm64.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DD31C38037B40E",
|
||||
"checksum": "1333275ced71f1814db1ae677681a1b8b9d412d7046675594f7cdb1f8c7c47d1",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-darwin-arm64.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DD31C37FF9B85E",
|
||||
"checksum": "ca7ad4492a3235d853662dec88485073a01a782e121e308336832a14b95a765d",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v${version}/ec-windows-arm64.exe.tar.gz",
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.2/ec-windows-arm64.zip",
|
||||
"etag": "0x8DD31C3814F3C50",
|
||||
"checksum": "af97bc69a6f6283818aa32788d8d6d884aafb1a30b939a7e9930a812dd30c75e",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/editorconfig-checker/editorconfig-checker/blob/main/LICENSE)",
|
||||
"latest": {
|
||||
"version": "3.0.3"
|
||||
"3.1.1": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DD30098E5600DE",
|
||||
"checksum": "d750eebd0b296e1f2aa8e900f4fcc2e248e9638bd1bf9e858203ee236a21de00",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DD30098E51E6C5",
|
||||
"checksum": "b414347a24fae1bdb88d7504dd5ffb69fcd9c7894eadc1a8c9124666388fd121",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-windows-amd64.zip",
|
||||
"etag": "0x8DD30098E9B475F",
|
||||
"checksum": "a6a7340365f51ab37a665e79d2cfeca46d25065b95ee01061abeb7ef666bc9b8",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DD30098E7918D1",
|
||||
"checksum": "f7cbdfd08704b8ab83f5b48ab6c8354d4aef01c408ab8c181c6d571bc1a4e24a",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DD30098ED2BACB",
|
||||
"checksum": "44115eaef1c0b5d9ca09bbd7c7e3afadfe2ff14b8c04251eceb055163623f93f",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.1/ec-windows-arm64.zip",
|
||||
"etag": "0x8DD30098EE0B4BA",
|
||||
"checksum": "c028558c17100d89ff9a8a4c2b2fb75ae1047aa9431601679d66f37d581ccfc5",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"version": "3.0.3"
|
||||
"3.1.0": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DD2FEB7A3F6836",
|
||||
"checksum": "43158e9de5ff5c22b1e972440d830511621dbd2c3b8a57878896c7bd26032dde",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DD2FEB7A06E4AA",
|
||||
"checksum": "f75ca35ec49b839997b26f1ccfe5b87f912217fdbe2b80992c8fac159c18e36c",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-windows-amd64.zip",
|
||||
"etag": "0x8DD2FEB79ABBDF1",
|
||||
"checksum": "98570ba73976e756e8312530fed2d6caa0a1510d9552530a0e18f127df1ed186",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DD2FEB796602D4",
|
||||
"checksum": "3ac92a540367ccc24c07fd0cfcf00128d93f47c22efcd504bbbcbf5df5040686",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DD2FEB79FF253A",
|
||||
"checksum": "29cf6e46df2efad7878ed28ba251a329a2a51b0570cb49e0a97bfd252a32d28a",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.1.0/ec-windows-arm64.zip",
|
||||
"etag": "0x8DD2FEB7A7B6A3D",
|
||||
"checksum": "84b9f74cee3074e95aa361344c88f3b0d0628a72fcf86d413cc651f9c49415c8",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"3.0": {
|
||||
"version": "3.0.3"
|
||||
},
|
||||
"3.0.3": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DC9B4F6F214767",
|
||||
"checksum": "fc698b0bf5bca0d42e28dd59d72e25487a51f645ca242c5f74bae975369f16aa"
|
||||
"checksum": "fc698b0bf5bca0d42e28dd59d72e25487a51f645ca242c5f74bae975369f16aa",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DC9B4F53C6A5D4",
|
||||
"checksum": "34bb2f4f34c4909b4ff415a5054ed47a6162f4e03857bdf2cfd7d166bbc91ce0"
|
||||
"checksum": "34bb2f4f34c4909b4ff415a5054ed47a6162f4e03857bdf2cfd7d166bbc91ce0",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-windows-amd64.exe.tar.gz",
|
||||
"etag": "0x8DC9B4FAFC7A9F3",
|
||||
"checksum": "97d7b0530a172e49310010408286176665bbeedf6b38058ac3f125409c3a3b82"
|
||||
"checksum": "97d7b0530a172e49310010408286176665bbeedf6b38058ac3f125409c3a3b82",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DC9B4F74C548E5",
|
||||
"checksum": "d5991ae92170af79ec2052840176bf155d00eaf6eb5a2c8ffbf46f6378c21776"
|
||||
"checksum": "d5991ae92170af79ec2052840176bf155d00eaf6eb5a2c8ffbf46f6378c21776",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DC9B4F56839C1F",
|
||||
"checksum": "70b7f80dbfa89454dfa68f40c5d2f871bd8c311f01c822f78455b94536d87995"
|
||||
"checksum": "70b7f80dbfa89454dfa68f40c5d2f871bd8c311f01c822f78455b94536d87995",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.3/ec-windows-arm64.exe.tar.gz",
|
||||
"etag": "0x8DC9B4FB58861E0",
|
||||
"checksum": "6561c4a34c9e7df7e3f5abfaed5bbe5e43317db222b637f4b3a6d8e298120384"
|
||||
"checksum": "6561c4a34c9e7df7e3f5abfaed5bbe5e43317db222b637f4b3a6d8e298120384",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"3.0.2": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DC9A9036E834A7",
|
||||
"checksum": "2f11b26b34d97f07120038bf517af029b99f90fe96b77369fd66a301ab7a557e"
|
||||
"checksum": "2f11b26b34d97f07120038bf517af029b99f90fe96b77369fd66a301ab7a557e",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DC9A901B300824",
|
||||
"checksum": "8e935c86dc9c8b4156ae96292b7f490b73cb8c50a3ab3943792dcbe6b7474764"
|
||||
"checksum": "8e935c86dc9c8b4156ae96292b7f490b73cb8c50a3ab3943792dcbe6b7474764",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-windows-amd64.exe.tar.gz",
|
||||
"etag": "0x8DC9A9078A4F62F",
|
||||
"checksum": "74ecb356917a55ad4276b09ae2cd0fe28ab8878121c5173a35b5acadd50e7bf1"
|
||||
"checksum": "74ecb356917a55ad4276b09ae2cd0fe28ab8878121c5173a35b5acadd50e7bf1",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DC9A903C7370B0",
|
||||
"checksum": "8836eabc57daf4717b55ae2ce002469f8a14123c2129b7a9cf0597c98acfe928"
|
||||
"checksum": "8836eabc57daf4717b55ae2ce002469f8a14123c2129b7a9cf0597c98acfe928",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DC9A901E0A289A",
|
||||
"checksum": "0eb627ea862b81c7645052a142fc0ff882fe491aad040a8be6a80f2d36a8635f"
|
||||
"checksum": "0eb627ea862b81c7645052a142fc0ff882fe491aad040a8be6a80f2d36a8635f",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.2/ec-windows-arm64.exe.tar.gz",
|
||||
"etag": "0x8DC9A907E6D6B4A",
|
||||
"checksum": "3eb2ea381ad5c621f41a8c1bd2fc9312b5aabfa904078f4a4875302f4a8434ec"
|
||||
"checksum": "3eb2ea381ad5c621f41a8c1bd2fc9312b5aabfa904078f4a4875302f4a8434ec",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"3.0.1": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DC54967F3BEFBA",
|
||||
"checksum": "debda88bcf5048280101b743b3104732650c8b49a2a017ed815481c817cfe13f"
|
||||
"checksum": "debda88bcf5048280101b743b3104732650c8b49a2a017ed815481c817cfe13f",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DC549663BF24F5",
|
||||
"checksum": "9e4b4e1340e905bfe0b993fe1343e95e0714eb8b715e35608018a8420866a60e"
|
||||
"checksum": "9e4b4e1340e905bfe0b993fe1343e95e0714eb8b715e35608018a8420866a60e",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-windows-amd64.exe.tar.gz",
|
||||
"etag": "0x8DC5496CCD13EDB",
|
||||
"checksum": "902556a8558108f910834f3e116f778e4a6710dbc74f79a065039ea52abe4d25"
|
||||
"checksum": "902556a8558108f910834f3e116f778e4a6710dbc74f79a065039ea52abe4d25",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DC549684C470C1",
|
||||
"checksum": "59de9965c7b2629112b158bedff3f132115bd53fd14e3b477cc3a5fc77233e6b"
|
||||
"checksum": "59de9965c7b2629112b158bedff3f132115bd53fd14e3b477cc3a5fc77233e6b",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DC54966905DDEE",
|
||||
"checksum": "d7f0d4fbc05cee0afcb7debc130f2dd133fbd2a03ba80efa0d21fd19d774bf1b"
|
||||
"checksum": "d7f0d4fbc05cee0afcb7debc130f2dd133fbd2a03ba80efa0d21fd19d774bf1b",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.1/ec-windows-arm64.exe.tar.gz",
|
||||
"etag": "0x8DC5496CEA80BFE",
|
||||
"checksum": "b845ef4cd75fe76233f5537111bf24f9aeb3fc69f0aa90a4ebf306ad8028aa08"
|
||||
"checksum": "b845ef4cd75fe76233f5537111bf24f9aeb3fc69f0aa90a4ebf306ad8028aa08",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
},
|
||||
"3.0.0": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-linux-amd64.tar.gz",
|
||||
"etag": "0x8DC3C3FCCBF9621",
|
||||
"checksum": "8e2f3c5fa4891542535185a4859c5f92832bc11821eb03a081bc6bd87af5a829"
|
||||
"checksum": "8e2f3c5fa4891542535185a4859c5f92832bc11821eb03a081bc6bd87af5a829",
|
||||
"bin": "bin/ec-linux-amd64"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-darwin-amd64.tar.gz",
|
||||
"etag": "0x8DC3C3FC9D55B3A",
|
||||
"checksum": "d331806227c1a1ed96ddd34eceac51bd1cef0121f78bdb09d509771f6e5aec79"
|
||||
"checksum": "d331806227c1a1ed96ddd34eceac51bd1cef0121f78bdb09d509771f6e5aec79",
|
||||
"bin": "bin/ec-darwin-amd64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-windows-amd64.exe.tar.gz",
|
||||
"etag": "0x8DC3C3FD475C8CB",
|
||||
"checksum": "ff171ef63361bbd783622ba778a83e6fe5d6615e8b9e9e9c2f2c177e89dba499"
|
||||
"checksum": "ff171ef63361bbd783622ba778a83e6fe5d6615e8b9e9e9c2f2c177e89dba499",
|
||||
"bin": "bin/ec-windows-amd64.exe"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-linux-arm64.tar.gz",
|
||||
"etag": "0x8DC3C3FD0E61D19",
|
||||
"checksum": "edf1d12ba1e6ff70090f063e7937081b49ba6007cd02e45f8329bbf965ed609e"
|
||||
"checksum": "edf1d12ba1e6ff70090f063e7937081b49ba6007cd02e45f8329bbf965ed609e",
|
||||
"bin": "bin/ec-linux-arm64"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-darwin-arm64.tar.gz",
|
||||
"etag": "0x8DC3C3FC9B59AE9",
|
||||
"checksum": "35324d5914d147cb51859e49c48909cef22ae448fca407b9d39f95dcc77be109"
|
||||
"checksum": "35324d5914d147cb51859e49c48909cef22ae448fca407b9d39f95dcc77be109",
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/editorconfig-checker/editorconfig-checker/releases/download/v3.0.0/ec-windows-arm64.exe.tar.gz",
|
||||
"etag": "0x8DC3C3FD4E1CCA2",
|
||||
"checksum": "40b382a225a345e28f575010b637a372eb004ba3f1544341df0fbc265d183ff6"
|
||||
"checksum": "40b382a225a345e28f575010b637a372eb004ba3f1544341df0fbc265d183ff6",
|
||||
"bin": "bin/ec-windows-arm64.exe"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
30
manifests/knope.json
generated
30
manifests/knope.json
generated
@@ -3,10 +3,36 @@
|
||||
"template": null,
|
||||
"license_markdown": "[MIT](https://github.com/knope-dev/knope/blob/main/LICENSE)",
|
||||
"latest": {
|
||||
"version": "0.18.1"
|
||||
"version": "0.18.2"
|
||||
},
|
||||
"0.18": {
|
||||
"version": "0.18.1"
|
||||
"version": "0.18.2"
|
||||
},
|
||||
"0.18.2": {
|
||||
"x86_64_linux_musl": {
|
||||
"url": "https://github.com/knope-dev/knope/releases/download/knope/v0.18.2/knope-x86_64-unknown-linux-musl.tgz",
|
||||
"etag": "0x8DD2ACDFF5567F8",
|
||||
"checksum": "c43e040643cc16f14a70444d79dcf4e9c4eaa896664f598005386637c2534e6f",
|
||||
"bin": "knope-x86_64-unknown-linux-musl/knope"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/knope-dev/knope/releases/download/knope/v0.18.2/knope-x86_64-apple-darwin.tgz",
|
||||
"etag": "0x8DD2ACDFF51C290",
|
||||
"checksum": "f9cc757233467e192a0904f2e9c2ef5aa1a7e715235b98520af33fd986d115f2",
|
||||
"bin": "knope-x86_64-apple-darwin/knope"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/knope-dev/knope/releases/download/knope/v0.18.2/knope-x86_64-pc-windows-msvc.tgz",
|
||||
"etag": "0x8DD2ACDFF558EDB",
|
||||
"checksum": "0e5775244e10a7e9de89be4f0f485e23bfa6c98ad008b85d54a1235b4e7bd123",
|
||||
"bin": "knope-x86_64-pc-windows-msvc/knope.exe"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/knope-dev/knope/releases/download/knope/v0.18.2/knope-aarch64-apple-darwin.tgz",
|
||||
"etag": "0x8DD2ACDFF4E6AFA",
|
||||
"checksum": "ff35f72455a498e9a407b483c1d6ddb962f6ae31b1989db6dfc09e88da270b3b",
|
||||
"bin": "knope-aarch64-apple-darwin/knope"
|
||||
}
|
||||
},
|
||||
"0.18.1": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
33
manifests/protoc.json
generated
33
manifests/protoc.json
generated
@@ -3,13 +3,40 @@
|
||||
"template": null,
|
||||
"license_markdown": "[BSD-3-Clause](https://github.com/protocolbuffers/protobuf/blob/HEAD/LICENSE)",
|
||||
"latest": {
|
||||
"version": "3.29.2"
|
||||
"version": "3.29.3"
|
||||
},
|
||||
"3": {
|
||||
"version": "3.29.2"
|
||||
"version": "3.29.3"
|
||||
},
|
||||
"3.29": {
|
||||
"version": "3.29.2"
|
||||
"version": "3.29.3"
|
||||
},
|
||||
"3.29.3": {
|
||||
"x86_64_linux_gnu": {
|
||||
"url": "https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-linux-x86_64.zip",
|
||||
"etag": "0x8DD3027A46B7D11",
|
||||
"checksum": "3e866620c5be27664f3d2fa2d656b5f3e09b5152b42f1bedbf427b333e90021a"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-osx-x86_64.zip",
|
||||
"etag": "0x8DD3027A4A7CD08",
|
||||
"checksum": "9a788036d8f9854f7b03c305df4777cf0e54e5b081e25bf15252da87e0e90875"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-win64.zip",
|
||||
"etag": "0x8DD3027A4D31921",
|
||||
"checksum": "57ea59e9f551ad8d71ffaa9b5cfbe0ca1f4e720972a1db7ec2d12ab44bff9383"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"url": "https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-linux-aarch_64.zip",
|
||||
"etag": "0x8DD3027A41A3612",
|
||||
"checksum": "6427349140e01f06e049e707a58709a4f221ae73ab9a0425bc4a00c8d0e1ab32"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protoc-29.3-osx-aarch_64.zip",
|
||||
"etag": "0x8DD3027A47D6A3C",
|
||||
"checksum": "2b8a3403cd097f95f3ba656e14b76c732b6b26d7f183330b11e36ef2bc028765"
|
||||
}
|
||||
},
|
||||
"3.29.2": {
|
||||
"x86_64_linux_gnu": {
|
||||
|
||||
33
manifests/rclone.json
generated
33
manifests/rclone.json
generated
@@ -28,10 +28,39 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/rclone/rclone/blob/master/COPYING)",
|
||||
"latest": {
|
||||
"version": "1.68.2"
|
||||
"version": "1.69.0"
|
||||
},
|
||||
"1": {
|
||||
"version": "1.68.2"
|
||||
"version": "1.69.0"
|
||||
},
|
||||
"1.69": {
|
||||
"version": "1.69.0"
|
||||
},
|
||||
"1.69.0": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD3324F9F9FD71",
|
||||
"checksum": "813892bb54ebc5891664b85c9cfc0e05ee50d39e3d5bb1ddd6d53d0f93a64dc2"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD3325E8440A19",
|
||||
"checksum": "88475be8666944d5161bd15605d483f1bb55d9a46220b9dcf317b26e01659009"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD3326252ADAAD",
|
||||
"checksum": "73f55188dbd15056b9728cb646f4e9774534b148dec3eed9ccbbaa381b95ce78"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD33251C72E345",
|
||||
"checksum": "82e4c24ee0cdbdfb93356e66cf14875ae4063f9923d2678e7d686119e98d75fe"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD3325F16EC073",
|
||||
"checksum": "d8d22aca8f4af4c24ea01668a452d02888bef45e3a01c663cbb7d78bd1e21db2"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DD33262D4C7710",
|
||||
"checksum": "83c3e46f1b4414848cf676f58aa3f14ee428ba22bd963ecb0b70dada717ebfdb"
|
||||
}
|
||||
},
|
||||
"1.68": {
|
||||
"version": "1.68.2"
|
||||
|
||||
30
manifests/release-plz.json
generated
30
manifests/release-plz.json
generated
@@ -22,10 +22,36 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/release-plz/release-plz/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/release-plz/release-plz/blob/main/LICENSE-APACHE)",
|
||||
"latest": {
|
||||
"version": "0.3.112"
|
||||
"version": "0.3.113"
|
||||
},
|
||||
"0.3": {
|
||||
"version": "0.3.112"
|
||||
"version": "0.3.113"
|
||||
},
|
||||
"0.3.113": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD34DE89D16C19",
|
||||
"checksum": "581dc963e0aaf1791064429e9f746307ede0a8ea29d10041dd90c02bdbd13783"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD34DF8889BC58",
|
||||
"checksum": "0811c988fda4552a31a8ab90776100e31bf8bb987f9337d05dc3dc92669848f4"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD34DF81C2F907",
|
||||
"checksum": "68da2a1aba802069e5c59e42017f5e589f44e66d6105528893b294f1b296b916"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD34DE988E8048",
|
||||
"checksum": "01a1d2fa25811aa2e9e008fc9edf9ae3128b686c5e5f9a2c774fe7dc37346c27"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD34E03A6691B8",
|
||||
"checksum": "f0f23f958541440f4f9669580ae04500feaaad2cdbfee3636a14729236d04e64"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DD34DF694608E7",
|
||||
"checksum": "8236943701c7f2ce2fa7c99f6f65392543fd6293fe7cb30878b17c171078ae48"
|
||||
}
|
||||
},
|
||||
"0.3.112": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
26
manifests/sccache.json
generated
26
manifests/sccache.json
generated
@@ -24,10 +24,32 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0](https://github.com/mozilla/sccache/blob/main/LICENSE)",
|
||||
"latest": {
|
||||
"version": "0.9.0"
|
||||
"version": "0.9.1"
|
||||
},
|
||||
"0.9": {
|
||||
"version": "0.9.0"
|
||||
"version": "0.9.1"
|
||||
},
|
||||
"0.9.1": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2EF9E3F7EE20",
|
||||
"checksum": "911f611db54e48dc50c32232462a99848824be5ba0f6f52cc33903712cd78715"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD2EF9E2CF88D7",
|
||||
"checksum": "14495d2db913d4d0e1ab4b44a3e1d2c3d44693a5a405deb5a1b5c05e8f34af37"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD2EF9E361AE78",
|
||||
"checksum": "12578536fc5e3de6c385eb4b56d0537ebeb21b9a221242833624572b71910049"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD2EF9E118A350",
|
||||
"checksum": "a0f10f7daeeecb3439d6e903bc5dc4a4ccee67985b506d3daf742521efe45627"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2EF9DFE5C27C",
|
||||
"checksum": "a2725e27c12961301834fe4c56ab982af6e8eb86fd51b82179369f1682776800"
|
||||
}
|
||||
},
|
||||
"0.9.0": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
60
manifests/typos.json
generated
60
manifests/typos.json
generated
@@ -16,13 +16,67 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/crate-ci/typos/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/crate-ci/typos/blob/master/LICENSE-APACHE)",
|
||||
"latest": {
|
||||
"version": "1.29.0"
|
||||
"version": "1.29.4"
|
||||
},
|
||||
"1": {
|
||||
"version": "1.29.0"
|
||||
"version": "1.29.4"
|
||||
},
|
||||
"1.29": {
|
||||
"version": "1.29.0"
|
||||
"version": "1.29.4"
|
||||
},
|
||||
"1.29.4": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2BFEF497C99A",
|
||||
"checksum": "5eebaff491e2d503b225751e461bcba849efc19c6075f780b45887920a2e3506"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD2BFF38DE029E",
|
||||
"checksum": "8f4b7d97ea6bf5ed1e9f4545cab39886373b07766a00edbef10de2f567d3762e"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD2BFF400FE29A",
|
||||
"checksum": "bac4aef428259aca9c99286d99921dc09da6032afc6d54ba0334615991adbb26"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2BFF45584668",
|
||||
"checksum": "8701cd7ed32c61dda3fe5fbd5516d63d5daeecb377ac0d1cc149d9e88ff87975"
|
||||
}
|
||||
},
|
||||
"1.29.3": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2B6BB018B914",
|
||||
"checksum": "bf8f18721055483eae9420c424ae28fe11b8881278ac060e65566f3b65cdcfa8"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD2B6C237CC2A5",
|
||||
"checksum": "5e5f52a23c36e4ff06194f690c874a52a8a07d113f2b906ad29424614057c1a5"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD2B6C6C818914",
|
||||
"checksum": "462bf6b62a49c65860ae57a11c332f8dbaeaddc0384c5f5f8225af31c83dbd5b"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2B6BF6D405F3",
|
||||
"checksum": "fb1ad842dcd06a79048ff6a6d3be64e79729a9a14b954638d709f759431d6df6"
|
||||
}
|
||||
},
|
||||
"1.29.1": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2B44978440AE",
|
||||
"checksum": "f4d9630c51bdf9398ebcd70bee485302eb14b9e4ddf1f8101deab8d30621ffda"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD2B44B0A26BB5",
|
||||
"checksum": "33002029990b5645fe9a541fa321a2bb053894b776f57435b6a75ad1854ad007"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD2B4504BFD839",
|
||||
"checksum": "35829b5ce8c5194aa3bdc93ccfe86b70555dffa6074174c85c21f5569361ce11"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2B44B4B50C21",
|
||||
"checksum": "264ceb033679b7a5c8d5647f3b1c0f0c5cdb8fbf0454dd83bdb94f2fd0e03d5e"
|
||||
}
|
||||
},
|
||||
"1.29.0": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
26
manifests/wasm-bindgen.json
generated
26
manifests/wasm-bindgen.json
generated
@@ -44,10 +44,32 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/rustwasm/wasm-bindgen/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/rustwasm/wasm-bindgen/blob/main/LICENSE-APACHE)",
|
||||
"latest": {
|
||||
"version": "0.2.99"
|
||||
"version": "0.2.100"
|
||||
},
|
||||
"0.2": {
|
||||
"version": "0.2.99"
|
||||
"version": "0.2.100"
|
||||
},
|
||||
"0.2.100": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD335FEBC3B912",
|
||||
"checksum": "63d6a38deb65bd7023c02bdf382ab66b0d2c0241c8582fd3413b5a808b8aeb5b"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD335FEBCF929E",
|
||||
"checksum": "72289c54f63d2a2723aacfb38e7b22044d6aebc849ddee40172cda0e74be4107"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD335FEBB4D5B6",
|
||||
"checksum": "54a3fb947464388a468ade86d65ffa334d6d2c74b7982723b34ecf6ec8c213d8"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"etag": "0x8DD335FEBC31D7D",
|
||||
"checksum": "52552984965fbd125efc6be052b3cb8872fb3c69559e4ec7775cbff64ed440cf"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD335FEBB9B239",
|
||||
"checksum": "69f25cb910de7e19777b3f93347f5e62a64c8f81709b41ba7242d00a9543573c"
|
||||
}
|
||||
},
|
||||
"0.2.99": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
32
manifests/wasmtime.json
generated
32
manifests/wasmtime.json
generated
@@ -28,13 +28,39 @@
|
||||
},
|
||||
"license_markdown": "[Apache-2.0 WITH LLVM-exception](https://github.com/bytecodealliance/wasmtime/blob/main/LICENSE)",
|
||||
"latest": {
|
||||
"version": "28.0.0"
|
||||
"version": "28.0.1"
|
||||
},
|
||||
"28": {
|
||||
"version": "28.0.0"
|
||||
"version": "28.0.1"
|
||||
},
|
||||
"28.0": {
|
||||
"version": "28.0.0"
|
||||
"version": "28.0.1"
|
||||
},
|
||||
"28.0.1": {
|
||||
"x86_64_linux_gnu": {
|
||||
"etag": "0x8DD34F2BB0BD3D7",
|
||||
"checksum": "f2500c046d92d68c5db66244e8685d0ba84a0fdce4780fb0f1e78e9666d9c920"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD34F2BBCD5FF0",
|
||||
"checksum": "872c6d078f6ac1058be6f0f5219001b0e445aa00f96fc4c1242548701d9933b5"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD34F2BEBC9FE0",
|
||||
"checksum": "b6564429cb6a0e930465204da11ae66e717508358e737d491eaa095b4a85792e"
|
||||
},
|
||||
"aarch64_linux_gnu": {
|
||||
"etag": "0x8DD34F2B4A33B3D",
|
||||
"checksum": "d18d05ad1482b8a0fa5040e2d4a9576a06c9b61890fac2d4a2e0824e3b308a7a"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD34F2B555486E",
|
||||
"checksum": "0dc360747b46d0632e1d9d81299ed653ce5d31f43247780c6c20af2a3f4ad67c"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DD34F2B635AB9D",
|
||||
"checksum": "db3a8bbccb56a05a62fd3dfc4936ea396558f0a1ae6ffe4eee66e7b15a6230f2"
|
||||
}
|
||||
},
|
||||
"28.0.0": {
|
||||
"x86_64_linux_gnu": {
|
||||
|
||||
26
manifests/xh.json
generated
26
manifests/xh.json
generated
@@ -24,10 +24,32 @@
|
||||
},
|
||||
"license_markdown": "[MIT](https://github.com/ducaale/xh/blob/master/LICENSE)",
|
||||
"latest": {
|
||||
"version": "0.23.0"
|
||||
"version": "0.23.1"
|
||||
},
|
||||
"0.23": {
|
||||
"version": "0.23.0"
|
||||
"version": "0.23.1"
|
||||
},
|
||||
"0.23.1": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DD2B233BDE1B21",
|
||||
"checksum": "a29ed6afcabf2c575c24499397fa3a840047dffc4a68e4a1a886f22584712946"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DD2B2368C2662C",
|
||||
"checksum": "e9e0f97e16095d2afb7e9247e6d250c95673dc3305a05539aafc2506ab59ad0a"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DD2B2378B25C5D",
|
||||
"checksum": "ea2da950b69c1093c1c2f7293fa1bc75cd7ae5719ff23397ee985bf1995a8014"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DD2B2336F9AF21",
|
||||
"checksum": "52654b727a7a9dd712afaa40f4b6d3127079b9d95c24ee7a96e477941e5ca751"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DD2B230558D457",
|
||||
"checksum": "849841ce3c05cd64405d6282298869185a806b4f008ab5c6809fb8700e985f01"
|
||||
}
|
||||
},
|
||||
"0.23.0": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
@@ -1,45 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -eEuo pipefail
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
cd "$(dirname "$0")"/../..
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/../..
|
||||
|
||||
bail() {
|
||||
echo >&2 "error: $*"
|
||||
exit 1
|
||||
printf >&2 'error: %s\n' "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ -z "${CI:-}" ]]; then
|
||||
bail "this script is intended to call from release workflow on CI"
|
||||
bail "this script is intended to call from release workflow on CI"
|
||||
fi
|
||||
|
||||
git config user.name "Taiki Endo"
|
||||
git config user.email "te316e89@gmail.com"
|
||||
git config user.name 'Taiki Endo'
|
||||
git config user.email 'te316e89@gmail.com'
|
||||
|
||||
set -x
|
||||
|
||||
has_update=''
|
||||
for manifest in manifests/*.json; do
|
||||
git add -N "${manifest}"
|
||||
if ! git diff --exit-code -- "${manifest}"; then
|
||||
name=$(basename "${manifest%.*}")
|
||||
git stash
|
||||
old_version=$(jq -r '.latest.version' "${manifest}")
|
||||
git stash pop
|
||||
new_version=$(jq -r '.latest.version' "${manifest}")
|
||||
if [[ "${old_version}" != "${new_version}" ]]; then
|
||||
# TODO: If there is a line about updating the same tool in the "Unreleased" section, replace it.
|
||||
msg="Update \`${name}@latest\` to ${new_version}"
|
||||
sed -i "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n- ${msg}./" CHANGELOG.md
|
||||
git add "${manifest}" CHANGELOG.md
|
||||
else
|
||||
msg="Update ${name} manifest"
|
||||
git add "${manifest}"
|
||||
fi
|
||||
git commit -m "${msg}"
|
||||
has_update=1
|
||||
git add -N "${manifest}"
|
||||
if ! git diff --exit-code -- "${manifest}"; then
|
||||
name="${manifest##*/}"
|
||||
name="${name%.*}"
|
||||
git stash
|
||||
old_version=$(jq -r '.latest.version' "${manifest}")
|
||||
git stash pop
|
||||
new_version=$(jq -r '.latest.version' "${manifest}")
|
||||
if [[ "${old_version}" != "${new_version}" ]]; then
|
||||
# TODO: If there is a line about updating the same tool in the "Unreleased" section, replace it.
|
||||
msg="Update \`${name}@latest\` to ${new_version}"
|
||||
sed -Ei "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n- ${msg}./" CHANGELOG.md
|
||||
git add "${manifest}" CHANGELOG.md
|
||||
else
|
||||
msg="Update ${name} manifest"
|
||||
git add "${manifest}"
|
||||
fi
|
||||
git commit -m "${msg}"
|
||||
has_update=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -n "${has_update:-}" ]] && [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
||||
echo "success=false" >>"${GITHUB_OUTPUT}"
|
||||
if [[ -n "${has_update}" ]] && [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
||||
printf 'success=false\n' >>"${GITHUB_OUTPUT}"
|
||||
fi
|
||||
|
||||
@@ -1,176 +1,188 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -eEuo pipefail
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
cd "$(dirname "$0")"/../..
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/../..
|
||||
|
||||
# They don't provide prebuilt binaries for musl or old glibc host.
|
||||
# version `GLIBC_2.34' not found
|
||||
glibc_pre_2_34_incompat=(
|
||||
cargo-cyclonedx
|
||||
cargo-spellcheck
|
||||
wait-for-them
|
||||
xbuild
|
||||
cargo-cyclonedx
|
||||
cargo-spellcheck
|
||||
wait-for-them
|
||||
xbuild
|
||||
)
|
||||
# version `GLIBC_2.31' not found
|
||||
glibc_pre_2_31_incompat=(
|
||||
"${glibc_pre_2_34_incompat[@]}"
|
||||
cargo-sort
|
||||
espup
|
||||
zola
|
||||
"${glibc_pre_2_34_incompat[@]}"
|
||||
cargo-sort
|
||||
espup
|
||||
zola
|
||||
)
|
||||
# version `GLIBC_2.28' not found
|
||||
glibc_pre_2_28_incompat=(
|
||||
"${glibc_pre_2_31_incompat[@]}"
|
||||
wasmtime
|
||||
"${glibc_pre_2_31_incompat[@]}"
|
||||
wasmtime
|
||||
)
|
||||
# version `GLIBC_2.27' not found
|
||||
glibc_pre_2_27_incompat=(
|
||||
"${glibc_pre_2_28_incompat[@]}"
|
||||
cargo-watch
|
||||
mdbook-linkcheck
|
||||
protoc
|
||||
valgrind
|
||||
"${glibc_pre_2_28_incompat[@]}"
|
||||
cargo-watch
|
||||
mdbook-linkcheck
|
||||
protoc
|
||||
valgrind
|
||||
)
|
||||
# version `GLIBC_2.17' not found
|
||||
glibc_pre_2_17_incompat=(
|
||||
"${glibc_pre_2_27_incompat[@]}"
|
||||
deepsource
|
||||
"${glibc_pre_2_27_incompat[@]}"
|
||||
deepsource
|
||||
)
|
||||
musl_incompat=(
|
||||
"${glibc_pre_2_17_incompat[@]}"
|
||||
"${glibc_pre_2_17_incompat[@]}"
|
||||
)
|
||||
win2019_gnu_incompat=(
|
||||
cargo-spellcheck
|
||||
cargo-spellcheck
|
||||
)
|
||||
|
||||
incompat_tools=()
|
||||
case "${1:-}" in
|
||||
'') version=latest ;;
|
||||
major.minor.patch | major.minor | major)
|
||||
version="$1"
|
||||
# Specifying the version of valgrind and cargo-binstall is not supported.
|
||||
incompat_tools+=(valgrind cargo-binstall)
|
||||
;;
|
||||
*)
|
||||
echo "tool=$1"
|
||||
exit 1
|
||||
;;
|
||||
'') version=latest ;;
|
||||
major.minor.patch | major.minor | major)
|
||||
version="$1"
|
||||
# Specifying the version of valgrind and cargo-binstall is not supported.
|
||||
incompat_tools+=(valgrind cargo-binstall)
|
||||
;;
|
||||
*)
|
||||
printf 'tool=%s\n', "$1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
runner="${2:-}"
|
||||
bash="${3:-}"
|
||||
case "$(uname -s)" in
|
||||
Linux)
|
||||
host_os=linux
|
||||
ldd_version=$(ldd --version 2>&1 || true)
|
||||
if grep <<<"${ldd_version}" -q 'musl'; then
|
||||
incompat_tools+=("${musl_incompat[@]}")
|
||||
else
|
||||
host_glibc_version=$(grep -E "GLIBC|GNU libc" <<<"${ldd_version}" | sed "s/.* //g")
|
||||
higher_glibc_version=$(sort -Vu <<<"2.34"$'\n'"${host_glibc_version}" | tail -1)
|
||||
Linux)
|
||||
host_os=linux
|
||||
ldd_version=$(ldd --version 2>&1 || true)
|
||||
if grep -Fq musl <<<"${ldd_version}"; then
|
||||
incompat_tools+=("${musl_incompat[@]}")
|
||||
else
|
||||
host_glibc_version=$(grep -E "GLIBC|GNU libc" <<<"${ldd_version}" | sed "s/.* //g")
|
||||
higher_glibc_version=$(sort -Vu <<<"2.34"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.31"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.28"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.27"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.31"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.28"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.27"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
higher_glibc_version=$(sort -Vu <<<"2.17"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
incompat_tools+=("${glibc_pre_2_17_incompat[@]}")
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_27_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_28_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_31_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_34_incompat[@]}")
|
||||
fi
|
||||
higher_glibc_version=$(sort -Vu <<<"2.17"$'\n'"${host_glibc_version}" | tail -1)
|
||||
if [[ "${higher_glibc_version}" != "${host_glibc_version}" ]]; then
|
||||
incompat_tools+=("${glibc_pre_2_17_incompat[@]}")
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_27_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_28_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_31_incompat[@]}")
|
||||
fi
|
||||
else
|
||||
incompat_tools+=("${glibc_pre_2_34_incompat[@]}")
|
||||
fi
|
||||
if ! type -P snap &>/dev/null; then
|
||||
incompat_tools+=(valgrind)
|
||||
fi
|
||||
fi
|
||||
if ! type -P snap >/dev/null; then
|
||||
incompat_tools+=(valgrind)
|
||||
fi
|
||||
;;
|
||||
Darwin) host_os=macos ;;
|
||||
MINGW* | MSYS* | CYGWIN* | Windows_NT)
|
||||
host_os=windows
|
||||
case "${bash}" in
|
||||
msys64 | cygwin)
|
||||
if [[ "${runner}" == "windows-2019" ]]; then
|
||||
incompat_tools+=("${win2019_gnu_incompat[@]}")
|
||||
fi
|
||||
;;
|
||||
Darwin) host_os=macos ;;
|
||||
MINGW* | MSYS* | CYGWIN* | Windows_NT)
|
||||
host_os=windows
|
||||
case "${bash}" in
|
||||
msys64 | cygwin)
|
||||
if [[ "${runner}" == "windows-2019" ]]; then
|
||||
incompat_tools+=("${win2019_gnu_incompat[@]}")
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*) bail "unrecognized OS type '$(uname -s)'" ;;
|
||||
esac
|
||||
;;
|
||||
*) bail "unrecognized OS type '$(uname -s)'" ;;
|
||||
esac
|
||||
# See main.sh
|
||||
case "$(uname -m)" in
|
||||
aarch64 | arm64) host_arch=aarch64 ;;
|
||||
xscale | arm | armv*l) bail "32-bit Arm runner is not supported yet by this action; if you need support for this platform, please submit an issue at <https://github.com/taiki-e/install-action>" ;;
|
||||
*) host_arch=x86_64 ;;
|
||||
esac
|
||||
|
||||
tools=()
|
||||
for manifest in tools/codegen/base/*.json; do
|
||||
tool_name=$(basename "${manifest%.*}")
|
||||
# cross -V requires rustc
|
||||
if [[ "${tool_name}" == "cross" ]] && ! type -P rustc &>/dev/null; then
|
||||
tool_name="${manifest##*/}"
|
||||
tool_name="${tool_name%.*}"
|
||||
# cross -V requires rustc
|
||||
if [[ "${tool_name}" == "cross" ]] && ! type -P rustc >/dev/null; then
|
||||
continue
|
||||
fi
|
||||
case "${host_os}" in
|
||||
linux*)
|
||||
if [[ "${host_arch}" != "x86_64" ]] && [[ "$(jq -r ".platform.${host_arch}_${host_os}_gnu" "${manifest}")" == "null" ]] && [[ "$(jq -r ".platform.${host_arch}_${host_os}_musl" "${manifest}")" == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [[ "$(jq -r ".platform.x86_64_${host_os}" "${manifest}")" == "null" ]] && [[ "$(jq -r ".platform.${host_arch}_${host_os}" "${manifest}")" == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
for incompat in ${incompat_tools[@]+"${incompat_tools[@]}"}; do
|
||||
if [[ "${incompat}" == "${tool_name}" ]]; then
|
||||
tool_name=''
|
||||
break
|
||||
fi
|
||||
case "${host_os}" in
|
||||
linux*) ;;
|
||||
*)
|
||||
if [[ "$(jq -r ".platform.x86_64_${host_os}" "${manifest}")" == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
for incompat in ${incompat_tools[@]+"${incompat_tools[@]}"}; do
|
||||
if [[ "${incompat}" == "${tool_name}" ]]; then
|
||||
tool_name=''
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ -n "${tool_name}" ]]; then
|
||||
if [[ "${version}" != "latest" ]]; then
|
||||
latest_version=$(jq -r ".latest.version" "manifests/${tool_name}.json")
|
||||
case "${version}" in
|
||||
major.minor.patch) tool_name+="@${latest_version}" ;;
|
||||
major.minor) tool_name+="@${latest_version%.*}" ;;
|
||||
major) tool_name+="@${latest_version%%.*}" ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
if [[ "${tool_name}" != *"@0" ]] && [[ "${tool_name}" != *"@0.0" ]]; then
|
||||
tools+=("${tool_name}")
|
||||
fi
|
||||
done
|
||||
if [[ -n "${tool_name}" ]]; then
|
||||
if [[ "${version}" != "latest" ]]; then
|
||||
latest_version=$(jq -r '.latest.version' "manifests/${tool_name}.json")
|
||||
case "${version}" in
|
||||
major.minor.patch) tool_name+="@${latest_version}" ;;
|
||||
major.minor) tool_name+="@${latest_version%.*}" ;;
|
||||
major) tool_name+="@${latest_version%%.*}" ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
if [[ "${tool_name}" != *"@0" ]] && [[ "${tool_name}" != *"@0.0" ]]; then
|
||||
tools+=("${tool_name}")
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [[ "${version}" != "latest" ]]; then
|
||||
tools_tmp=()
|
||||
for tool in "${tools[@]}"; do
|
||||
tools_tmp+=("${tool}")
|
||||
done
|
||||
tools=("${tools_tmp[@]}")
|
||||
tools_tmp=()
|
||||
for tool in "${tools[@]}"; do
|
||||
tools_tmp+=("${tool}")
|
||||
done
|
||||
tools=("${tools_tmp[@]}")
|
||||
fi
|
||||
|
||||
# Not manifest-based
|
||||
case "${host_os}" in
|
||||
linux*)
|
||||
# Installing snap to container is difficult...
|
||||
# Specifying the version of valgrind is not supported.
|
||||
if type -P snap &>/dev/null && [[ "${version}" == "latest" ]]; then
|
||||
tools+=(valgrind)
|
||||
fi
|
||||
;;
|
||||
linux*)
|
||||
# Installing snap to container is difficult...
|
||||
# Specifying the version of valgrind is not supported.
|
||||
if type -P snap >/dev/null && [[ "${version}" == "latest" ]]; then
|
||||
tools+=(valgrind)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
# cargo-watch/watchexec-cli is supported by cargo-binstall (through quickinstall)
|
||||
case "${version}" in
|
||||
latest) tools+=(cargo-watch watchexec-cli) ;;
|
||||
major.minor.patch) tools+=(cargo-watch@8.5.2 watchexec-cli@2.1.2) ;;
|
||||
major.minor) tools+=(cargo-watch@8.5 watchexec-cli@2.1) ;;
|
||||
major) tools+=(cargo-watch@8 watchexec-cli@2) ;;
|
||||
*) exit 1 ;;
|
||||
latest) tools+=(cargo-watch watchexec-cli) ;;
|
||||
major.minor.patch) tools+=(cargo-watch@8.5.2 watchexec-cli@2.1.2) ;;
|
||||
major.minor) tools+=(cargo-watch@8.5 watchexec-cli@2.1) ;;
|
||||
major) tools+=(cargo-watch@8 watchexec-cli@2) ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
|
||||
# sort and dedup
|
||||
@@ -181,5 +193,5 @@ IFS=$'\n\t'
|
||||
|
||||
# TODO: inject random space before/after of tool name for testing https://github.com/taiki-e/install-action/issues/115.
|
||||
IFS=','
|
||||
echo "tool=${tools[*]}"
|
||||
printf 'tool=%s\n' "${tools[*]}"
|
||||
IFS=$'\n\t'
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
"bin": "bin/ec-darwin-arm64"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"asset_name": "ec-windows-amd64${exe}.tar.gz",
|
||||
"asset_name": ["ec-windows-amd64.zip", "ec-windows-amd64${exe}.tar.gz"],
|
||||
"bin": "bin/ec-windows-amd64${exe}"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"asset_name": "ec-windows-arm64${exe}.tar.gz",
|
||||
"asset_name": ["ec-windows-arm64.zip", "ec-windows-arm64${exe}.tar.gz"],
|
||||
"bin": "bin/ec-windows-arm64${exe}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ use std::{
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
env,
|
||||
ffi::OsStr,
|
||||
io::Read,
|
||||
io::Read as _,
|
||||
path::Path,
|
||||
sync::{LazyLock, RwLock},
|
||||
time::Duration,
|
||||
@@ -17,7 +17,7 @@ use install_action_internal_codegen::{
|
||||
workspace_root, BaseManifest, HostPlatform, Manifest, ManifestDownloadInfo, ManifestRef,
|
||||
ManifestTemplate, ManifestTemplateDownloadInfo, Manifests, Signing, SigningKind, Version,
|
||||
};
|
||||
use sha2::{Digest, Sha256};
|
||||
use sha2::{Digest as _, Sha256};
|
||||
use spdx::expression::{ExprNode, ExpressionReq, Operator};
|
||||
|
||||
fn main() -> Result<()> {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
|
||||
use std::{env, fmt, io::Write, path::PathBuf};
|
||||
use std::{env, fmt, io::Write as _, path::PathBuf};
|
||||
|
||||
use anyhow::Result;
|
||||
use fs_err as fs;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -eEuo pipefail
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
cd "$(dirname "$0")"/..
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/..
|
||||
|
||||
# Update manifests
|
||||
#
|
||||
@@ -10,11 +11,12 @@ cd "$(dirname "$0")"/..
|
||||
# ./tools/manifest.sh [PACKAGE [VERSION_REQ]]
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
cargo run --manifest-path tools/codegen/Cargo.toml --release -- "$@"
|
||||
exit 0
|
||||
cargo run --manifest-path tools/codegen/Cargo.toml --release -- "$@"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for manifest in tools/codegen/base/*.json; do
|
||||
package=$(basename "${manifest%.*}")
|
||||
cargo run --manifest-path tools/codegen/Cargo.toml --release -- "${package}" latest
|
||||
package="${manifest##*/}"
|
||||
package="${package%.*}"
|
||||
cargo run --manifest-path tools/codegen/Cargo.toml --release -- "${package}" latest
|
||||
done
|
||||
|
||||
174
tools/publish.sh
174
tools/publish.sh
@@ -1,11 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -eEuo pipefail
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
cd "$(dirname "$0")"/..
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
trap 's=$?; echo >&2 "$0: error on line "${LINENO}": ${BASH_COMMAND}"; exit ${s}' ERR
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/..
|
||||
|
||||
# Publish a new release.
|
||||
#
|
||||
@@ -16,18 +14,18 @@ trap 's=$?; echo >&2 "$0: error on line "${LINENO}": ${BASH_COMMAND}"; exit ${s}
|
||||
# - parse-changelog <https://github.com/taiki-e/parse-changelog>
|
||||
|
||||
retry() {
|
||||
for i in {1..10}; do
|
||||
if "$@"; then
|
||||
return 0
|
||||
else
|
||||
sleep "${i}"
|
||||
fi
|
||||
done
|
||||
"$@"
|
||||
for i in {1..10}; do
|
||||
if "$@"; then
|
||||
return 0
|
||||
else
|
||||
sleep "${i}"
|
||||
fi
|
||||
done
|
||||
"$@"
|
||||
}
|
||||
bail() {
|
||||
echo >&2 "error: $*"
|
||||
exit 1
|
||||
printf >&2 'error: %s\n' "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
version="${1:?}"
|
||||
@@ -36,10 +34,15 @@ tag_prefix="v"
|
||||
tag="${tag_prefix}${version}"
|
||||
changelog="CHANGELOG.md"
|
||||
if [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z\.-]+)?(\+[0-9A-Za-z\.-]+)?$ ]]; then
|
||||
bail "invalid version format '${version}'"
|
||||
bail "invalid version format '${version}'"
|
||||
fi
|
||||
if [[ $# -gt 1 ]]; then
|
||||
bail "invalid argument '$2'"
|
||||
bail "invalid argument '$2'"
|
||||
fi
|
||||
if { sed --help 2>&1 || true; } | grep -Eq -e '-i extension'; then
|
||||
in_place=(-i '')
|
||||
else
|
||||
in_place=(-i)
|
||||
fi
|
||||
|
||||
# Make sure there is no uncommitted change.
|
||||
@@ -48,72 +51,67 @@ git diff --exit-code --staged
|
||||
|
||||
# Make sure the same release has not been created in the past.
|
||||
if gh release view "${tag}" &>/dev/null; then
|
||||
bail "tag '${tag}' has already been created and pushed"
|
||||
bail "tag '${tag}' has already been created and pushed"
|
||||
fi
|
||||
|
||||
# Make sure that the release was created from an allowed branch.
|
||||
if ! git branch | grep -q '\* main$'; then
|
||||
bail "current branch is not 'main'"
|
||||
if ! git branch | grep -Eq '\* main$'; then
|
||||
bail "current branch is not 'main'"
|
||||
fi
|
||||
if ! git remote -v | grep -F origin | grep -Eq 'github\.com[:/]taiki-e/'; then
|
||||
bail "cannot publish a new release from fork repository"
|
||||
fi
|
||||
|
||||
release_date=$(date -u '+%Y-%m-%d')
|
||||
tags=$(git --no-pager tag | (grep -E "^${tag_prefix}[0-9]+" || true))
|
||||
tags=$(git --no-pager tag | { grep -E "^${tag_prefix}[0-9]+" || true; })
|
||||
if [[ -n "${tags}" ]]; then
|
||||
# Make sure the same release does not exist in changelog.
|
||||
if grep -Eq "^## \\[${version//./\\.}\\]" "${changelog}"; then
|
||||
bail "release ${version} already exist in ${changelog}"
|
||||
fi
|
||||
if grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} already exist in ${changelog}"
|
||||
fi
|
||||
# Update changelog.
|
||||
remote_url=$(grep -E '^\[Unreleased\]: https://' "${changelog}" | sed 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
||||
prev_tag="${remote_url#*/compare/}"
|
||||
remote_url="${remote_url%/compare/*}"
|
||||
sed -i "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" "${changelog}"
|
||||
sed -i "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/${tag}...HEAD\\n[${version}]: ${remote_url}/compare/${prev_tag}...${tag}#" "${changelog}"
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
# Make sure the same release does not exist in changelog.
|
||||
if grep -Eq "^## \\[${version//./\\.}\\]" "${changelog}"; then
|
||||
bail "release ${version} already exist in ${changelog}"
|
||||
fi
|
||||
if grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} already exist in ${changelog}"
|
||||
fi
|
||||
# Update changelog.
|
||||
remote_url=$(grep -E '^\[Unreleased\]: https://' "${changelog}" | sed -E 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
||||
prev_tag="${remote_url#*/compare/}"
|
||||
remote_url="${remote_url%/compare/*}"
|
||||
sed -E "${in_place[@]}" \
|
||||
-e "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" \
|
||||
-e "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/${tag}...HEAD\\n[${version}]: ${remote_url}/compare/${prev_tag}...${tag}#" "${changelog}"
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
else
|
||||
# Make sure the release exists in changelog.
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "release ${version} does not exist in ${changelog} or has wrong release date"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} does not exist in ${changelog}"
|
||||
fi
|
||||
# Make sure the release exists in changelog.
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "release ${version} does not exist in ${changelog} or has wrong release date"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} does not exist in ${changelog}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make sure that a valid release note for this version exists.
|
||||
# https://github.com/taiki-e/parse-changelog
|
||||
changes=$(parse-changelog "${changelog}" "${version}")
|
||||
if [[ -z "${changes}" ]]; then
|
||||
bail "changelog for ${version} has no body"
|
||||
bail "changelog for ${version} has no body"
|
||||
fi
|
||||
echo "============== CHANGELOG =============="
|
||||
echo "${changes}"
|
||||
echo "======================================="
|
||||
|
||||
tools=()
|
||||
for tool in tools/codegen/base/*.json; do
|
||||
tools+=("$(basename "${tool%.*}")")
|
||||
done
|
||||
# Alias
|
||||
tools+=(nextest)
|
||||
# Not manifest-based
|
||||
tools+=(valgrind)
|
||||
printf '============== CHANGELOG ==============\n'
|
||||
printf '%s\n' "${changes}"
|
||||
printf '=======================================\n'
|
||||
|
||||
if [[ -n "${tags}" ]]; then
|
||||
# Create a release commit.
|
||||
(
|
||||
set -x
|
||||
git add "${changelog}"
|
||||
git commit -m "Release ${version}"
|
||||
)
|
||||
# Create a release commit.
|
||||
(
|
||||
set -x
|
||||
git add "${changelog}"
|
||||
git commit -m "Release ${version}"
|
||||
)
|
||||
fi
|
||||
|
||||
set -x
|
||||
@@ -126,27 +124,37 @@ major_version_tag="v${version%%.*}"
|
||||
git checkout -b "${major_version_tag}"
|
||||
retry git push origin refs/heads/"${major_version_tag}"
|
||||
if git --no-pager tag | grep -Eq "^${major_version_tag}$"; then
|
||||
git tag -d "${major_version_tag}"
|
||||
retry git push --delete origin refs/tags/"${major_version_tag}"
|
||||
git tag -d "${major_version_tag}"
|
||||
retry git push --delete origin refs/tags/"${major_version_tag}"
|
||||
fi
|
||||
git tag "${major_version_tag}"
|
||||
retry git push origin --tags
|
||||
git checkout main
|
||||
git branch -d "${major_version_tag}"
|
||||
|
||||
for tool in "${tools[@]}"; do
|
||||
git checkout -b "${tool}"
|
||||
sed -i -e "s/required: true/required: false/g" action.yml
|
||||
sed -i -e "s/# default: #publish:tool/default: ${tool}/g" action.yml
|
||||
git add action.yml
|
||||
git commit -m "${tool}"
|
||||
retry git push origin -f refs/heads/"${tool}"
|
||||
if git --no-pager tag | grep -Eq "^${tool}$"; then
|
||||
git tag -d "${tool}"
|
||||
retry git push --delete origin refs/tags/"${tool}"
|
||||
fi
|
||||
git tag "${tool}"
|
||||
retry git push origin --tags
|
||||
git checkout main
|
||||
git branch -D "${tool}"
|
||||
tools=()
|
||||
for tool in tools/codegen/base/*.json; do
|
||||
tool="${tool##*/}"
|
||||
tools+=("${tool%.*}")
|
||||
done
|
||||
# Alias
|
||||
tools+=(nextest)
|
||||
# Not manifest-based
|
||||
tools+=(valgrind)
|
||||
|
||||
for tool in "${tools[@]}"; do
|
||||
git checkout -b "${tool}"
|
||||
sed -E "${in_place[@]}" "s/required: true/required: false/g" action.yml
|
||||
sed -E "${in_place[@]}" "s/# default: #publish:tool/default: ${tool}/g" action.yml
|
||||
git add action.yml
|
||||
git commit -m "${tool}"
|
||||
retry git push origin -f refs/heads/"${tool}"
|
||||
if git --no-pager tag | grep -Eq "^${tool}$"; then
|
||||
git tag -d "${tool}"
|
||||
retry git push --delete origin refs/tags/"${tool}"
|
||||
fi
|
||||
git tag "${tool}"
|
||||
retry git push origin --tags
|
||||
git checkout main
|
||||
git branch -D "${tool}"
|
||||
done
|
||||
|
||||
749
tools/tidy.sh
749
tools/tidy.sh
@@ -25,455 +25,464 @@ trap 's=$?; echo >&2 "$0: error on line "${LINENO}": ${BASH_COMMAND}"; exit ${s}
|
||||
# skipped if the corresponding files do not exist.
|
||||
|
||||
check_diff() {
|
||||
if [[ -n "${CI:-}" ]]; then
|
||||
if ! git --no-pager diff --exit-code "$@"; then
|
||||
should_fail=1
|
||||
fi
|
||||
else
|
||||
if ! git --no-pager diff --exit-code "$@" &>/dev/null; then
|
||||
should_fail=1
|
||||
fi
|
||||
if [[ -n "${CI:-}" ]]; then
|
||||
if ! git --no-pager diff --exit-code "$@"; then
|
||||
should_fail=1
|
||||
fi
|
||||
else
|
||||
if ! git --no-pager diff --exit-code "$@" &>/dev/null; then
|
||||
should_fail=1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
check_config() {
|
||||
if [[ ! -e "$1" ]]; then
|
||||
error "could not found $1 in the repository root"
|
||||
fi
|
||||
if [[ ! -e "$1" ]]; then
|
||||
error "could not found $1 in the repository root"
|
||||
fi
|
||||
}
|
||||
check_install() {
|
||||
for tool in "$@"; do
|
||||
if ! type -P "${tool}" &>/dev/null; then
|
||||
if [[ "${tool}" == "python3" ]]; then
|
||||
if type -P python &>/dev/null; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
error "'${tool}' is required to run this check"
|
||||
return 1
|
||||
for tool in "$@"; do
|
||||
if ! type -P "${tool}" &>/dev/null; then
|
||||
if [[ "${tool}" == "python3" ]]; then
|
||||
if type -P python &>/dev/null; then
|
||||
continue
|
||||
fi
|
||||
done
|
||||
fi
|
||||
error "'${tool}' is required to run this check"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
info() {
|
||||
echo >&2 "info: $*"
|
||||
echo >&2 "info: $*"
|
||||
}
|
||||
error() {
|
||||
if [[ -n "${GITHUB_ACTIONS:-}" ]]; then
|
||||
echo "::error::$*"
|
||||
else
|
||||
echo >&2 "error: $*"
|
||||
fi
|
||||
should_fail=1
|
||||
if [[ -n "${GITHUB_ACTIONS:-}" ]]; then
|
||||
echo "::error::$*"
|
||||
else
|
||||
echo >&2 "error: $*"
|
||||
fi
|
||||
should_fail=1
|
||||
}
|
||||
venv() {
|
||||
local bin="$1"
|
||||
shift
|
||||
"${venv_bin}/${bin}${exe}" "$@"
|
||||
local bin="$1"
|
||||
shift
|
||||
"${venv_bin}/${bin}${exe}" "$@"
|
||||
}
|
||||
venv_install_yq() {
|
||||
local py_suffix=''
|
||||
if type -P python3 &>/dev/null; then
|
||||
py_suffix='3'
|
||||
fi
|
||||
exe=''
|
||||
venv_bin='.venv/bin'
|
||||
case "$(uname -s)" in
|
||||
MINGW* | MSYS* | CYGWIN* | Windows_NT)
|
||||
exe='.exe'
|
||||
venv_bin='.venv/Scripts'
|
||||
;;
|
||||
esac
|
||||
if [[ ! -d .venv ]]; then
|
||||
"python${py_suffix}" -m venv .venv
|
||||
fi
|
||||
if [[ ! -e "${venv_bin}/yq${exe}" ]]; then
|
||||
info "installing yq to ./.venv using pip"
|
||||
venv "pip${py_suffix}" install yq
|
||||
fi
|
||||
local py_suffix=''
|
||||
if type -P python3 &>/dev/null; then
|
||||
py_suffix='3'
|
||||
fi
|
||||
exe=''
|
||||
venv_bin='.venv/bin'
|
||||
case "$(uname -s)" in
|
||||
MINGW* | MSYS* | CYGWIN* | Windows_NT)
|
||||
exe='.exe'
|
||||
venv_bin='.venv/Scripts'
|
||||
;;
|
||||
esac
|
||||
if [[ ! -d .venv ]]; then
|
||||
"python${py_suffix}" -m venv .venv
|
||||
fi
|
||||
if [[ ! -e "${venv_bin}/yq${exe}" ]]; then
|
||||
info "installing yq to ./.venv using pip"
|
||||
venv "pip${py_suffix}" install yq
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
cat <<EOF
|
||||
cat <<EOF
|
||||
USAGE:
|
||||
$0
|
||||
EOF
|
||||
exit 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Rust (if exists)
|
||||
if [[ -n "$(git ls-files '*.rs')" ]]; then
|
||||
info "checking Rust code style"
|
||||
check_install cargo jq python3
|
||||
check_config .rustfmt.toml
|
||||
if check_install rustup; then
|
||||
# `cargo fmt` cannot recognize files not included in the current workspace and modules
|
||||
# defined inside macros, so run rustfmt directly.
|
||||
# We need to use nightly rustfmt because we use the unstable formatting options of rustfmt.
|
||||
rustc_version=$(rustc -vV | grep '^release:' | cut -d' ' -f2)
|
||||
if [[ "${rustc_version}" == *"nightly"* ]] || [[ "${rustc_version}" == *"dev"* ]]; then
|
||||
rustup component add rustfmt &>/dev/null
|
||||
info "running \`rustfmt \$(git ls-files '*.rs')\`"
|
||||
rustfmt $(git ls-files '*.rs')
|
||||
else
|
||||
rustup component add rustfmt --toolchain nightly &>/dev/null
|
||||
info "running \`rustfmt +nightly \$(git ls-files '*.rs')\`"
|
||||
rustfmt +nightly $(git ls-files '*.rs')
|
||||
fi
|
||||
check_diff $(git ls-files '*.rs')
|
||||
info "checking Rust code style"
|
||||
check_install cargo jq python3
|
||||
check_config .rustfmt.toml
|
||||
if check_install rustup; then
|
||||
# `cargo fmt` cannot recognize files not included in the current workspace and modules
|
||||
# defined inside macros, so run rustfmt directly.
|
||||
# We need to use nightly rustfmt because we use the unstable formatting options of rustfmt.
|
||||
rustc_version=$(rustc -vV | grep '^release:' | cut -d' ' -f2)
|
||||
if [[ "${rustc_version}" == *"nightly"* ]] || [[ "${rustc_version}" == *"dev"* ]]; then
|
||||
rustup component add rustfmt &>/dev/null
|
||||
info "running \`rustfmt \$(git ls-files '*.rs')\`"
|
||||
rustfmt $(git ls-files '*.rs')
|
||||
else
|
||||
rustup component add rustfmt --toolchain nightly &>/dev/null
|
||||
info "running \`rustfmt +nightly \$(git ls-files '*.rs')\`"
|
||||
rustfmt +nightly $(git ls-files '*.rs')
|
||||
fi
|
||||
cast_without_turbofish=$(grep -n -E '\.cast\(\)' $(git ls-files '*.rs') || true)
|
||||
if [[ -n "${cast_without_turbofish}" ]]; then
|
||||
error "please replace \`.cast()\` with \`.cast::<type_name>()\`:"
|
||||
echo "${cast_without_turbofish}"
|
||||
check_diff $(git ls-files '*.rs')
|
||||
fi
|
||||
cast_without_turbofish=$(grep -n -E '\.cast\(\)' $(git ls-files '*.rs') || true)
|
||||
if [[ -n "${cast_without_turbofish}" ]]; then
|
||||
error "please replace \`.cast()\` with \`.cast::<type_name>()\`:"
|
||||
echo "${cast_without_turbofish}"
|
||||
fi
|
||||
# Sync readme and crate-level doc.
|
||||
first='1'
|
||||
for readme in $(git ls-files '*README.md'); do
|
||||
if ! grep -q '^<!-- tidy:crate-doc:start -->' "${readme}"; then
|
||||
continue
|
||||
fi
|
||||
# Sync readme and crate-level doc.
|
||||
first='1'
|
||||
for readme in $(git ls-files '*README.md'); do
|
||||
if ! grep -q '^<!-- tidy:crate-doc:start -->' "${readme}"; then
|
||||
continue
|
||||
fi
|
||||
lib="$(dirname "${readme}")/src/lib.rs"
|
||||
if [[ -n "${first}" ]]; then
|
||||
first=''
|
||||
info "checking readme and crate-level doc are synchronized"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:end -->' "${readme}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:end -->' comment in ${readme}"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:start -->' "${lib}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:start -->' comment in ${lib}"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:end -->' "${lib}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:end -->' comment in ${lib}"
|
||||
fi
|
||||
new=$(tr <"${readme}" '\n' '\a' | grep -o '<!-- tidy:crate-doc:start -->.*<!-- tidy:crate-doc:end -->' | sed 's/\&/\\\&/g; s/\\/\\\\/g')
|
||||
new=$(tr <"${lib}" '\n' '\a' | awk -v new="${new}" 'gsub("<!-- tidy:crate-doc:start -->.*<!-- tidy:crate-doc:end -->",new)' | tr '\a' '\n')
|
||||
echo "${new}" >"${lib}"
|
||||
check_diff "${lib}"
|
||||
done
|
||||
# Make sure that public Rust crates don't contain executables and binaries.
|
||||
executables=''
|
||||
binaries=''
|
||||
metadata=$(cargo metadata --format-version=1 --no-deps)
|
||||
has_public_crate=''
|
||||
venv_install_yq
|
||||
for id in $(jq <<<"${metadata}" '.workspace_members[]'); do
|
||||
pkg=$(jq <<<"${metadata}" ".packages[] | select(.id == ${id})")
|
||||
publish=$(jq <<<"${pkg}" -r '.publish')
|
||||
manifest_path=$(jq <<<"${pkg}" -r '.manifest_path')
|
||||
if [[ "$(venv tomlq -c '.lints' "${manifest_path}")" == "null" ]]; then
|
||||
error "no [lints] table in ${manifest_path} please add '[lints]' with 'workspace = true'"
|
||||
fi
|
||||
lib="$(dirname "${readme}")/src/lib.rs"
|
||||
if [[ -n "${first}" ]]; then
|
||||
first=''
|
||||
info "checking readme and crate-level doc are synchronized"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:end -->' "${readme}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:end -->' comment in ${readme}"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:start -->' "${lib}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:start -->' comment in ${lib}"
|
||||
fi
|
||||
if ! grep -q '^<!-- tidy:crate-doc:end -->' "${lib}"; then
|
||||
bail "missing '<!-- tidy:crate-doc:end -->' comment in ${lib}"
|
||||
fi
|
||||
new=$(tr <"${readme}" '\n' '\a' | grep -o '<!-- tidy:crate-doc:start -->.*<!-- tidy:crate-doc:end -->' | sed 's/\&/\\\&/g; s/\\/\\\\/g')
|
||||
new=$(tr <"${lib}" '\n' '\a' | awk -v new="${new}" 'gsub("<!-- tidy:crate-doc:start -->.*<!-- tidy:crate-doc:end -->",new)' | tr '\a' '\n')
|
||||
echo "${new}" >"${lib}"
|
||||
check_diff "${lib}"
|
||||
done
|
||||
# Make sure that public Rust crates don't contain executables and binaries.
|
||||
executables=''
|
||||
binaries=''
|
||||
metadata=$(cargo metadata --format-version=1 --no-deps)
|
||||
has_public_crate=''
|
||||
has_root_crate=''
|
||||
venv_install_yq
|
||||
for id in $(jq <<<"${metadata}" '.workspace_members[]'); do
|
||||
pkg=$(jq <<<"${metadata}" ".packages[] | select(.id == ${id})")
|
||||
publish=$(jq <<<"${pkg}" -r '.publish')
|
||||
manifest_path=$(jq <<<"${pkg}" -r '.manifest_path')
|
||||
if [[ "$(venv tomlq -c '.lints' "${manifest_path}")" == "null" ]]; then
|
||||
error "no [lints] table in ${manifest_path} please add '[lints]' with 'workspace = true'"
|
||||
fi
|
||||
# Publishing is unrestricted if null, and forbidden if an empty array.
|
||||
if [[ "${publish}" == "[]" ]]; then
|
||||
continue
|
||||
fi
|
||||
has_public_crate='1'
|
||||
done
|
||||
if [[ -n "${has_public_crate}" ]]; then
|
||||
info "checking public crates don't contain executables and binaries"
|
||||
if [[ -f Cargo.toml ]]; then
|
||||
root_manifest=$(cargo locate-project --message-format=plain --manifest-path Cargo.toml)
|
||||
root_pkg=$(jq <<<"${metadata}" ".packages[] | select(.manifest_path == \"${root_manifest}\")")
|
||||
if [[ -n "${root_pkg}" ]]; then
|
||||
publish=$(jq <<<"${root_pkg}" -r '.publish')
|
||||
# Publishing is unrestricted if null, and forbidden if an empty array.
|
||||
if [[ "${publish}" == "[]" ]]; then
|
||||
continue
|
||||
fi
|
||||
has_public_crate='1'
|
||||
done
|
||||
if [[ -n "${has_public_crate}" ]]; then
|
||||
info "checking public crates don't contain executables and binaries"
|
||||
if [[ -f Cargo.toml ]]; then
|
||||
root_manifest=$(cargo locate-project --message-format=plain --manifest-path Cargo.toml)
|
||||
root_pkg=$(jq <<<"${metadata}" ".packages[] | select(.manifest_path == \"${root_manifest}\")")
|
||||
if [[ -n "${root_pkg}" ]]; then
|
||||
publish=$(jq <<<"${root_pkg}" -r '.publish')
|
||||
# Publishing is unrestricted if null, and forbidden if an empty array.
|
||||
if [[ "${publish}" != "[]" ]]; then
|
||||
exclude=$(venv tomlq -r '.package.exclude[]' Cargo.toml)
|
||||
if ! grep <<<"${exclude}" -Eq '^/\.\*$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/.*\""
|
||||
fi
|
||||
if [[ -e tools ]] && ! grep <<<"${exclude}" -Eq '^/tools$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/tools\" if it exists"
|
||||
fi
|
||||
if [[ -e target-specs ]] && ! grep <<<"${exclude}" -Eq '^/target-specs$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/target-specs\" if it exists"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
for p in $(git ls-files); do
|
||||
# Skip directories.
|
||||
if [[ -d "${p}" ]]; then
|
||||
continue
|
||||
fi
|
||||
# Top-level hidden files/directories and tools/* are excluded from crates.io (ensured by the above check).
|
||||
# TODO: fully respect exclude field in Cargo.toml.
|
||||
case "${p}" in
|
||||
.* | tools/* | target-specs/*) continue ;;
|
||||
esac
|
||||
if [[ -x "${p}" ]]; then
|
||||
executables+="${p}"$'\n'
|
||||
fi
|
||||
# Use diff instead of file because file treats an empty file as a binary
|
||||
# https://unix.stackexchange.com/questions/275516/is-there-a-convenient-way-to-classify-files-as-binary-or-text#answer-402870
|
||||
if (diff .gitattributes "${p}" || true) | grep -q '^Binary file'; then
|
||||
binaries+="${p}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${executables}" ]]; then
|
||||
error "file-permissions-check failed: executables are only allowed to be present in directories that are excluded from crates.io"
|
||||
echo "======================================="
|
||||
echo -n "${executables}"
|
||||
echo "======================================="
|
||||
fi
|
||||
if [[ -n "${binaries}" ]]; then
|
||||
error "file-permissions-check failed: binaries are only allowed to be present in directories that are excluded from crates.io"
|
||||
echo "======================================="
|
||||
echo -n "${binaries}"
|
||||
echo "======================================="
|
||||
if [[ "${publish}" != "[]" ]]; then
|
||||
has_root_crate=1
|
||||
exclude=$(venv tomlq -r '.package.exclude[]' Cargo.toml)
|
||||
if ! grep <<<"${exclude}" -Eq '^/\.\*$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/.*\""
|
||||
fi
|
||||
if [[ -e tools ]] && ! grep <<<"${exclude}" -Eq '^/tools$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/tools\" if it exists"
|
||||
fi
|
||||
if [[ -e target-specs ]] && ! grep <<<"${exclude}" -Eq '^/target-specs$'; then
|
||||
error "top-level Cargo.toml of non-virtual workspace should have 'exclude' field with \"/target-specs\" if it exists"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
for p in $(git ls-files); do
|
||||
# Skip directories.
|
||||
if [[ -d "${p}" ]]; then
|
||||
continue
|
||||
fi
|
||||
# Top-level hidden files/directories and tools/* are excluded from crates.io (ensured by the above check).
|
||||
# TODO: fully respect exclude field in Cargo.toml.
|
||||
case "${p}" in
|
||||
.* | tools/* | target-specs/*) continue ;;
|
||||
*/*) ;;
|
||||
*)
|
||||
# If there is no crate at root, executables at the repository root directory if always okay.
|
||||
if [[ -z "${has_root_crate}" ]]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if [[ -x "${p}" ]]; then
|
||||
executables+="${p}"$'\n'
|
||||
fi
|
||||
# Use diff instead of file because file treats an empty file as a binary
|
||||
# https://unix.stackexchange.com/questions/275516/is-there-a-convenient-way-to-classify-files-as-binary-or-text#answer-402870
|
||||
if (diff .gitattributes "${p}" || true) | grep -q '^Binary file'; then
|
||||
binaries+="${p}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${executables}" ]]; then
|
||||
error "file-permissions-check failed: executables are only allowed to be present in directories that are excluded from crates.io"
|
||||
echo "======================================="
|
||||
echo -n "${executables}"
|
||||
echo "======================================="
|
||||
fi
|
||||
if [[ -n "${binaries}" ]]; then
|
||||
error "file-permissions-check failed: binaries are only allowed to be present in directories that are excluded from crates.io"
|
||||
echo "======================================="
|
||||
echo -n "${binaries}"
|
||||
echo "======================================="
|
||||
fi
|
||||
fi
|
||||
elif [[ -e .rustfmt.toml ]]; then
|
||||
error ".rustfmt.toml is unused"
|
||||
error ".rustfmt.toml is unused"
|
||||
fi
|
||||
|
||||
# C/C++ (if exists)
|
||||
if [[ -n "$(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')" ]]; then
|
||||
info "checking C/C++ code style"
|
||||
check_config .clang-format
|
||||
if check_install clang-format; then
|
||||
info "running \`clang-format -i \$(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')\`"
|
||||
clang-format -i $(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')
|
||||
check_diff $(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')
|
||||
fi
|
||||
info "checking C/C++ code style"
|
||||
check_config .clang-format
|
||||
if check_install clang-format; then
|
||||
info "running \`clang-format -i \$(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')\`"
|
||||
clang-format -i $(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')
|
||||
check_diff $(git ls-files '*.c' '*.h' '*.cpp' '*.hpp')
|
||||
fi
|
||||
elif [[ -e .clang-format ]]; then
|
||||
error ".clang-format is unused"
|
||||
error ".clang-format is unused"
|
||||
fi
|
||||
|
||||
# YAML/JavaScript/JSON (if exists)
|
||||
if [[ -n "$(git ls-files '*.yml' '*.yaml' '*.js' '*.json')" ]]; then
|
||||
info "checking YAML/JavaScript/JSON code style"
|
||||
check_config .editorconfig
|
||||
if check_install npm; then
|
||||
info "running \`npx -y prettier -l -w \$(git ls-files '*.yml' '*.yaml' '*.js' '*.json')\`"
|
||||
npx -y prettier -l -w $(git ls-files '*.yml' '*.yaml' '*.js' '*.json')
|
||||
check_diff $(git ls-files '*.yml' '*.yaml' '*.js' '*.json')
|
||||
fi
|
||||
# Check GitHub workflows.
|
||||
if [[ -d .github/workflows ]]; then
|
||||
info "checking GitHub workflows"
|
||||
if check_install jq python3; then
|
||||
venv_install_yq
|
||||
for workflow in .github/workflows/*.yml; do
|
||||
# The top-level permissions must be weak as they are referenced by all jobs.
|
||||
permissions=$(venv yq -c '.permissions' "${workflow}")
|
||||
case "${permissions}" in
|
||||
'{"contents":"read"}' | '{"contents":"none"}') ;;
|
||||
null) error "${workflow}: top level permissions not found; it must be 'contents: read' or weaker permissions" ;;
|
||||
*) error "${workflow}: only 'contents: read' and weaker permissions are allowed at top level; if you want to use stronger permissions, please set job-level permissions" ;;
|
||||
esac
|
||||
# Make sure the 'needs' section is not out of date.
|
||||
if grep -q '# tidy:needs' "${workflow}" && ! grep -Eq '# *needs: \[' "${workflow}"; then
|
||||
# shellcheck disable=SC2207
|
||||
jobs_actual=($(venv yq '.jobs' "${workflow}" | jq -r 'keys_unsorted[]'))
|
||||
unset 'jobs_actual[${#jobs_actual[@]}-1]'
|
||||
# shellcheck disable=SC2207
|
||||
jobs_expected=($(venv yq -r '.jobs."ci-success".needs[]' "${workflow}"))
|
||||
if [[ "${jobs_actual[*]}" != "${jobs_expected[*]+"${jobs_expected[*]}"}" ]]; then
|
||||
printf -v jobs '%s, ' "${jobs_actual[@]}"
|
||||
sed -i "s/needs: \[.*\] # tidy:needs/needs: [${jobs%, }] # tidy:needs/" "${workflow}"
|
||||
check_diff "${workflow}"
|
||||
error "${workflow}: please update 'needs' section in 'ci-success' job"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
info "checking YAML/JavaScript/JSON code style"
|
||||
check_config .editorconfig
|
||||
if check_install npm; then
|
||||
info "running \`npx -y prettier -l -w \$(git ls-files '*.yml' '*.yaml' '*.js' '*.json')\`"
|
||||
npx -y prettier -l -w $(git ls-files '*.yml' '*.yaml' '*.js' '*.json')
|
||||
check_diff $(git ls-files '*.yml' '*.yaml' '*.js' '*.json')
|
||||
fi
|
||||
# Check GitHub workflows.
|
||||
if [[ -d .github/workflows ]]; then
|
||||
info "checking GitHub workflows"
|
||||
if check_install jq python3; then
|
||||
venv_install_yq
|
||||
for workflow in .github/workflows/*.yml; do
|
||||
# The top-level permissions must be weak as they are referenced by all jobs.
|
||||
permissions=$(venv yq -c '.permissions' "${workflow}")
|
||||
case "${permissions}" in
|
||||
'{"contents":"read"}' | '{"contents":"none"}') ;;
|
||||
null) error "${workflow}: top level permissions not found; it must be 'contents: read' or weaker permissions" ;;
|
||||
*) error "${workflow}: only 'contents: read' and weaker permissions are allowed at top level; if you want to use stronger permissions, please set job-level permissions" ;;
|
||||
esac
|
||||
# Make sure the 'needs' section is not out of date.
|
||||
if grep -q '# tidy:needs' "${workflow}" && ! grep -Eq '# *needs: \[' "${workflow}"; then
|
||||
# shellcheck disable=SC2207
|
||||
jobs_actual=($(venv yq '.jobs' "${workflow}" | jq -r 'keys_unsorted[]'))
|
||||
unset 'jobs_actual[${#jobs_actual[@]}-1]'
|
||||
# shellcheck disable=SC2207
|
||||
jobs_expected=($(venv yq -r '.jobs."ci-success".needs[]' "${workflow}"))
|
||||
if [[ "${jobs_actual[*]}" != "${jobs_expected[*]+"${jobs_expected[*]}"}" ]]; then
|
||||
printf -v jobs '%s, ' "${jobs_actual[@]}"
|
||||
sed -i "s/needs: \[.*\] # tidy:needs/needs: [${jobs%, }] # tidy:needs/" "${workflow}"
|
||||
check_diff "${workflow}"
|
||||
error "${workflow}: please update 'needs' section in 'ci-success' job"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [[ -n "$(git ls-files '*.yaml' | (grep -v .markdownlint-cli2.yaml || true))" ]]; then
|
||||
error "please use '.yml' instead of '.yaml' for consistency"
|
||||
git ls-files '*.yaml' | (grep -v .markdownlint-cli2.yaml || true)
|
||||
error "please use '.yml' instead of '.yaml' for consistency"
|
||||
git ls-files '*.yaml' | (grep -v .markdownlint-cli2.yaml || true)
|
||||
fi
|
||||
|
||||
# TOML (if exists)
|
||||
if [[ -n "$(git ls-files '*.toml' | (grep -v .taplo.toml || true))" ]]; then
|
||||
info "checking TOML style"
|
||||
check_config .taplo.toml
|
||||
if check_install npm; then
|
||||
info "running \`npx -y @taplo/cli fmt \$(git ls-files '*.toml')\`"
|
||||
RUST_LOG=warn npx -y @taplo/cli fmt $(git ls-files '*.toml')
|
||||
check_diff $(git ls-files '*.toml')
|
||||
fi
|
||||
info "checking TOML style"
|
||||
check_config .taplo.toml
|
||||
if check_install npm; then
|
||||
info "running \`npx -y @taplo/cli fmt \$(git ls-files '*.toml')\`"
|
||||
RUST_LOG=warn npx -y @taplo/cli fmt $(git ls-files '*.toml')
|
||||
check_diff $(git ls-files '*.toml')
|
||||
fi
|
||||
elif [[ -e .taplo.toml ]]; then
|
||||
error ".taplo.toml is unused"
|
||||
error ".taplo.toml is unused"
|
||||
fi
|
||||
|
||||
# Markdown (if exists)
|
||||
if [[ -n "$(git ls-files '*.md')" ]]; then
|
||||
info "checking Markdown style"
|
||||
check_config .markdownlint-cli2.yaml
|
||||
if check_install npm; then
|
||||
info "running \`npx -y markdownlint-cli2 \$(git ls-files '*.md')\`"
|
||||
npx -y markdownlint-cli2 $(git ls-files '*.md')
|
||||
fi
|
||||
info "checking Markdown style"
|
||||
check_config .markdownlint-cli2.yaml
|
||||
if check_install npm; then
|
||||
info "running \`npx -y markdownlint-cli2 \$(git ls-files '*.md')\`"
|
||||
npx -y markdownlint-cli2 $(git ls-files '*.md')
|
||||
fi
|
||||
elif [[ -e .markdownlint-cli2.yaml ]]; then
|
||||
error ".markdownlint-cli2.yaml is unused"
|
||||
error ".markdownlint-cli2.yaml is unused"
|
||||
fi
|
||||
if [[ -n "$(git ls-files '*.markdown')" ]]; then
|
||||
error "please use '.md' instead of '.markdown' for consistency"
|
||||
git ls-files '*.markdown'
|
||||
error "please use '.md' instead of '.markdown' for consistency"
|
||||
git ls-files '*.markdown'
|
||||
fi
|
||||
|
||||
# Shell scripts
|
||||
info "checking Shell scripts"
|
||||
if check_install shfmt; then
|
||||
check_config .editorconfig
|
||||
info "running \`shfmt -l -w \$(git ls-files '*.sh')\`"
|
||||
shfmt -l -w $(git ls-files '*.sh')
|
||||
check_diff $(git ls-files '*.sh')
|
||||
check_config .editorconfig
|
||||
info "running \`shfmt -l -w \$(git ls-files '*.sh')\`"
|
||||
shfmt -l -w $(git ls-files '*.sh')
|
||||
check_diff $(git ls-files '*.sh')
|
||||
fi
|
||||
if check_install shellcheck; then
|
||||
check_config .shellcheckrc
|
||||
info "running \`shellcheck \$(git ls-files '*.sh')\`"
|
||||
if ! shellcheck $(git ls-files '*.sh'); then
|
||||
should_fail=1
|
||||
fi
|
||||
if [[ -n "$(git ls-files '*Dockerfile')" ]]; then
|
||||
# SC2154 doesn't seem to work on dockerfile.
|
||||
info "running \`shellcheck -e SC2148,SC2154,SC2250 \$(git ls-files '*Dockerfile')\`"
|
||||
if ! shellcheck -e SC2148,SC2154,SC2250 $(git ls-files '*Dockerfile'); then
|
||||
should_fail=1
|
||||
fi
|
||||
check_config .shellcheckrc
|
||||
info "running \`shellcheck \$(git ls-files '*.sh')\`"
|
||||
if ! shellcheck $(git ls-files '*.sh'); then
|
||||
should_fail=1
|
||||
fi
|
||||
if [[ -n "$(git ls-files '*Dockerfile')" ]]; then
|
||||
# SC2154 doesn't seem to work on dockerfile.
|
||||
info "running \`shellcheck -e SC2148,SC2154,SC2250 \$(git ls-files '*Dockerfile')\`"
|
||||
if ! shellcheck -e SC2148,SC2154,SC2250 $(git ls-files '*Dockerfile'); then
|
||||
should_fail=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# License check
|
||||
# TODO: This check is still experimental and does not track all files that should be tracked.
|
||||
if [[ -f tools/.tidy-check-license-headers ]]; then
|
||||
info "checking license headers (experimental)"
|
||||
failed_files=''
|
||||
for p in $(eval $(<tools/.tidy-check-license-headers)); do
|
||||
case "$(basename "${p}")" in
|
||||
*.stderr | *.expanded.rs) continue ;; # generated files
|
||||
*.sh | *.py | *.rb | *Dockerfile) prefix=("# ") ;;
|
||||
*.rs | *.c | *.h | *.cpp | *.hpp | *.s | *.S | *.js) prefix=("// " "/* ") ;;
|
||||
*.ld | *.x) prefix=("/* ") ;;
|
||||
# TODO: More file types?
|
||||
*) continue ;;
|
||||
esac
|
||||
# TODO: The exact line number is not actually important; it is important
|
||||
# that it be part of the top-level comments of the file.
|
||||
line="1"
|
||||
if IFS= LC_ALL=C read -rn3 -d '' shebang <"${p}" && [[ "${shebang}" == '#!/' ]]; then
|
||||
line="2"
|
||||
elif [[ "${p}" == *"Dockerfile" ]] && IFS= LC_ALL=C read -rn9 -d '' syntax <"${p}" && [[ "${syntax}" == '# syntax=' ]]; then
|
||||
line="2"
|
||||
fi
|
||||
header_found=''
|
||||
for pre in "${prefix[@]}"; do
|
||||
# TODO: check that the license is valid as SPDX and is allowed in this project.
|
||||
if [[ "$(grep -E -n "${pre}SPDX-License-Identifier: " "${p}")" == "${line}:${pre}SPDX-License-Identifier: "* ]]; then
|
||||
header_found='1'
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ -z "${header_found}" ]]; then
|
||||
failed_files+="${p}:${line}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${failed_files}" ]]; then
|
||||
error "license-check failed: please add SPDX-License-Identifier to the following files"
|
||||
echo "======================================="
|
||||
echo -n "${failed_files}"
|
||||
echo "======================================="
|
||||
info "checking license headers (experimental)"
|
||||
failed_files=''
|
||||
for p in $(eval $(<tools/.tidy-check-license-headers)); do
|
||||
case "$(basename "${p}")" in
|
||||
*.stderr | *.expanded.rs) continue ;; # generated files
|
||||
*.sh | *.py | *.rb | *Dockerfile) prefix=("# ") ;;
|
||||
*.rs | *.c | *.h | *.cpp | *.hpp | *.s | *.S | *.js) prefix=("// " "/* ") ;;
|
||||
*.ld | *.x) prefix=("/* ") ;;
|
||||
# TODO: More file types?
|
||||
*) continue ;;
|
||||
esac
|
||||
# TODO: The exact line number is not actually important; it is important
|
||||
# that it be part of the top-level comments of the file.
|
||||
line="1"
|
||||
if IFS= LC_ALL=C read -rn3 -d '' shebang <"${p}" && [[ "${shebang}" == '#!/' ]]; then
|
||||
line="2"
|
||||
elif [[ "${p}" == *"Dockerfile" ]] && IFS= LC_ALL=C read -rn9 -d '' syntax <"${p}" && [[ "${syntax}" == '# syntax=' ]]; then
|
||||
line="2"
|
||||
fi
|
||||
header_found=''
|
||||
for pre in "${prefix[@]}"; do
|
||||
# TODO: check that the license is valid as SPDX and is allowed in this project.
|
||||
if [[ "$(grep -E -n "${pre}SPDX-License-Identifier: " "${p}")" == "${line}:${pre}SPDX-License-Identifier: "* ]]; then
|
||||
header_found='1'
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ -z "${header_found}" ]]; then
|
||||
failed_files+="${p}:${line}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${failed_files}" ]]; then
|
||||
error "license-check failed: please add SPDX-License-Identifier to the following files"
|
||||
echo "======================================="
|
||||
echo -n "${failed_files}"
|
||||
echo "======================================="
|
||||
fi
|
||||
fi
|
||||
|
||||
# Spell check (if config exists)
|
||||
if [[ -f .cspell.json ]]; then
|
||||
info "spell checking"
|
||||
project_dictionary=.github/.cspell/project-dictionary.txt
|
||||
if check_install npm jq python3; then
|
||||
has_rust=''
|
||||
if [[ -n "$(git ls-files '*Cargo.toml')" ]]; then
|
||||
venv_install_yq
|
||||
has_rust='1'
|
||||
dependencies=''
|
||||
for manifest_path in $(git ls-files '*Cargo.toml'); do
|
||||
if [[ "${manifest_path}" != "Cargo.toml" ]] && [[ "$(venv tomlq -c '.workspace' "${manifest_path}")" == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
metadata=$(cargo metadata --format-version=1 --no-deps --manifest-path "${manifest_path}")
|
||||
for id in $(jq <<<"${metadata}" '.workspace_members[]'); do
|
||||
dependencies+="$(jq <<<"${metadata}" ".packages[] | select(.id == ${id})" | jq -r '.dependencies[].name')"$'\n'
|
||||
done
|
||||
done
|
||||
# shellcheck disable=SC2001
|
||||
dependencies=$(sed <<<"${dependencies}" 's/[0-9_-]/\n/g' | LC_ALL=C sort -f -u)
|
||||
info "spell checking"
|
||||
project_dictionary=.github/.cspell/project-dictionary.txt
|
||||
if check_install npm jq python3; then
|
||||
has_rust=''
|
||||
if [[ -n "$(git ls-files '*Cargo.toml')" ]]; then
|
||||
venv_install_yq
|
||||
has_rust='1'
|
||||
dependencies=''
|
||||
for manifest_path in $(git ls-files '*Cargo.toml'); do
|
||||
if [[ "${manifest_path}" != "Cargo.toml" ]] && [[ "$(venv tomlq -c '.workspace' "${manifest_path}")" == "null" ]]; then
|
||||
continue
|
||||
fi
|
||||
config_old=$(<.cspell.json)
|
||||
config_new=$(grep <<<"${config_old}" -v '^ *//' | jq 'del(.dictionaries[] | select(index("organization-dictionary") | not))' | jq 'del(.dictionaryDefinitions[] | select(.name == "organization-dictionary" | not))')
|
||||
trap -- 'echo "${config_old}" >.cspell.json; echo >&2 "$0: trapped SIGINT"; exit 1' SIGINT
|
||||
echo "${config_new}" >.cspell.json
|
||||
if [[ -n "${has_rust}" ]]; then
|
||||
dependencies_words=$(npx <<<"${dependencies}" -y cspell stdin --no-progress --no-summary --words-only --unique || true)
|
||||
fi
|
||||
all_words=$(npx -y cspell --no-progress --no-summary --words-only --unique $(git ls-files | (grep -v "${project_dictionary//\./\\.}" || true)) || true)
|
||||
echo "${config_old}" >.cspell.json
|
||||
trap - SIGINT
|
||||
cat >.github/.cspell/rust-dependencies.txt <<EOF
|
||||
metadata=$(cargo metadata --format-version=1 --no-deps --manifest-path "${manifest_path}")
|
||||
for id in $(jq <<<"${metadata}" '.workspace_members[]'); do
|
||||
dependencies+="$(jq <<<"${metadata}" ".packages[] | select(.id == ${id})" | jq -r '.dependencies[].name')"$'\n'
|
||||
done
|
||||
done
|
||||
# shellcheck disable=SC2001
|
||||
dependencies=$(sed <<<"${dependencies}" 's/[0-9_-]/\n/g' | LC_ALL=C sort -f -u)
|
||||
fi
|
||||
config_old=$(<.cspell.json)
|
||||
config_new=$(grep <<<"${config_old}" -v '^ *//' | jq 'del(.dictionaries[] | select(index("organization-dictionary") | not))' | jq 'del(.dictionaryDefinitions[] | select(.name == "organization-dictionary" | not))')
|
||||
trap -- 'echo "${config_old}" >.cspell.json; echo >&2 "$0: trapped SIGINT"; exit 1' SIGINT
|
||||
echo "${config_new}" >.cspell.json
|
||||
if [[ -n "${has_rust}" ]]; then
|
||||
dependencies_words=$(npx <<<"${dependencies}" -y cspell stdin --no-progress --no-summary --words-only --unique || true)
|
||||
fi
|
||||
all_words=$(npx -y cspell --no-progress --no-summary --words-only --unique $(git ls-files | (grep -v "${project_dictionary//\./\\.}" || true)) || true)
|
||||
echo "${config_old}" >.cspell.json
|
||||
trap - SIGINT
|
||||
cat >.github/.cspell/rust-dependencies.txt <<EOF
|
||||
// This file is @generated by $(basename "$0").
|
||||
// It is not intended for manual editing.
|
||||
EOF
|
||||
if [[ -n "${dependencies_words:-}" ]]; then
|
||||
echo $'\n'"${dependencies_words}" >>.github/.cspell/rust-dependencies.txt
|
||||
fi
|
||||
if [[ -z "${REMOVE_UNUSED_WORDS:-}" ]]; then
|
||||
check_diff .github/.cspell/rust-dependencies.txt
|
||||
fi
|
||||
if ! grep -Fq '.github/.cspell/rust-dependencies.txt linguist-generated' .gitattributes; then
|
||||
error "you may want to mark .github/.cspell/rust-dependencies.txt linguist-generated"
|
||||
fi
|
||||
|
||||
info "running \`npx -y cspell --no-progress --no-summary \$(git ls-files)\`"
|
||||
if ! npx -y cspell --no-progress --no-summary $(git ls-files); then
|
||||
error "spellcheck failed: please fix uses of above words or add to ${project_dictionary} if correct"
|
||||
fi
|
||||
|
||||
# Make sure the project-specific dictionary does not contain duplicated words.
|
||||
for dictionary in .github/.cspell/*.txt; do
|
||||
if [[ "${dictionary}" == "${project_dictionary}" ]]; then
|
||||
continue
|
||||
fi
|
||||
dup=$(sed '/^$/d' "${project_dictionary}" "${dictionary}" | LC_ALL=C sort -f | uniq -d -i | (grep -v '//.*' || true))
|
||||
if [[ -n "${dup}" ]]; then
|
||||
error "duplicated words in dictionaries; please remove the following words from ${project_dictionary}"
|
||||
echo "======================================="
|
||||
echo "${dup}"
|
||||
echo "======================================="
|
||||
fi
|
||||
done
|
||||
|
||||
# Make sure the project-specific dictionary does not contain unused words.
|
||||
if [[ -n "${REMOVE_UNUSED_WORDS:-}" ]]; then
|
||||
grep_args=()
|
||||
for word in $(grep -Ev '^//.*' "${project_dictionary}" || true); do
|
||||
if ! grep -Eqi "^${word}$" <<<"${all_words}"; then
|
||||
grep_args+=(-e "^${word}$")
|
||||
fi
|
||||
done
|
||||
if [[ ${#grep_args[@]} -gt 0 ]]; then
|
||||
info "removing unused words from ${project_dictionary}"
|
||||
res=$(grep -Ev "${grep_args[@]}" "${project_dictionary}")
|
||||
printf '%s\n' "${res}" >|"${project_dictionary}"
|
||||
fi
|
||||
else
|
||||
unused=''
|
||||
for word in $(grep -Ev '^//.*' "${project_dictionary}" || true); do
|
||||
if ! grep -Eqi "^${word}$" <<<"${all_words}"; then
|
||||
unused+="${word}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${unused}" ]]; then
|
||||
error "unused words in dictionaries; please remove the following words from ${project_dictionary} or run ${0##*/} with REMOVE_UNUSED_WORDS=1"
|
||||
printf '=======================================\n'
|
||||
printf '%s' "${unused}"
|
||||
printf '=======================================\n'
|
||||
fi
|
||||
fi
|
||||
if [[ -n "${dependencies_words:-}" ]]; then
|
||||
echo $'\n'"${dependencies_words}" >>.github/.cspell/rust-dependencies.txt
|
||||
fi
|
||||
if [[ -z "${REMOVE_UNUSED_WORDS:-}" ]]; then
|
||||
check_diff .github/.cspell/rust-dependencies.txt
|
||||
fi
|
||||
if ! grep -Fq '.github/.cspell/rust-dependencies.txt linguist-generated' .gitattributes; then
|
||||
error "you may want to mark .github/.cspell/rust-dependencies.txt linguist-generated"
|
||||
fi
|
||||
|
||||
info "running \`npx -y cspell --no-progress --no-summary \$(git ls-files)\`"
|
||||
if ! npx -y cspell --no-progress --no-summary $(git ls-files); then
|
||||
error "spellcheck failed: please fix uses of above words or add to ${project_dictionary} if correct"
|
||||
fi
|
||||
|
||||
# Make sure the project-specific dictionary does not contain duplicated words.
|
||||
for dictionary in .github/.cspell/*.txt; do
|
||||
if [[ "${dictionary}" == "${project_dictionary}" ]]; then
|
||||
continue
|
||||
fi
|
||||
dup=$(sed '/^$/d' "${project_dictionary}" "${dictionary}" | LC_ALL=C sort -f | uniq -d -i | (grep -v '//.*' || true))
|
||||
if [[ -n "${dup}" ]]; then
|
||||
error "duplicated words in dictionaries; please remove the following words from ${project_dictionary}"
|
||||
echo "======================================="
|
||||
echo "${dup}"
|
||||
echo "======================================="
|
||||
fi
|
||||
done
|
||||
|
||||
# Make sure the project-specific dictionary does not contain unused words.
|
||||
if [[ -n "${REMOVE_UNUSED_WORDS:-}" ]]; then
|
||||
grep_args=()
|
||||
for word in $(grep -Ev '^//.*' "${project_dictionary}" || true); do
|
||||
if ! grep -Eqi "^${word}$" <<<"${all_words}"; then
|
||||
grep_args+=(-e "^${word}$")
|
||||
fi
|
||||
done
|
||||
if [[ ${#grep_args[@]} -gt 0 ]]; then
|
||||
info "removing unused words from ${project_dictionary}"
|
||||
res=$(grep -Ev "${grep_args[@]}" "${project_dictionary}")
|
||||
printf '%s\n' "${res}" >|"${project_dictionary}"
|
||||
fi
|
||||
else
|
||||
unused=''
|
||||
for word in $(grep -Ev '^//.*' "${project_dictionary}" || true); do
|
||||
if ! grep -Eqi "^${word}$" <<<"${all_words}"; then
|
||||
unused+="${word}"$'\n'
|
||||
fi
|
||||
done
|
||||
if [[ -n "${unused}" ]]; then
|
||||
error "unused words in dictionaries; please remove the following words from ${project_dictionary} or run ${0##*/} with REMOVE_UNUSED_WORDS=1"
|
||||
printf '=======================================\n'
|
||||
printf '%s' "${unused}"
|
||||
printf '=======================================\n'
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${should_fail:-}" ]]; then
|
||||
exit 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -eEuo pipefail
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
cd "$(dirname "$0")"/..
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/..
|
||||
|
||||
# Update markdown
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user