Skip to content
Merged
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
30 changes: 30 additions & 0 deletions .github/actions/package/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Package archive
description: Package a release binary with project metadata.

inputs:
target:
description: Rust target triple used in the archive name.
required: true

runs:
using: composite
steps:
- name: Package (unix)
if: runner.os != 'Windows'
shell: bash
run: |
name="diffs-${{ inputs.target }}"
mkdir -p "dist/${name}"
cp target/release/diffs "dist/${name}/"
cp LICENSE README.md "dist/${name}/"
tar -C "dist/${name}" -czf "dist/${name}.tar.gz" diffs LICENSE README.md

- name: Package (windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$name = "diffs-${{ inputs.target }}"
New-Item -ItemType Directory -Force -Path "dist/$name" | Out-Null
Copy-Item target/release/diffs.exe "dist/$name/"
Copy-Item LICENSE,README.md "dist/$name/"
Compress-Archive -Path "dist/$name/*" -DestinationPath "dist/$name.zip"
161 changes: 112 additions & 49 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,88 +13,151 @@ concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always

jobs:
lint:
name: Lint
web:
name: Build web assets
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Go
uses: actions/setup-go@v6
- name: Setup pnpm
uses: pnpm/action-setup@v6

- name: Setup Node
uses: actions/setup-node@v6
with:
go-version-file: go.mod
cache-dependency-path: go.sum
node-version: 24
cache: pnpm
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Lint web
run: pnpm --dir web lint

- name: Build web
run: pnpm --dir web build

- name: Run golangci-lint
uses: golangci/golangci-lint-action@v9
- name: Upload web assets
uses: actions/upload-artifact@v7
with:
version: v2.12
name: web-dist
path: web/dist
if-no-files-found: error
retention-days: 1

test:
name: Test
fmt:
name: Format
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Setup Node
uses: actions/setup-node@v6
- name: Check formatting
run: cargo fmt --all --check

clippy:
name: Clippy
runs-on: ubuntu-latest
needs: web

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Download web assets
uses: actions/download-artifact@v7
with:
node-version: 24
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
name: web-dist
path: web/dist

- name: Setup Go
uses: actions/setup-go@v6
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
go-version-file: go.mod
cache-dependency-path: go.sum
components: clippy

- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Run clippy
run: cargo clippy --all-targets --all-features --locked -- -D warnings

test:
name: Test
needs: web
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Download web assets
uses: actions/download-artifact@v7
with:
name: web-dist
path: web/dist

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Run tests
run: pnpm test
run: cargo test --all-targets --locked

snapshot:
name: Snapshot build
runs-on: ubuntu-latest
needs:
- lint
- test
name: Release build (${{ matrix.target }})
needs: web
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
- runner: windows-latest
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.runner }}

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Download web assets
uses: actions/download-artifact@v7
with:
fetch-depth: 0
name: web-dist
path: web/dist

- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Build release binary
run: cargo build --release --locked

- name: Run GoReleaser snapshot
uses: goreleaser/goreleaser-action@v7
- name: Package archive
uses: ./.github/actions/package
with:
distribution: goreleaser
version: "~> v2"
args: release --snapshot --clean
target: ${{ matrix.target }}
Loading
Loading