From ca5e7f5f4443e312c8bee0c1390ce4306ea5749d Mon Sep 17 00:00:00 2001 From: Cameron Garnham Date: Mon, 20 Mar 2023 17:30:59 +0100 Subject: [PATCH] feat: ci workflow for publishing to crates.io (#189) first steps for preparing sws as a crate --- .github/workflows/release.crate.yml | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 .github/workflows/release.crate.yml 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 }} -- libgit2 1.7.2