wora 0.0.21

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@v7
      - 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

  # Run target binaries directly on compatible hosts. QEMU user mode supplies
  # synthetic /proc/<pid>/stat CPU counters, and the old i686 Cross container
  # fails to create the Unix socket pairs required by Tokio's signal driver.
  cross:
    name: cross (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - target: i686-unknown-linux-gnu
            os: ubuntu-24.04
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-24.04-arm
    steps:
      - name: Checkout repository
        uses: actions/checkout@v7
      - name: Install repository toolchain and target
        run: rustup target add ${{ matrix.target }}
      - name: Install 32-bit linker and libraries
        if: matrix.target == 'i686-unknown-linux-gnu'
        run: |
          sudo apt-get update
          sudo apt-get install --yes gcc-multilib
      - name: Basic build
        run: cargo build --workspace --all-features --verbose --target ${{ matrix.target }}
      - name: Build docs
        run: cargo doc --workspace --all-features --no-deps --verbose --target ${{ matrix.target }}
      - name: Run tests
        run: cargo test --workspace --all-features --verbose --target ${{ matrix.target }}

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