jubako 0.4.0

The reference implementation of the Jubako container format
Documentation
name: Check Release

on:
  push:
    branches:
    - 'r/[0-9]+.[0-9]+.[0-9]+'
    - 'r/[0-9]+.[0-9]+.[0-9]+-[0-9a-zA-Z]+'

jobs:
  check-version:
    name: check-version
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Get the release version from the branch
      if: env.VERSION == ''
      run: |
        VERSION=${{ github.ref_name }}
        VERSION=${VERSION##r/}
        echo "VERSION=$VERSION" >> $GITHUB_ENV
    - name: Show the version
      run: |
        echo "version is: $VERSION"
    - name: Check that tag version and Cargo.toml version are the same
      shell: bash
      run: |
        if ! grep -q "version = \"$VERSION\"" Cargo.toml; then
          echo "version does not match Cargo.toml" >&2
          exit 1
        fi
    outputs:
      version: ${{ env.VERSION }}

  check-release:
    name: check-release
    needs: ['check-version']
    runs-on: ${{ matrix.os }}
    env:
      # Emit backtraces on panics.
      RUST_BACKTRACE: 1
      SCCACHE_GHA_ENABLED: on
      RUSTC_WRAPPER: sccache
    strategy:
      fail-fast: false
      matrix:
        build: [linux, macos, windows]
        include:
        - build: linux
          os: ubuntu-latest
        - build: macos
          os: macos-latest
        - build: windows
          os: windows-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Setup cache
      uses: actions/cache/restore@v4
      with:
        path: |
          ~/.cargo/bin/
          ~/.cargo/.crates.toml
          ~/.cargo/.crates2.json
          ~/.cargo/registry/index/
          ~/.cargo/registry/cache/
          ~/.cargo/git/db/
        key: ${{ runner.os }}-cargo-stable-zstd_lzma_lz4-${{ hashFiles('**/Cargo.lock') }}

    - name: Run sccache-cache
      uses: mozilla-actions/sccache-action@v0.0.9

    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable

    - name: Build binary
      shell: bash
      run: |
        cargo build --verbose --release --features=lz4,lzma,zstd,build_bin,explorable_serde
        if [ "${{ matrix.os }}" = "windows-latest" ]; then
          bin="target/release/jbk.exe"
        else
          bin="target/release/jbk"
        fi
        echo "BIN=$bin" >> $GITHUB_ENV

    - name: Strip release binary (macos)
      if: matrix.os == 'macos-latest'
      shell: bash
      run: strip "$BIN"

    - name: Determine archive name
      shell: bash
      run: |
        version="${{ needs.check-version.outputs.version }}"
        echo "ARCHIVE=jbk-$version-${{ matrix.build }}" >> $GITHUB_ENV

    - name: Creating directory for archive
      shell: bash
      run: |
        mkdir -p "$ARCHIVE/doc"
        cp "$BIN" "$ARCHIVE"/
        cp {README.md,LICENSE-MIT} "$ARCHIVE"/
        cp Changelog.md "$ARCHIVE"/doc/

    - name: Build archive (Windows)
      shell: bash
      if: matrix.os == 'windows-latest'
      run: |
        7z a "$ARCHIVE.zip" "$ARCHIVE"
        certutil -hashfile "$ARCHIVE.zip" SHA256 > "$ARCHIVE.zip.sha256"
        echo "ASSET=$ARCHIVE.zip" >> $GITHUB_ENV
        echo "ASSET_SUM=$ARCHIVE.zip.sha256" >> $GITHUB_ENV

    - name: Build archive (Unix)
      shell: bash
      if: matrix.os != 'windows-latest'
      run: |
        tar czf "$ARCHIVE.tar.gz" "$ARCHIVE"
        shasum -a 256 "$ARCHIVE.tar.gz" > "$ARCHIVE.tar.gz.sha256"
        echo "ASSET=$ARCHIVE.tar.gz" >> $GITHUB_ENV
        echo "ASSET_SUM=$ARCHIVE.tar.gz.sha256" >> $GITHUB_ENV

    - name: Upload artifacts
      uses: actions/upload-artifact@v4
      with:
        name: pre_release-${{ matrix.build }}-jbk
        path: |
          ${{ env.ASSET }}
        compression-level: 0



  check-publication:
    name: Check cargo publication
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Test Publish
      env:
        CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
      run: |
        cargo publish --dry-run