on:
push:
branches:
- main
pull_request:
types:
- opened
- synchronize
- ready_for_review
jobs:
lint:
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
with:
key: lint
- uses: pre-commit/action@v3.0.1
- uses: rhysd/actionlint@v1.7.12
test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
- os: macos-15
- os: windows-2025
runs-on: ${{ matrix.os }}
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: ${{ runner.os }}
- run: |
cargo run -- --help
cargo test --workspace --locked
installer-unit:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v6
- name: Install shellcheck
run: sudo apt-get update && sudo apt-get install -y shellcheck
- name: Run installer unit test
run: bash tests/installer_test.sh
installer-e2e:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
- os: macos-15
- os: windows-2025
runs-on: ${{ matrix.os }}
timeout-minutes: 10
continue-on-error: true
steps:
- uses: actions/checkout@v6
- name: curl|bash the pushed commit (latest)
shell: bash
run: |
set -eu
REF="${{ github.event.pull_request.head.sha || github.sha }}"
REPO="${{ github.event.pull_request.head.repo.full_name || github.repository }}"
mkdir -p "$HOME/lade-curl"
curl -fsSL "https://raw.githubusercontent.com/$REPO/$REF/installer.sh" \
| CI=1 OUT_DIR="$HOME/lade-curl" bash
BIN="$HOME/lade-curl/lade"; [ -x "$BIN" ] || BIN="$BIN.exe"
"$BIN" --version
- name: wget|bash the checked-out installer (latest)
if: runner.os != 'Windows'
shell: bash
run: |
set -eu
command -v wget >/dev/null 2>&1 || { echo "wget unavailable, skipping"; exit 0; }
mkdir -p "$HOME/lade-wget"
CI=1 DOWNLOADER=wget OUT_DIR="$HOME/lade-wget" sh ./installer.sh
"$HOME/lade-wget/lade" --version
test-scripts:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: ubuntu-scripts
- name: Pre-build
run: cargo build --workspace --locked
- name: Set up Docker
uses: docker/setup-docker-action@v5
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bash fish zsh
- name: bash, fish, zsh version
run: |
echo ""
bash --version
echo ""
fish --version
echo ""
zsh --version
- name: Install Vault CLI
run: |
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install -y vault=1.18.3-1
vault --version
- name: Run test vault
run: |
env -i PATH="$PATH" VAULT_TOKEN="token" LADE_VAULT_HTTP=1 bash tests/test_vault.bash
env -i PATH="$PATH" VAULT_TOKEN="token" LADE_VAULT_HTTP=1 zsh tests/test_vault.zsh
env -i PATH="$PATH" VAULT_TOKEN="token" LADE_VAULT_HTTP=1 fish tests/test_vault.fish
- name: Run bash test
run: env -i PATH="$PATH" bash scripts/test.bash
- name: Run zsh test
run: env -i PATH="$PATH" zsh scripts/test.zsh
- name: Run fish test
run: env -i PATH="$PATH" fish scripts/test.fish