diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5fa8846 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,76 @@ +name: Release + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + publish: + name: Publishing for ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-latest, ubuntu-latest, windows-latest] + rust: [stable] + include: + - os: macos-latest + artifact_prefix: macos + target: x86_64-apple-darwin + binary_postfix: "" + - os: ubuntu-latest + artifact_prefix: linux + target: x86_64-unknown-linux-gnu + binary_postfix: "" + - os: windows-latest + artifact_prefix: windows + target: x86_64-pc-windows-msvc + binary_postfix: ".exe" + + steps: + - name: Checkout sources + uses: actions/checkout@v2 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + override: true + + - name: Cache cargo registry, index and build directory + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + ./target + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + + - name: Cargo build + uses: actions-rs/cargo@v1 + with: + command: build + toolchain: ${{ matrix.rust }} + args: --release --target ${{ matrix.target }} + + - name: Packaging final binary + shell: bash + run: | + cd target/${{ matrix.target }}/release + strip hoc${{ matrix.binary_postfix }} + tar czvf hoc-${{ matrix.artifact_prefix }}.tar.gz hoc${{ matrix.binary_postfix }} + + if [[ ${{ runner.os }} == 'Windows' ]]; then + certutil -hashfile hoc-${{ matrix.artifact_prefix }}.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > hoc-${{ matrix.artifact_prefix }}.sha256 + else + shasum -a 256 hoc-${{ matrix.artifact_prefix }}.tar.gz > hoc-${{ matrix.artifact_prefix }}.sha256 + fi + + - name: Releasing assets + uses: softprops/action-gh-release@v1 + with: + files: | + target/${{ matrix.target }}/release/hoc-${{ matrix.artifact_prefix }}.tar.gz + target/${{ matrix.target }}/release/hoc-${{ matrix.artifact_prefix }}.sha256 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}