Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/ktlint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"problemMatcher": [
{
"owner": "ktlint",
"pattern": [
{
"regexp": "(.*?):(\\d+):(\\d+): (.*?) \\(([-:\\w]+)\\)$",
"file": 1,
"line": 2,
"column": 3,
"code": 5,
"message": 4
}
]
}
]
}
314 changes: 314 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,47 @@ jobs:
permissions:
contents: read
outputs:
docs-changed: ${{ steps.set-flags.outputs.docs-changed }}
yaml-changed: ${{ steps.set-flags.outputs.yaml-changed }}
cargo-changed: ${{ steps.set-flags.outputs.cargo-changed }}
metrics-changed: ${{ steps.set-flags.outputs.metrics-changed }}
rust-changed: ${{ steps.set-flags.outputs.rust-changed }}
kotlin-changed: ${{ steps.set-flags.outputs.kotlin-changed }}
python-changed: ${{ steps.set-flags.outputs.python-changed }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
filter: blob:none
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- id: changed-files-docs
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
**/*.md
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-yaml
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
glean-core/**/*.yml
glean-core/**/*.yaml
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-cargo
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
**/Cargo.toml
Cargo.lock
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-metrics
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
glean-core/**/pings.yaml
glean-core/**/metrics.yaml
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-rust
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
Expand All @@ -42,12 +75,39 @@ jobs:
**/Cargo.lock
**/*.rs
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-kotlin
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
**/*.kt
**/*.gradle
gradle-wrapper/**
**/*.groovy
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- id: changed-files-python
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
files: |
glean-core/**/*.py
base_sha: ${{ github.event.pull_request.base.sha || github.event.before }}
- name: Decide which jobs to run
id: set-flags
env:
DOCS_CHANGED: ${{ steps.changed-files-docs.outputs.any_changed }}
YAML_CHANGED: ${{ steps.changed-files-yaml.outputs.any_changed }}
CARGO_CHANGED: ${{ steps.changed-files-cargo.outputs.any_changed }}
METRICS_CHANGED: ${{ steps.changed-files-metrics.outputs.any_changed }}
RUST_CHANGED: ${{ steps.changed-files-rust.outputs.any_changed }}
KOTLIN_CHANGED: ${{ steps.changed-files-kotlin.outputs.any_changed }}
PYTHON_CHANGED: ${{ steps.changed-files-python.outputs.any_changed }}
run: |
echo "docs-changed=$DOCS_CHANGED" >> $GITHUB_OUTPUT
echo "yaml-changed=$YAML_CHANGED" >> $GITHUB_OUTPUT
echo "cargo-changed=$CARGO_CHANGED" >> $GITHUB_OUTPUT
echo "metrics-changed=$METRICS_CHANGED" >> $GITHUB_OUTPUT
echo "rust-changed=$RUST_CHANGED" >> $GITHUB_OUTPUT
echo "kotlin-changed=$KOTLIN_CHANGED" >> $GITHUB_OUTPUT
echo "python-changed=$PYTHON_CHANGED" >> $GITHUB_OUTPUT

test-rust:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -94,3 +154,257 @@ jobs:

echo "::add-matcher::.github/rust.json"
make test-rust

spelling:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.docs-changed == 'true'
steps:
- *checkout

- name: Install aspell
run: |
sudo apt update
sudo apt install aspell aspell-en

- name: Check documentation spelling
run: bin/spellcheck.sh list

docs:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.docs-changed == 'true'
steps:
- *checkout
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
cache-bin: true

- name: Set up Python
id: setup_python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.10"
cache: 'pip'
cache-dependency-path: |
glean-core/python/requirements_dev.txt

- name: Install mdbook-dtmo
run: |
cargo install mdbook-dtmo --version 0.15.2
cp ~/.cargo/bin/mdbook-dtmo ~/.cargo/bin/mdbook

- name: Version information
run: |
rustc --version
cargo --version
rustup --version
mdbook --version

- name: Build Rust documentation
run: |
bin/build-rust-docs.sh

- name: Generate Python docs
run: |
make docs-python

- name: Install linkchecker
run: |
npm install link-checker

- name: Check internal documentation links
run: |
make linkcheck-raw

lint-yaml:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.yaml-changed == 'true'
steps:
- &checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
filter: blob:none
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Install the latest version of uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0

- name: Install yamllint
run: |
uv tool install yamllint

- name: Lint YAML
run: |
make lint-yaml

lint-licenses:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.cargo-changed == 'true'
steps:
- *checkout

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
cache-bin: true

- name: Install cargo-deny
run: cargo install cargo-deny --version 0.19.9

- name: Run license check
run: cargo deny check licenses

- name: Run dependency ban check
run: cargo deny check bans

lint-schema:
runs-on: ubuntu-latest
needs: [decide-runs]
steps:
- *checkout

- name: Check vendored schema for upstream updates
run: |
bin/update-schema.sh HEAD
if ! git diff --exit-code HEAD -- glean-core/preview/tests/glean.1.schema.json; then
echo "===================================="
echo "Latest schema from upstream changed."
echo "Please regenerate the file using:"
echo " bin/update-schema.sh latest"
echo "Commit the modified files and push."
echo "===================================="
exit 1
fi

lint-rust:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.rust-changed == 'true'
steps:
- *checkout

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "${{ env.MSRV }}"
components: clippy

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

- run: cargo clippy --version

- name: Clippy
run: |
echo "::add-matcher::.github/rust.json"
make lint-rust

lint-python:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.python-changed == 'true'
steps:
- *checkout

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "stable"

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

- name: Install the latest version of uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0

- name: Lint Python
run: make lint-python

lint-internal-metrics:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.metrics-changed == 'true'
steps:
- *checkout

- name: Install the latest version of uv
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0

- name: Internal metrics docs consistency check
run: |
make docs-metrics
if ! git diff --exit-code HEAD -- docs/user/collected-metrics/metrics.md; then
echo "=================================================="
echo "metrics.md is different from what's stored in git."
echo "Please regenerate the file using:"
echo " make docs-metrics"
echo "Commit the modified file and push."
echo "=================================================="
exit 1
fi

lint-kotlin:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.kotlin-changed == 'true'
steps:
- *checkout

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

- name: Set up JDK 17
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5.6.0
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Android SDK
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
with:
accept-android-sdk-licenses: true
log-accepted-android-sdk-licenses: false

- name: Install Android NDK
run: |
sdkmanager "ndk;29.0.14206865"

- name: Restrict to Linux builds only
run: |
echo "rust.targets=linux-x86-64" > local.properties

- name: Gradle lint
run: |
echo "::add-matcher::.github/ktlint.json"
./gradlew --no-daemon lint ktlint detekt

fmt-rust:
runs-on: ubuntu-latest
needs: [decide-runs]
if: needs.decide-runs.outputs.rust-changed == 'true'
steps:
- *checkout

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "${{ env.MSRV }}"
components: rustfmt

- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1

- run: rustfmt --version

- name: cargo fmt
run: |
echo "::add-matcher::.github/rust.json"
cargo fmt -- --check
Loading