lade 0.15.3

Automatically load secrets from your preferred vault as environment variables, and clear them once your shell command is over.
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

  # End-to-end install against real published releases. It needs network and an
  # existing release, both outside our control, so it is non-blocking
  # (continue-on-error): a flake or a transient GitHub outage must not block a PR.
  # The deterministic coverage lives in the required `installer-unit` job above.
  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
      # Fetch installer.sh from the exact pushed commit (the PR's head) and run
      # the published curl|bash one-liner against it, installing the latest
      # release. This validates the script as a user would fetch it for this MR.
      - 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