archival 0.14.0

The simplest CMS in existence
Documentation
on:
  push:
    branches:
      - main
    tags:
      - "*"
  pull_request:

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  SCCACHE_GHA_ENABLED: true
  RUSTC_WRAPPER: sccache
  SCCACHE_LOG: info
  SCCACHE_S3_USE_SSL: true
  SCCACHE_REGION: us-east-1

name: CI
jobs:
  lint:
    name: Lint
    runs-on: ubuntu-22.04
    environment: Build
    env:
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    steps:
      - uses: actions/checkout@v3
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 33.1
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          targets: wasm32-unknown-unknown
          components: rustc-dev, clippy, rustfmt
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9

      - name: check rustfmt
        run: cargo fmt -- --check --color always

      - run: cargo fetch
      - name: cargo clippy
        run: cargo clippy --all-features --all-targets -- --no-deps -D warnings

  test:
    name: Tests
    environment: Build
    env:
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    strategy:
      matrix:
        os: [macos-latest, windows-2022, ubuntu-22.04]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          targets: wasm32-unknown-unknown
          components: rustc-dev, clippy, rustfmt
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9

      - run: cargo fetch
      - name: cargo test build
        run: cargo build --tests --release
      - name: run tests
        run: ./test.sh

  msrv-check:
    name: Minimum Stable Rust Version Check
    environment: Build
    env:
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 33.1
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: "1.80.0"
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9
      - run: cargo fetch
      - name: cargo check
        run: cargo check --all-targets

  build-aarch64-apple-darwin:
    name: Build aarch64-apple-darwin
    runs-on: macos-latest
    environment: Build
    env:
      TRIPLE: aarch64-apple-darwin
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    steps:
      - uses: actions/checkout@v3
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 33.1
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ env.TRIPLE }}
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9

      - run: cargo fetch --target ${{ env.TRIPLE }}
      - run: cargo build --release --target ${{ env.TRIPLE }}

  # deny-check:
  #   name: cargo-deny
  #   runs-on: ubuntu-22.04
  #   steps:
  #     - uses: actions/checkout@v3
  #     - uses: arduino/setup-protoc@v3
  #     - uses: EmbarkStudios/cargo-deny-action@v1

  # check-self:
  #   name: archival
  #   runs-on: ubuntu-22.04
  #   steps:
  #     - uses: actions/checkout@v3
  #     - uses: arduino/setup-protoc@v3
  #     - uses: dtolnay/rust-toolchain@stable
  #       with:
  #         targets: x86_64-unknown-linux-musl
  #     - run: sudo apt install -y musl-tools
  #     - uses: Swatinem/rust-cache@v2
  #     - run: cargo run --release --target x86_64-unknown-linux-musl -- generate --fail about.hbs

  publish-check:
    name: Publish Check
    environment: Build
    env:
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    runs-on: ubuntu-22.04
    container: ghcr.io/cross-rs/aarch64-unknown-linux-musl:edge
    strategy:
      matrix:
        include:
          - target: aarch64-unknown-linux-musl
    steps:
      - uses: actions/checkout@v3
      - name: Install unzip in container
        run: apt-get update && apt-get install -y unzip
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 33.1
      - uses: dtolnay/rust-toolchain@stable
        with:
          target: ${{ matrix.target }}
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9

      - run: apt-get update && apt-get --assume-yes install libssl-dev
      - run: cargo fetch
      - name: cargo publish
        run: cargo publish --dry-run --all-features --target ${{ matrix.target }}

  release:
    name: Release
    environment: Build
    env:
      SCCACHE_BUCKET: ${{ vars.SCCACHE_BUCKET }}
      SCCACHE_ENDPOINT: ${{ secrets.SCCACHE_ENDPOINT }}
      AWS_ACCESS_KEY_ID: ${{ vars.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    if: ${{ startsWith(github.ref, 'refs/tags/') && needs.publish-check.result == 'success' }}
    needs: publish-check
    strategy:
      matrix:
        include:
          - os: ubuntu-22.04
            target: x86_64-unknown-linux-musl
          - os: ubuntu-22.04
            target: aarch64-unknown-linux-musl
            container: ghcr.io/cross-rs/aarch64-unknown-linux-musl:edge
          - os: windows-2022
            target: x86_64-pc-windows-msvc
          - os: macos-latest
            target: x86_64-apple-darwin
          - os: macos-latest
            target: aarch64-apple-darwin
    runs-on: ${{ matrix.os }}
    container: ${{ matrix.container }}
    steps:
      - uses: dtolnay/rust-toolchain@stable
        with:
          target: ${{ matrix.target }}
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install musl tools
        if: matrix.target == 'x86_64-unknown-linux-musl'
        run: sudo apt install -y musl-tools
      - name: Install unzip tools
        if: matrix.target == 'aarch64-unknown-linux-musl'
        run: |
          apt-get update
          apt-get install -y unzip
      - uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 33.1
      - name: sccache
        uses: mozilla-actions/sccache-action@v0.0.9
      - name: cargo fetch
        run: cargo fetch --target ${{ matrix.target }}
      - name: Release build
        run: cargo build --release --target ${{ matrix.target }}
      - name: Package
        shell: bash
        env:
          NAME: archival
          TARGET: ${{ matrix.target }}
        run: .github/scripts/package.sh
      - name: Publish
        uses: softprops/action-gh-release@v1
        with:
          draft: false
          files: "archival*"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}