diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml
index b06b7527..4624b164 100644
--- a/.github/workflows/autofix.yml
+++ b/.github/workflows/autofix.yml
@@ -13,9 +13,14 @@ on:
permissions:
contents: read
+concurrency:
+ group: autofix-${{ github.head_ref || github.ref_name }}
+ cancel-in-progress: true
+
jobs:
autofix:
runs-on: ubuntu-latest
+ timeout-minutes: 10
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
diff --git a/.github/workflows/ci-dataset.yml b/.github/workflows/ci-dataset.yml
index 19f11e52..4540901c 100644
--- a/.github/workflows/ci-dataset.yml
+++ b/.github/workflows/ci-dataset.yml
@@ -20,11 +20,14 @@ permissions: {}
jobs:
schema:
runs-on: ubuntu-latest
+ timeout-minutes: 30
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
- name: Install check-jsonschema
run: pipx install check-jsonschema
@@ -53,16 +56,22 @@ jobs:
check-jsonschema --schemafile docs/schemas/profiles.schema.json "${files[@]}"
fi
+ - name: Summary
+ run: echo "### ✅ Schema validation - positions, stations & profiles" >> $GITHUB_STEP_SUMMARY
+
validate:
runs-on: ubuntu-latest
+ timeout-minutes: 30
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
- name: Rust toolchain
- uses: dtolnay/rust-toolchain@stable
+ run: rustup toolchain install stable --profile minimal --no-self-update
- name: Cache cargo
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
@@ -72,3 +81,6 @@ jobs:
- name: Validate dataset
run: cargo run --quiet --release --locked --bin vacs-data --manifest-path tools/Cargo.toml -- --log-format github validate dataset/
+
+ - name: Summary
+ run: echo "### ✅ Dataset validation - all files valid" >> $GITHUB_STEP_SUMMARY
diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml
index 5a7b5438..17c27ef8 100644
--- a/.github/workflows/ci-rust.yml
+++ b/.github/workflows/ci-rust.yml
@@ -34,7 +34,9 @@ defaults:
jobs:
cargo-deny:
runs-on: ubuntu-latest
+ timeout-minutes: 30
strategy:
+ fail-fast: false
matrix:
checks:
- advisories
@@ -55,8 +57,12 @@ jobs:
command: check ${{ matrix.checks }}
command-arguments: "--config tools/deny.toml"
+ - name: Summary
+ run: echo "### ✅ Cargo Deny - ${{ matrix.checks }}" >> $GITHUB_STEP_SUMMARY
+
cargo-machete:
runs-on: ubuntu-latest
+ timeout-minutes: 30
continue-on-error: true
steps:
- name: Checkout
@@ -65,32 +71,97 @@ jobs:
fetch-depth: 0
persist-credentials: false
+ - name: Install cargo-machete
+ run: cargo install cargo-machete --locked
+
- name: cargo machete
- uses: bnjbvr/cargo-machete@7959c845782fed02ee69303126d4a12d64f1db18 # v0.9.1
+ run: cargo machete
+
+ - name: Summary
+ run: echo "### ✅ Cargo Machete - no unused dependencies" >> $GITHUB_STEP_SUMMARY
+
+ fmt:
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ permissions:
+ contents: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: Rust toolchain
+ run: rustup toolchain install stable --profile minimal --no-self-update --component rustfmt
+
+ - name: Format
+ run: cargo fmt --all -- --check
+
+ - name: Summary
+ run: echo "### ✅ Rustfmt - all files formatted" >> $GITHUB_STEP_SUMMARY
check:
runs-on: ubuntu-latest
+ timeout-minutes: 30
+ permissions:
+ contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
- name: Rust toolchain
- uses: dtolnay/rust-toolchain@stable
- with:
- components: clippy, rustfmt
+ run: rustup toolchain install stable --profile minimal --no-self-update
- name: Cache cargo
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
+
+ - name: Tests
+ run: cargo test --locked --workspace --all-targets --all-features
+
+ - name: Summary
+ run: echo "### ✅ Tests - all workspace tests passed" >> $GITHUB_STEP_SUMMARY
+
+ clippy:
+ timeout-minutes: 30
+ permissions:
+ contents: read
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - platform: "ubuntu-22.04"
+ arch: "x86_64"
+ target: "x86_64-unknown-linux-gnu"
+ - platform: "windows-latest"
+ arch: "x86_64"
+ target: "x86_64-pc-windows-msvc"
+ - platform: "macos-latest"
+ arch: "aarch64"
+ target: "aarch64-apple-darwin" # for Arm based macs (M1 and above).
+
+ runs-on: ${{ matrix.platform }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
- shared-key: "linux-x86_64"
- workspaces: "tools -> target"
+ persist-credentials: false
- - name: Format
- run: cargo fmt --all -- --check
+ - name: Rust toolchain
+ run: |
+ rustup toolchain install stable --profile minimal --no-self-update --component clippy
+ rustup target add ${{ matrix.target }}
+
+ - name: Cache cargo
+ uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
+ with:
+ shared-key: ${{ matrix.platform }}-${{ matrix.arch }}
- name: Clippy
- run: cargo clippy --workspace --all-targets --all-features -- -D warnings
+ run: cargo clippy --locked --workspace --all-targets --all-features --target ${{ matrix.target }} -- -D warnings
- - name: Tests
- run: cargo test --workspace --all-targets --all-features
+ - name: Summary
+ run: echo "### ✅ Clippy - ${{ matrix.platform }} (${{ matrix.arch }})" >> $GITHUB_STEP_SUMMARY
diff --git a/.github/workflows/deploy-dataset.yml b/.github/workflows/deploy-dataset.yml
index 8ac5cecb..bcd5f1c2 100644
--- a/.github/workflows/deploy-dataset.yml
+++ b/.github/workflows/deploy-dataset.yml
@@ -30,6 +30,7 @@ jobs:
deploy-dev:
name: Deploy to dev
needs: validate
+ timeout-minutes: 10
if: >-
(github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/'))
|| (github.event_name == 'workflow_dispatch' && inputs.environment == 'dev')
@@ -46,6 +47,7 @@ jobs:
with:
sparse-checkout: .github/actions
sparse-checkout-cone-mode: false
+ persist-credentials: false
- name: Deploy dataset
uses: ./.github/actions/deploy-dataset
@@ -90,6 +92,7 @@ jobs:
deploy-production:
name: Deploy to production
needs: validate
+ timeout-minutes: 10
if: >-
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/airac-'))
|| (github.event_name == 'workflow_dispatch' && inputs.environment == 'production')
@@ -123,6 +126,7 @@ jobs:
with:
sparse-checkout: .github/actions
sparse-checkout-cone-mode: false
+ persist-credentials: false
- name: Deploy dataset
uses: ./.github/actions/deploy-dataset
diff --git a/.github/workflows/release-tools.yml b/.github/workflows/release-tools.yml
index 1e6843da..ac22c3a0 100644
--- a/.github/workflows/release-tools.yml
+++ b/.github/workflows/release-tools.yml
@@ -26,6 +26,7 @@ defaults:
jobs:
prep:
runs-on: ubuntu-latest
+ timeout-minutes: 60
permissions:
contents: read
outputs:
@@ -41,13 +42,16 @@ jobs:
with:
fetch-depth: 0
ref: ${{ inputs.ref }}
+ persist-credentials: false
- name: Resolve version & tag
id: vars
shell: bash
+ env:
+ INPUT_VERSION: ${{ inputs.version }}
run: |
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
- RAW="${{ inputs.version }}"
+ RAW="${INPUT_VERSION}"
else
RAW="${GITHUB_REF_NAME}" # e.g. vacs-data-v1.2.3
fi
@@ -85,6 +89,7 @@ jobs:
generate-changelog:
runs-on: ubuntu-latest
+ timeout-minutes: 60
permissions:
contents: read
outputs:
@@ -94,6 +99,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
+ persist-credentials: false
- name: Generate a changelog
uses: orhun/git-cliff-action@c93ef52f3d0ddcdcc9bd5447d98d458a11cd4f72 # v4.7.1
@@ -102,10 +108,39 @@ jobs:
config: tools/cliff.toml
args: -vv --latest --no-exec --github-repo ${{ github.repository }}
+ licenses:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ permissions:
+ contents: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: Rust toolchain
+ run: rustup toolchain install stable --profile minimal --no-self-update
+
+ - name: Install cargo-about
+ run: cargo install cargo-about --locked
+
+ - name: Generate third-party license file
+ run: cargo about generate --workspace -o THIRD_PARTY_LICENSES.html about.hbs
+
+ - name: Upload licenses artifact
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+ with:
+ name: third-party-licenses
+ path: THIRD_PARTY_LICENSES.html
+ if-no-files-found: error
+ retention-days: 30
+
build:
needs: [prep]
name: Build ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
+ timeout-minutes: 60
permissions:
contents: read
attestations: write
@@ -132,9 +167,9 @@ jobs:
persist-credentials: false
- name: Rust toolchain
- uses: dtolnay/rust-toolchain@stable
- with:
- targets: ${{ matrix.target }}
+ run: |
+ rustup toolchain install stable --profile minimal --no-self-update
+ rustup target add ${{ matrix.target }}
- name: Cache cargo
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
@@ -144,14 +179,17 @@ jobs:
- name: Set binary name
id: vars
+ env:
+ PLATFORM: ${{ matrix.platform }}
+ VERSION: ${{ needs.prep.outputs.version }}
run: |
EXT=""
- if [[ "${{ matrix.platform }}" == *"windows"* ]]; then
+ if [[ "$PLATFORM" == *"windows"* ]]; then
EXT=".exe"
fi
echo "binary_name=vacs-data$EXT" >> "$GITHUB_OUTPUT"
- echo "release_binary_name=vacs-data-${{ needs.prep.outputs.version }}-${{ matrix.platform }}$EXT" >> "$GITHUB_OUTPUT"
+ echo "release_binary_name=vacs-data-${VERSION}-${PLATFORM}$EXT" >> "$GITHUB_OUTPUT"
- name: Build binary
run: cargo build --release --locked --bin vacs-data --target ${{ matrix.target }}
@@ -169,19 +207,38 @@ jobs:
path: |
tools/target/${{ matrix.target }}/release/${{ steps.vars.outputs.release_binary_name }}
+ - name: Generate SBOM
+ uses: anchore/sbom-action@17ae1740179002c89186b61233e0f892c3118b11 # v0.23.0
+ with:
+ path: tools
+ format: spdx-json
+ output-file: sbom.spdx.json
+ upload-artifact: false
+
- name: Attest build provenance
if: ${{ !github.event.repository.private || github.event.repository.owner.type == 'Organization' }}
- uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
+ uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0
+ with:
+ subject-path: |
+ tools/target/${{ matrix.target }}/release/${{ steps.vars.outputs.release_binary_name }}
+
+ - name: Attest SBOM
+ if: ${{ !github.event.repository.private || github.event.repository.owner.type == 'Organization' }}
+ uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0
with:
subject-path: |
tools/target/${{ matrix.target }}/release/${{ steps.vars.outputs.release_binary_name }}
+ sbom-path: sbom.spdx.json
release:
- needs: [prep, generate-changelog, build]
+ needs: [prep, generate-changelog, build, licenses]
runs-on: ubuntu-latest
+ timeout-minutes: 60
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
+ attestations: write
+ id-token: write
steps:
- name: Download binaries
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
@@ -190,14 +247,42 @@ jobs:
pattern: vacs-data-*
merge-multiple: true
+ - name: Download license file
+ uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
+ with:
+ name: third-party-licenses
+ path: dist
+
- name: Generate checksums
working-directory: dist
+ env:
+ VERSION: ${{ needs.prep.outputs.version }}
run: |
+ out="SHA256SUMS-${VERSION}.txt"
+ : > "$out"
for f in *; do
- [[ "$f" == *.sha512 ]] && continue
- shasum -a 512 "$f" > "$f.sha512"
+ [[ "$f" == SHA256SUMS* || "$f" == *.html ]] && continue
+ sum=$(shasum -a 256 "$f" | cut -d' ' -f1)
+ echo "$sum $f" >> "$out"
done
+ - name: Install Cosign
+ uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
+
+ - name: Sign checksums using Cosign with GitHub OIDC Token
+ working-directory: dist
+ env:
+ VERSION: ${{ needs.prep.outputs.version }}
+ run: |
+ cosign sign-blob --yes \
+ --bundle "SHA256SUMS-${VERSION}.txt.bundle.json" \
+ "SHA256SUMS-${VERSION}.txt"
+
+ - name: Attest release artifacts
+ uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0
+ with:
+ subject-checksums: dist/SHA256SUMS-${{ needs.prep.outputs.version }}.txt
+
- name: Create/update GitHub release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
with:
diff --git a/.github/workflows/tag-airac.yml b/.github/workflows/tag-airac.yml
index 29286023..b9088a3f 100644
--- a/.github/workflows/tag-airac.yml
+++ b/.github/workflows/tag-airac.yml
@@ -10,11 +10,14 @@ permissions: {}
jobs:
tag:
runs-on: ubuntu-latest
+ timeout-minutes: 10
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
- name: Check for AIRAC cycle
id: check
diff --git a/README.md b/README.md
index 7842150e..6035eced 100644
--- a/README.md
+++ b/README.md
@@ -40,14 +40,14 @@ The dataset content of this repository is [licensed](LICENSE) under the **[Creat
**This means you are free to:**
-- **Share** — copy and redistribute the material in any medium or format.
-- **Adapt** — remix, transform, and build upon the material.
+- **Share** - copy and redistribute the material in any medium or format.
+- **Adapt** - remix, transform, and build upon the material.
**Under the following validation terms:**
-- **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made.
-- **NonCommercial** — You may not use the material for commercial purposes.
-- **ShareAlike** — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
+- **Attribution** - You must give appropriate credit, provide a link to the license, and indicate if changes were made.
+- **NonCommercial** - You may not use the material for commercial purposes.
+- **ShareAlike** - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
### Tools license
diff --git a/tools/.gitignore b/tools/.gitignore
index 674fc7aa..59ad5bd4 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -134,3 +134,6 @@ target/
# Patch cargo dependencies to use local vacs packages during development
/.cargo/config.toml
+
+# Generated license file
+THIRD_PARTY_LICENSES.html
diff --git a/tools/Cargo.lock b/tools/Cargo.lock
index 73452dfa..d933d3ba 100644
--- a/tools/Cargo.lock
+++ b/tools/Cargo.lock
@@ -61,6 +61,18 @@ dependencies = [
"windows-sys",
]
+[[package]]
+name = "anyhow"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+
+[[package]]
+name = "bitflags"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+
[[package]]
name = "bumpalo"
version = "3.19.1"
@@ -162,16 +174,32 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+[[package]]
+name = "foldhash"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
[[package]]
name = "getrandom"
-version = "0.3.4"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
"libc",
"r-efi",
"wasip2",
+ "wasip3",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+dependencies = [
+ "foldhash",
]
[[package]]
@@ -186,6 +214,12 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+[[package]]
+name = "id-arena"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
+
[[package]]
name = "indexmap"
version = "2.13.0"
@@ -193,7 +227,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [
"equivalent",
- "hashbrown",
+ "hashbrown 0.16.1",
+ "serde",
+ "serde_core",
]
[[package]]
@@ -218,6 +254,12 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "leb128fmt"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
+
[[package]]
name = "libc"
version = "0.2.180"
@@ -254,6 +296,16 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
[[package]]
name = "proc-macro2"
version = "1.0.106"
@@ -274,9 +326,9 @@ dependencies = [
[[package]]
name = "r-efi"
-version = "5.3.0"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "regex"
@@ -313,6 +365,12 @@ version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+[[package]]
+name = "semver"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+
[[package]]
name = "serde"
version = "1.0.228"
@@ -402,21 +460,6 @@ dependencies = [
"syn",
]
-[[package]]
-name = "toml"
-version = "0.9.11+spec-1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46"
-dependencies = [
- "indexmap",
- "serde_core",
- "serde_spanned",
- "toml_datetime 0.7.5+spec-1.1.0",
- "toml_parser",
- "toml_writer",
- "winnow",
-]
-
[[package]]
name = "toml"
version = "1.0.3+spec-1.1.0"
@@ -426,21 +469,12 @@ dependencies = [
"indexmap",
"serde_core",
"serde_spanned",
- "toml_datetime 1.0.0+spec-1.1.0",
+ "toml_datetime",
"toml_parser",
"toml_writer",
"winnow",
]
-[[package]]
-name = "toml_datetime"
-version = "0.7.5+spec-1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
-dependencies = [
- "serde_core",
-]
-
[[package]]
name = "toml_datetime"
version = "1.0.0+spec-1.1.0"
@@ -509,6 +543,12 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
[[package]]
name = "utf8parse"
version = "0.2.2"
@@ -517,9 +557,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.20.0"
+version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f"
+checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb"
dependencies = [
"getrandom",
"js-sys",
@@ -553,7 +593,7 @@ dependencies = [
"encoding_rs_io",
"serde",
"serde_json",
- "toml 1.0.3+spec-1.1.0",
+ "toml",
"vacs-data-diagnostics",
"vacs-protocol",
"vacs-vatsim",
@@ -570,8 +610,8 @@ dependencies = [
[[package]]
name = "vacs-protocol"
-version = "1.1.0"
-source = "git+https://github.com/vacs-project/vacs?branch=v2#5336e4d2af83de97c031c7f9ff0ba95c7b241866"
+version = "0.0.0"
+source = "git+https://github.com/vacs-project/vacs?tag=vacs-server-v2.0.0#dd47a8cb0e628ce778fb1e29a6ee5c8914c0f706"
dependencies = [
"serde",
"serde_json",
@@ -580,14 +620,14 @@ dependencies = [
[[package]]
name = "vacs-vatsim"
-version = "0.2.1"
-source = "git+https://github.com/vacs-project/vacs?branch=v2#5336e4d2af83de97c031c7f9ff0ba95c7b241866"
+version = "0.0.0"
+source = "git+https://github.com/vacs-project/vacs?tag=vacs-server-v2.0.0#dd47a8cb0e628ce778fb1e29a6ee5c8914c0f706"
dependencies = [
"regex",
"serde",
"serde_json",
"thiserror",
- "toml 0.9.11+spec-1.1.0",
+ "toml",
"tracing",
"vacs-protocol",
]
@@ -601,6 +641,15 @@ dependencies = [
"wit-bindgen",
]
+[[package]]
+name = "wasip3"
+version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+dependencies = [
+ "wit-bindgen",
+]
+
[[package]]
name = "wasm-bindgen"
version = "0.2.108"
@@ -646,6 +695,40 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "wasm-encoder"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
+dependencies = [
+ "leb128fmt",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasm-metadata"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
+dependencies = [
+ "anyhow",
+ "indexmap",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+dependencies = [
+ "bitflags",
+ "hashbrown 0.15.5",
+ "indexmap",
+ "semver",
+]
+
[[package]]
name = "windows-link"
version = "0.2.1"
@@ -672,6 +755,88 @@ name = "wit-bindgen"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+dependencies = [
+ "wit-bindgen-rust-macro",
+]
+
+[[package]]
+name = "wit-bindgen-core"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
+dependencies = [
+ "anyhow",
+ "heck",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-bindgen-rust"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
+dependencies = [
+ "anyhow",
+ "heck",
+ "indexmap",
+ "prettyplease",
+ "syn",
+ "wasm-metadata",
+ "wit-bindgen-core",
+ "wit-component",
+]
+
+[[package]]
+name = "wit-bindgen-rust-macro"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
+dependencies = [
+ "anyhow",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wit-bindgen-core",
+ "wit-bindgen-rust",
+]
+
+[[package]]
+name = "wit-component"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "indexmap",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "wasm-encoder",
+ "wasm-metadata",
+ "wasmparser",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-parser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "indexmap",
+ "log",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "unicode-xid",
+ "wasmparser",
+]
[[package]]
name = "zmij"
diff --git a/tools/Cargo.toml b/tools/Cargo.toml
index 77a18648..c9a79b35 100644
--- a/tools/Cargo.toml
+++ b/tools/Cargo.toml
@@ -23,5 +23,5 @@ tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] }
vacs-data-diagnostics = { path = "./diagnostics" }
vacs-data-importer = { path = "./importer" }
vacs-data-validator = { path = "./validator" }
-vacs-protocol = { git = "https://github.com/vacs-project/vacs", branch = "v2", default-features = false, features = ["vatsim"] }
-vacs-vatsim = { git = "https://github.com/vacs-project/vacs", branch = "v2", default-features = false, features = ["coverage"] }
+vacs-protocol = { git = "https://github.com/vacs-project/vacs", tag = "vacs-server-v2.0.0", default-features = false, features = ["vatsim"] }
+vacs-vatsim = { git = "https://github.com/vacs-project/vacs", tag = "vacs-server-v2.0.0", default-features = false, features = ["coverage"] }
diff --git a/tools/about.hbs b/tools/about.hbs
new file mode 100644
index 00000000..c499e9cd
--- /dev/null
+++ b/tools/about.hbs
@@ -0,0 +1,54 @@
+{{! Handlebars template for cargo-about – produces standalone HTML. }}
+
+
+
+ Third-Party Licenses
+
+
+
+
+
+
Third-Party Licenses
+
This document lists the licenses of all third-party Rust crates
+ used by the vacs-data tools.
+
+
+ Overview of licenses:
+
+ {{#each overview}}
+ - {{name}} ({{count}})
+ {{/each}}
+
+
+ All license text:
+
+
+
+
diff --git a/tools/about.toml b/tools/about.toml
new file mode 100644
index 00000000..b97fd39a
--- /dev/null
+++ b/tools/about.toml
@@ -0,0 +1,20 @@
+# Priority-ordered list of globally accepted licenses.
+# cargo-about picks the first match, so MIT is preferred over Apache-2.0
+# when a crate offers both.
+accepted = [
+ "MIT",
+ "Apache-2.0",
+]
+
+ignore-build-dependencies = false
+ignore-dev-dependencies = false
+ignore-transitive-dependencies = false
+filter-noassertion = true
+
+private = { ignore = true }
+
+[encoding_rs]
+accepted = ["BSD-3-Clause"]
+
+[unicode-ident]
+accepted = ["Unicode-3.0"]