Skip to content

Run nit on this repo in CI #38

Run nit on this repo in CI

Run nit on this repo in CI #38

Workflow file for this run

name: Build
on:
push:
branches: [master]
pull_request:
branches: [master]
workflow_dispatch:
inputs:
version:
description: "Version to release, e.g. 1.0.0. Leave empty for no release."
required: false
notes:
description: "Release notes"
required: false
prerelease:
description: "Is this a pre-release (beta, RC, etc.)?"
required: false
type: boolean
draft:
description: "Is this a draft release (not public; you can publish it later)?"
required: false
type: boolean
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# Main build job. Builds Nit binaries for every supported platform.
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
cargo_extra_flags: --target x86_64-unknown-linux-musl
output_executable: target/x86_64-unknown-linux-musl/release/nit
output_executable_upload_as: nit-linux
- os: macos-latest
output_executable: target/release/nit
output_executable_upload_as: nit-mac
- os: windows-latest
output_executable: target/release/nit.exe
output_executable_upload_as: nit-windows.exe
steps:
- name: Install Musl target
if: ${{ matrix.os == 'ubuntu-latest' }}
run: |
sudo apt-get install musl-tools
rustup target add x86_64-unknown-linux-musl
musl-gcc --version
- uses: actions/checkout@v4
- name: Versions
run: |
git version
cargo version
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Build
run: cargo build --verbose --release --locked ${{ matrix.cargo_extra_flags }}
- name: Test
run: cargo test --verbose --release --locked ${{ matrix.cargo_extra_flags }}
- name: Lint this repo
run: cargo run --release --locked -- run
- name: Rename Output
shell: pwsh
run: Move-Item -Path "${{ matrix.output_executable }}" -Destination "target/${{ matrix.output_executable_upload_as }}"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: release-${{ matrix.os }}
path: "target/${{ matrix.output_executable_upload_as }}"
if-no-files-found: error
# Build first party linters as WASI binaries.
build_lints:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Versions
run: |
git version
cargo version
- name: Install WASI target
run: rustup target add wasm32-wasip2
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Build and test
run: |
cargo test --package lint_case_conflict
cargo test --package lint_deny
cargo test --package lint_executable_shebang
cargo test --package lint_json_format
cargo test --package lint_merge_conflicts
cargo test --package lint_regex
cargo test --package lint_tabs
cargo test --package lint_whitespace
- name: Build release WASI
run: |
cargo build --release --target wasm32-wasip2 --package lint_case_conflict
cargo build --release --target wasm32-wasip2 --package lint_deny
cargo build --release --target wasm32-wasip2 --package lint_executable_shebang
cargo build --release --target wasm32-wasip2 --package lint_json_format
cargo build --release --target wasm32-wasip2 --package lint_merge_conflicts
cargo build --release --target wasm32-wasip2 --package lint_regex
cargo build --release --target wasm32-wasip2 --package lint_tabs
cargo build --release --target wasm32-wasip2 --package lint_whitespace
- name: Set metadata
run: |
# cargo run -- set-metadata --metadata lints/lint_case_conflict/metadata.json target/wasm32-wasip2/release/lint_case_conflict.wasm
cargo run -- set-metadata --metadata lints/lint_deny/metadata.json target/wasm32-wasip2/release/lint_deny.wasm
# cargo run -- set-metadata --metadata lints/lint_executable_shebang/metadata.json target/wasm32-wasip2/release/lint_executable_shebang.wasm
cargo run -- set-metadata --metadata lints/lint_json_format/metadata.json target/wasm32-wasip2/release/lint_json_format.wasm
# cargo run -- set-metadata --metadata lints/lint_merge_conflicts/metadata.json target/wasm32-wasip2/release/lint_merge_conflicts.wasm
cargo run -- set-metadata --metadata lints/lint_regex/metadata.json target/wasm32-wasip2/release/lint_regex.wasm
# cargo run -- set-metadata --metadata lints/lint_tabs/metadata.json target/wasm32-wasip2/release/lint_tabs.wasm
cargo run -- set-metadata --metadata lints/lint_whitespace/metadata.json target/wasm32-wasip2/release/lint_whitespace.wasm
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: release-lints
path: |
target/wasm32-wasip2/release/lint_*.wasm
if-no-files-found: error
release:
# Only run this job fork workflow_dispatch, and only if a version is provided.
if: ${{ inputs && inputs.version != '' }}
needs: [build, build_lints]
runs-on: ubuntu-latest
permissions:
# Required to create a release.
contents: write
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
- name: List artifacts
run: |
ls -R
- name: Create release
uses: softprops/action-gh-release@v2
with:
# The common prefixes of the artifacts get stripped, and then they
# get extracted into directories with the same name as the artifact.
files: |
release-ubuntu-latest/nit-linux
release-macos-latest/nit-mac
release-windows-latest/nit-windows.exe
release-lints/lint_*.wasm
fail_on_unmatched_files: true
tag_name: ${{ inputs.version }}
body: ${{ inputs.notes }}
prerelease: ${{ inputs.prerelease }}
draft: ${{ inputs.draft }}