wora 0.0.12

A framework for building applications (daemons, etc) that run in different environments (Linux, Kubernetes, etc).
Documentation
name: ci
on:
  pull_request:
  push:
    branches:
      - master
  schedule:
    - cron: '00 01 * * *'

# The section is needed to drop write-all permissions that are granted on
# `schedule` event. By specifying any permission explicitly all others are set
# to none. By using the principle of least privilege the damage a compromised
# workflow can do (because of an injection or compromised third party tool or
# action) is restricted. Currently, the workflow doesn't need any additional
# permission except for pulling the code. Adding labels to issues, commenting
# on pull-requests, etc. may need additional permissions:
#
# Syntax for this section:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
#
# Reference for how to assign permissions on a job-by-job basis:
# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
#
# Reference for available permissions that we can enable if needed:
# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
permissions:
  # to fetch code (actions/checkout)
  contents: read

jobs:
  # This job does our basic build+test for supported platforms.
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - build: stable
            os: ubuntu-latest
            rust: stable
          - build: beta
            os: ubuntu-latest
            rust: beta
          - build: nightly
            os: ubuntu-latest
            rust: nightly
          - build: macos
            os: macos-latest
            rust: stable

    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - name: Show CPU info for debugging
        if: matrix.os == 'ubuntu-latest'
        run: lscpu
      - name: Basic build
        run: cargo build --verbose
      - name: Build docs
        run: cargo doc --verbose
      - name: Run tests
        run: cargo test --verbose

  # This job runs tests on cross compiled targets.
  #
  # We used to just have one test and do the same thing on normal targets and
  # cross targets, but cross tests can take an obscenely long time. Especially
  # the doc tests, where each one is compiled individually. (We haven't moved
  # to Rust 2024 yet.)
  cross:
    env:
      # Bump this as appropriate. We pin to a version to make sure CI
      # continues to work as cross releases in the past have broken things
      # in subtle ways.
      CROSS_VERSION: v0.2.5
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target:
          - i686-unknown-linux-gnu
          - aarch64-unknown-linux-gnu
          - powerpc-unknown-linux-gnu
          - powerpc64-unknown-linux-gnu
          - s390x-unknown-linux-gnu
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Install and configure Cross
        run: |
          # In the past, new releases of 'cross' have broken CI. So for now, we
          # pin it. We also use their pre-compiled binary releases because cross
          # has over 100 dependencies and takes a bit to compile.
          dir="$RUNNER_TEMP/cross-download"
          mkdir "$dir"
          echo "$dir" >> $GITHUB_PATH
          cd "$dir"
          curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz"
          tar xf cross-x86_64-unknown-linux-musl.tar.gz
      - name: Basic build
        run: cross build --all --verbose --target ${{ matrix.target }}
      - name: Run tests
        run: cross test --verbose --target ${{ matrix.target }}
      - name: Run lib tests
        run: cross test --verbose --lib --target ${{ matrix.target }}

  # Tests that everything is formatted correctly.
  rustfmt:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          components: rustfmt
      - name: Check formatting
        run: |
          cargo fmt --all -- --check