index : static-web-server.git

ascending towards madness

author Cameron Garnham <me@da2ce7.com> 2023-03-20 16:30:59.0 +00:00:00
committer GitHub <noreply@github.com> 2023-03-20 16:30:59.0 +00:00:00
commit
ca5e7f5f4443e312c8bee0c1390ce4306ea5749d [patch]
tree
1772f60227baa4e68e04c0acc45e16c2cb8712e8
parent
cf0d61876092cd43a4cee02d370c91594d0ef906
download
ca5e7f5f4443e312c8bee0c1390ce4306ea5749d.tar.gz

feat: ci workflow for publishing to crates.io (#189)

first steps for preparing sws as a crate

Diff

 .github/workflows/release.crate.yml | 222 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 222 insertions(+)

diff --git a/.github/workflows/release.crate.yml b/.github/workflows/release.crate.yml
new file mode 100644
index 0000000..1781b10
--- /dev/null
+++ b/.github/workflows/release.crate.yml
@@ -0,0 +1,222 @@
name: release crate

on:
  push:
    tags:
      - "v2.[0-9]+.[0-9]+"
      - "v2.[0-9]+.[0-9]+-beta.[0-9]+"

jobs:
  check-secret:
    runs-on: ubuntu-latest
    environment: crates-io-libsws
    outputs:
      publish: ${{ steps.check.outputs.publish }}
    steps:
      - id: check
        env:
          CRATES_TOKEN: "${{ secrets.CRATES_TOKEN }}"
        if: "${{ env.CRATES_TOKEN != '' }}"
        run: echo "publish=true" >> $GITHUB_OUTPUT

  checks:
    name: checks
    if: needs.check-secret.outputs.publish == 'true'
    runs-on: ubuntu-20.04

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Check typos
        uses: crate-ci/typos@master
        with:
          config: ./.github/workflows/config/typos.toml

      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          components: rustfmt, clippy

      - name: Check formatting
        run: |
          cargo fmt --all -- --check

      - name: Check via Clippy
        run: |
          cargo clippy --all-features -- -D warnings

  test:
    name: test
    needs: checks
    if: needs.check-secret.outputs.publish == 'true'
    runs-on: ${{ matrix.os }}
    env:
      # Cargo's sparse protocol from 1.68.0 onwards
      CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
      CARGO_BIN: cargo
      # When CARGO_BIN is set to CROSS, this is set to `--target matrix.target`
      TARGET_FLAGS: ""
      # When CARGO_BIN is set to CROSS, TARGET_DIR includes matrix.target
      TARGET_DIR: ./target
      # Emit backtraces on panics
      RUST_BACKTRACE: 1
      # Skip tests
      SKIP_TESTS: ""
    strategy:
      matrix:
        build:
          - pinned
          - stable
          - beta
          - linux-musl
          - linux-musl-arm64
          - linux-musl-i686
          - linux-gnu
          - linux-gnu-arm64
          - linux-gnu-i686
          - linux-arm-gnueabihf
          - linux-musl-armv6
          - linux-musl-armv7
          - macos
          - macos-arm64
          - windows-msvc
          - windows-msvc-i686
          - windows-pc-gnu
          # - windows-msvc-arm64
        include:
          # Specific Rust channels
          - build: pinned
            os: ubuntu-20.04
            rust: 1.66.0
          - build: stable
            os: ubuntu-20.04
            rust: stable
          - build: beta
            os: ubuntu-20.04
            rust: beta
          # Some of our release builds are generated by a nightly compiler to take
          # advantage of the latest optimizations/compile time improvements.
          - build: linux-musl
            os: ubuntu-20.04
            rust: stable
            target: x86_64-unknown-linux-musl
          - build: linux-musl-i686
            os: ubuntu-20.04
            rust: stable
            target: i686-unknown-linux-musl
          - build: linux-musl-arm64
            os: ubuntu-20.04
            rust: stable
            target: aarch64-unknown-linux-musl
          - build: linux-gnu
            os: ubuntu-20.04
            rust: stable
            target: x86_64-unknown-linux-gnu
          - build: linux-gnu-i686
            os: ubuntu-20.04
            rust: stable
            target: i686-unknown-linux-gnu
          - build: linux-gnu-arm64
            os: ubuntu-20.04
            rust: stable
            target: aarch64-unknown-linux-gnu
          - build: linux-arm-gnueabihf
            os: ubuntu-20.04
            rust: stable
            target: arm-unknown-linux-gnueabihf
          - build: linux-musl-armv6
            os: ubuntu-20.04
            rust: stable
            target: arm-unknown-linux-musleabihf
          - build: linux-musl-armv7
            os: ubuntu-20.04
            rust: stable
            target: armv7-unknown-linux-musleabihf
          - build: macos
            os: macos-11
            rust: stable
            target: x86_64-apple-darwin
          - build: macos-arm64
            os: macos-11
            rust: stable
            target: aarch64-apple-darwin
          - build: windows-msvc
            os: windows-2019
            rust: stable
            target: x86_64-pc-windows-msvc
          - build: windows-msvc-i686
            os: windows-2019
            rust: stable
            target: i686-pc-windows-msvc
          - build: windows-pc-gnu
            os: windows-2019
            rust: stable-x86_64-gnu
          # - build: windows-msvc-arm64
          #   os: windows-2019
          #   rust: stable
          #   target: aarch64-pc-windows-msvc

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}

      - name: Use Cross
        if: matrix.target != ''
        run: |
          cargo install cross@^0.2
          echo "CARGO_BIN=cross" >> $GITHUB_ENV
          echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV
          echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV

      - name: Show command used for Cargo
        run: |
          echo "cargo command is: ${{ env.CARGO_BIN }}"
          echo "target flag is: ${{ env.TARGET_FLAGS }}"
          echo "target dir is: ${{ env.TARGET_DIR }}"

      - name: aarch64 specific items
        if: matrix.build == 'macos-arm64'
        run: |
          # Can't run tests: cross-compiling
          echo "SKIP_TESTS=yes" >> $GITHUB_ENV

      - name: Run tests
        shell: bash
        if: env.SKIP_TESTS == ''
        run: |
          if [[ "${{ matrix.build }}" == "pinned" ]]; then unset CARGO_REGISTRIES_CRATES_IO_PROTOCOL; fi
          ${{ env.CARGO_BIN }} test --verbose ${{ env.TARGET_FLAGS }}

      - name: Run build
        shell: bash
        run: |
          if [[ "${{ matrix.build }}" == "pinned" ]]; then unset CARGO_REGISTRIES_CRATES_IO_PROTOCOL; fi
          ${{ env.CARGO_BIN }} build --verbose ${{ env.TARGET_FLAGS }}

  publish:
    needs: test
    if: needs.check-secret.outputs.publish == 'true'
    runs-on: ubuntu-latest
    environment: crates-io-libsws
    steps:
      - name: Checkout
        uses: actions/checkout@v3

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

      - name: Publish workspace packages
        run: |
          cargo publish -p libsws
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_TOKEN }}