lzma-sdk-sys 0.1.2+25.01

Raw FFI bindings for the LZMA encoder/decoder parts of LZMA-SDK (7zip)
Documentation
name: Test, Upload Coverage and Release Rust

on:
  push:
    branches: [ main ]
    tags:
      - '*'
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build-and-test:
    strategy:
      matrix:
        include:
          # GNU Windows is disabled because cross images are currently broken.exclude:
          # They have been verified by hand.
          # Multithreaded, no ASM
          - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, use-cross: false, features: "std,external-codecs", use-tarpaulin: true  }
          - { os: ubuntu-latest, target: i686-unknown-linux-gnu, use-cross: false, features: "std,external-codecs", use-tarpaulin: true }
          - { os: ubuntu-latest, target: aarch64-unknown-linux-gnu, use-cross: true, features: "std,external-codecs", use-tarpaulin: true }
          - { os: ubuntu-latest, target: armv7-unknown-linux-gnueabihf, use-cross: true, features: "std,external-codecs", use-tarpaulin: true }
          #- { os: windows-latest, target: x86_64-pc-windows-gnu, use-cross: true, features: "std,external-codecs", use-tarpaulin: false }
          #- { os: windows-latest, target: i686-pc-windows-gnu, use-cross: true, features: "std,external-codecs", use-tarpaulin: false }
          - { os: windows-latest, target: x86_64-pc-windows-msvc, use-cross: false, features: "std,external-codecs", use-tarpaulin: true }
          - { os: windows-latest, target: i686-pc-windows-msvc, use-cross: false, features: "std,external-codecs", use-tarpaulin: true }
          - { os: windows-latest, target: aarch64-pc-windows-msvc, use-cross: false, features: "std,external-codecs", use-tarpaulin: false }
          - { os: macos-15-intel, target: x86_64-apple-darwin, use-cross: false, features: "std,external-codecs", use-tarpaulin: true }
          - { os: macos-latest, target: aarch64-apple-darwin, use-cross: false, features: "std,external-codecs", use-tarpaulin: true }

          # Multithreaded, with ASM
          - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: ubuntu-latest, target: i686-unknown-linux-gnu, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: ubuntu-latest, target: aarch64-unknown-linux-gnu, use-cross: true, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: ubuntu-latest, target: armv7-unknown-linux-gnueabihf, use-cross: true, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          #- { os: windows-latest, target: x86_64-pc-windows-gnu, use-cross: true, features: "std,external-codecs,enable-asm", use-tarpaulin: false }
          #- { os: windows-latest, target: i686-pc-windows-gnu, use-cross: true, features: "std,external-codecs,enable-asm", use-tarpaulin: false }
          - { os: windows-latest, target: x86_64-pc-windows-msvc, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: windows-latest, target: i686-pc-windows-msvc, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: windows-latest, target: aarch64-pc-windows-msvc, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: false }
          - { os: macos-15-intel, target: x86_64-apple-darwin, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }
          - { os: macos-latest, target: aarch64-apple-darwin, use-cross: false, features: "std,external-codecs,enable-asm", use-tarpaulin: true }

          # Singlethreaded
          - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: ubuntu-latest, target: i686-unknown-linux-gnu, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: ubuntu-latest, target: aarch64-unknown-linux-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: ubuntu-latest, target: armv7-unknown-linux-gnueabihf, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: true }
          #- { os: windows-latest, target: x86_64-pc-windows-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: false }
          #- { os: windows-latest, target: i686-pc-windows-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: false }
          - { os: windows-latest, target: x86_64-pc-windows-msvc, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: windows-latest, target: i686-pc-windows-msvc, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: windows-latest, target: aarch64-pc-windows-msvc, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: false }
          - { os: macos-15-intel, target: x86_64-apple-darwin, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }
          - { os: macos-latest, target: aarch64-apple-darwin, use-cross: false, features: "std,external-codecs,st", use-tarpaulin: true }

          # Some esoteric targets
          - { os: ubuntu-latest, target: powerpc-unknown-linux-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: false }
          - { os: ubuntu-latest, target: powerpc64-unknown-linux-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: false }
          - { os: ubuntu-latest, target: powerpc64le-unknown-linux-gnu, use-cross: true, features: "std,external-codecs,st", use-tarpaulin: false }
          
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Run Tests and Upload Coverage
        uses: Reloaded-Project/devops-rust-test-and-coverage@v1
        # Currently unsupported due to no native runner.
        # Native runner currently only available in enterprise.
        if: matrix.target != 'aarch64-pc-windows-msvc'
        with:
          upload-coverage: false
          codecov-token: ${{ secrets.CODECOV_TOKEN }}
          target: ${{ matrix.target }}
          use-cross: ${{ matrix.use-cross }}
          features: ${{ matrix.features }}
          no-default-features: true
          use-tarpaulin: ${{ matrix.use-tarpaulin }}
          install-binstall: true

  publish-crate:
    permissions:
      contents: write

    needs: [build-and-test]
    # Publish only on tags
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    steps:
      - name: Publish Rust Crate and Artifacts  
        uses: Reloaded-Project/devops-publish-action@v1
        with:
          crates-io-token: ${{ secrets.CRATES_IO_TOKEN }}
          rust-project-paths: |
            .