Skip to content

perf: avoid per-request alloc in circuit-breaker backend check #1244

perf: avoid per-request alloc in circuit-breaker backend check

perf: avoid per-request alloc in circuit-breaker backend check #1244

Workflow file for this run

name: "publish"
on:
push:
# tags: ["v[0-9]+.[0-9]+.[0-9]+*"]
branches: [main]
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
CARGO_TERM_COLOR: always
IMAGE_NAME: vicanso/pingap
jobs:
linux:
runs-on: ubuntu-22.04
strategy:
matrix:
toolchain: [1.88.0, 1.90.0, 1.91.0, 1.92.0, stable]
services:
etcd:
image: quay.io/coreos/etcd:v3.5.5
env:
ETCD_ADVERTISE_CLIENT_URLS: http://0.0.0.0:2379
ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
ports:
- 2379:2379
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
- uses: actions/checkout@v4
- uses: ilammy/setup-nasm@v1
- name: setup node
uses: actions/setup-node@v4
- name: build-web
run: make build-web
- name: Install build dependencies
run: |
sudo apt update
sudo apt install -y cmake libclang-dev wget gnupg ca-certificates lsb-release --no-install-recommends protobuf-compiler
- name: Install toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: rustfmt, clippy
- name: Run cargo fmt
run: cargo fmt --all -- --check
- name: Run cargo clippy
if: matrix.toolchain == 'stable'
run: |
cargo install typos-cli
make lint
- name: Run cargo machete
if: matrix.toolchain == 'stable'
run: |
cargo install cargo-machete@0.9.1
cargo machete
- name: Run cargo test
run: make test
- name: Run cargo msrv
if: matrix.toolchain == 'stable'
run: |
cargo install cargo-msrv --version 0.18.4
cargo msrv list
- name: Run cargo cov
if: matrix.toolchain == 'stable'
run: |
cargo install cargo-llvm-cov
cargo llvm-cov
- name: Run cargo release
run: |
make release-all
ldd target/release/pingap
windows:
# Temporarily disabled
if: false
runs-on: windows-latest
name: ${{ matrix.target }}
env:
CFG_RELEASE_CHANNEL: ${{ matrix.cfg_release_channel }}
strategy:
# https://help.github.com/en/actions/getting-started-with-github-actions/about-github-actions#usage-limits
# There's a limit of 60 concurrent jobs across all repos in the rust-lang organization.
# In order to prevent overusing too much of that 60 limit, we throttle the
# number of rustfmt jobs that will run concurrently.
matrix:
target: [x86_64-pc-windows-msvc]
steps:
# The Windows runners have autocrlf enabled by default
# which causes failures for some of rustfmt's line-ending sensitive tests
- name: disable git eol translation
run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- name: setup node
uses: actions/setup-node@v4
- name: build-web
run: make build-web
# Run build
- name: Install Rustup using win.rustup.rs
run: |
# Disable the download progress bar which can cause perf issues
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe
.\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --default-toolchain=none
del rustup-init.exe
rustup target add ${{ matrix.target }}
shell: powershell
- name: Add mingw64 to path for x86_64-gnu
run: echo "C:\msys64\mingw64\bin" >> $GITHUB_PATH
if: matrix.target == 'x86_64-pc-windows-gnu' && matrix.channel == 'nightly'
shell: bash
- name: Install Protoc
uses: arduino/setup-protoc@v3
with:
version: "23.x"
include-pre-releases: true
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Set Perl environment variables
if: runner.os == 'Windows'
run: |
echo "PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
echo "OPENSSL_SRC_PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- name: Run cargo release
shell: bash
run: |
cargo --version
cargo build --release --features=full
ls -lh target/release
build:
timeout-minutes: 3600
runs-on: ${{ matrix.platform.runs-on }}
strategy:
matrix:
platform:
- { arch: "linux/amd64", tag: "amd64", runs-on: "ubuntu-22.04" }
- { arch: "linux/arm64", tag: "arm64", runs-on: "ubuntu-22.04-arm" }
features: ['latest', 'full']
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
- name: Change Swap Space
run: |
swapon --show=NAME | tail -n 1
df -lh
export SWAP_FILE=/swapfile
sudo fallocate -l 24G $SWAP_FILE
sudo chmod 600 $SWAP_FILE
sudo mkswap $SWAP_FILE
sudo swapon $SWAP_FILE
- name: Swap space report after modification
shell: bash
run: |
echo "Memory and swap:"
free -h
echo
swapon --show
df -lh
echo
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set build args
shell: bash
id: build_args
run: |
if [ "${{ matrix.features }}" != "latest" ]; then
echo "BUILD_ARGS=--features=${{ matrix.features }}" >> $GITHUB_OUTPUT
fi
- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform.arch }}
build-args: |
BUILD_ARGS=${{ steps.build_args.outputs.BUILD_ARGS }}
tags: ${{ env.IMAGE_NAME }}:${{ matrix.platform.tag }}-${{ matrix.features }}
push: true
- name: Image digest
run: |
echo ${{ steps.docker_build.outputs.digest }}
merge:
runs-on: ubuntu-22.04
strategy:
matrix:
features: ['latest', 'full']
needs: [build] # 等待所有架构构建完成
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Create and push multi-arch manifest
run: |
docker buildx imagetools create \
-t ${{ env.IMAGE_NAME }}:${{ matrix.features }} \
${{ env.IMAGE_NAME }}:amd64-${{ matrix.features }} \
${{ env.IMAGE_NAME }}:arm64-${{ matrix.features }}