Skip to content

CI: Stamp version into binary #968

CI: Stamp version into binary

CI: Stamp version into binary #968

Workflow file for this run

# GitHub Workflows file
name: main
defaults:
run:
shell: bash --noprofile --norc -euo pipefail {0}
on:
push:
branches:
- main
tags:
- 'v*'
pull_request:
branches:
- main
workflow_dispatch:
env:
# https://github.com/bazelbuild/bazel/issues/3001
# MSYS2_ARG_CONV_EXCL: "*"
# MSYS_NO_PATHCONV: 1
RUSTFLAGS: -Dwarnings
jobs:
version:
name: Current proxydetox version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Fetch dependencies
run: |
bazel build --nobuild --config=ci //pkg:version
- name: Build version
run: |
bazel build --config=ci //:current_version
- name: Version
id: version
run: |
bazel run --config=ci //:current_version | tee -a $GITHUB_OUTPUT
- name: Rev
id: rev
run: |
printf 'rev=%s\n' $(git rev-parse --short HEAD) | tee -a $GITHUB_OUTPUT
bazel_test:
name: Bazel test
runs-on: ${{ matrix.os }}
needs: version
strategy:
matrix:
build:
- macos-x86_64
- ubuntu-20.04
- ubuntu-22.04
# - windows
include:
- build: macos-x86_64
os: macos-latest
buildflags: --features=negotiate --config=x86_64_apple_darwin
- build: ubuntu-20.04
os: ubuntu-20.04
buildflags: --features=negotiate
- build: ubuntu-22.04
os: ubuntu-22.04
buildflags: --features=negotiate
# - build: windows
# os: windows-latest
# buildflags: --features=negotiate
steps:
- name: Git checkout with LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Bazel cache
uses: actions/cache@v3
with:
path: |
~/.cache/bazel_build_cache
~/.cache/bazel_repo_cache
key: ${{ matrix.build }}-bazel-test-${{ hashFiles('Cargo.Bazel.lock', 'WORKSPACE') }}
restore-keys: |
${{ matrix.build }}-bazel-test-
- name: Setup Windows Bazelrc
# https://bazel.build/configure/windows
run: |
echo "startup --output_user_root=C:/tmp" > ${{ github.workspace }}/user.bazelrc
shell: cmd
if: startswith(matrix.os, 'windows')
- name: Install Linux dependency
run: sudo apt-get install libkrb5-dev
if: ${{ startswith(matrix.os, 'ubuntu') }}
- name: Run tests
run: >
bazel
test
--config=ci
--//:version=${{ needs.version.outputs.version }}
--//:rev=${{ needs.version.outputs.rev }}
${{ matrix.buildflags }}
"//..."
shell: cmd
if: ${{ startswith(matrix.os, 'windows') }}
- name: Run tests
run: >
bazel
test
--config=ci
--//:version=${{ needs.version.outputs.version }}
--//:rev=${{ needs.version.outputs.rev }}
${{ matrix.buildflags }}
"//..."
if: ${{ ! startswith(matrix.os, 'windows') }}
bazel_build:
name: Bazel build release package
runs-on: ${{ matrix.os }}
needs:
- bazel_test
- version
strategy:
matrix:
build:
- macos-aarch64
- macos-x86_64
- ubuntu-20.04
- ubuntu-22.04
# - windows
include:
- build: macos-aarch64
os: macos-latest
buildflags: --features=negotiate --config=aarch64_apple_darwin
pkgfile: proxydetox-${{ needs.version.outputs.version }}-apple-darwin-aarch64.pkg
- build: macos-x86_64
os: macos-latest
buildflags: --features=negotiate --config=x86_64_apple_darwin
pkgfile: proxydetox-${{ needs.version.outputs.version }}-apple-darwin-x86_64.pkg
- build: ubuntu-20.04
os: ubuntu-20.04
buildflags: --features=negotiate
pkgfile: proxydetox-${{ needs.version.outputs.version }}-focal_amd64.deb
- build: ubuntu-22.04
os: ubuntu-22.04
buildflags: --features=negotiate
pkgfile: proxydetox-${{ needs.version.outputs.version }}-jammy_amd64.deb
# - build: windows
# os: windows-latest
# buildflags: --features=negotiate
# pkgfile: proxydetox-${{ needs.version.outputs.version }}-windows-x86_64.zip
steps:
- name: Git checkout with LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Bazel cache
uses: actions/cache@v3
with:
path: |
~/.cache/bazel_build_cache
~/.cache/bazel_repo_cache
key: ${{ matrix.build }}-bazel-test-${{ hashFiles('Cargo.Bazel.lock', 'WORKSPACE') }}
restore-keys: |
${{ matrix.build }}-bazel-test-
- name: Setup Windows Bazelrc
# https://bazel.build/configure/windows
run: |
echo "startup --output_user_root=C:/tmp" > ${{ github.workspace }}\user.bazelrc
shell: cmd
if: startswith(matrix.os, 'windows')
- name: Install Linux dependency
run: sudo apt-get install libkrb5-dev
if: startswith(matrix.os, 'ubuntu')
- name: Build package
run: >
bazel build
-c opt
--config=ci
--//:version=${{ needs.version.outputs.version }}
--//:rev=${{ needs.version.outputs.rev }}
${{ matrix.buildflags }}
"//pkg"
- name: Copy package
run: >
bazel
run
-c opt
--config=ci
--//:version=${{ needs.version.outputs.version }}
--//:rev=${{ needs.version.outputs.rev }}
${{ matrix.buildflags }}
"//pkg:copy"
--
${{ matrix.pkgfile }}
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
name: pkg
path: ./${{ matrix.pkgfile }}
cargo_build_and_test:
name: Cargo build and test
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- uses: Swatinem/rust-cache@v2
with:
key: ${{ runner.os }}
# see https://github.com/rust-lang/rust-bindgen/issues/1797
- name: Install Windows dependency (LLVM)
uses: KyleMayes/[email protected]
if: startswith(runner.os, 'windows')
with:
version: "11.0"
directory: ${{ runner.temp }}/llvm
- name: Set LIBCLANG_PATH
run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
shell: pwsh
if: startswith(runner.os, 'windows')
- name: Run cargo test
run: cargo test
- name: Build Release Package
id: buildpkg
run: ./tools/mkzip.ps1
shell: pwsh
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
name: pkg
path: ./${{ steps.buildpkg.outputs.pkgfile }}
mkrelease:
name: Create Release
runs-on: ubuntu-latest
needs:
- version
- bazel_build
- cargo_build_and_test
if: ${{ github.event_name == 'push' && startswith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Download pkg artifact
uses: actions/download-artifact@v3
with:
name: pkg
- name: Create Release
run: |
gh release create v${{ needs.version.outputs.version }} --generate-notes *.deb *.pkg *.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
format_check:
name: Rust lint
runs-on: ubuntu-20.04
strategy:
matrix:
lint: [clippy, fmt]
include:
- lint: clippy
flags: --all
- lint: fmt
flags: --all -- --check
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
override: true
- name: Install Linux dependency
run: sudo apt-get install libkrb5-dev
if: ${{ matrix.lint == 'clippy' }}
- name: Lint check
run: cargo ${{ matrix.lint }} ${{ matrix.flags }}