name: Auto Build on: push: branches: - stable - testing - unstable workflow_dispatch: inputs: version: description: Override embedded version required: false type: string targets: description: Space separated build targets, for example "linux-amd64 windows-amd64" required: false default: all type: string jobs: build: name: Build binaries runs-on: ubuntu-22.04 steps: - name: Checkout source shell: bash env: CI_SERVER_URL: ${{ gitea.server_url }} CI_REPOSITORY: ${{ gitea.repository }} CI_REF: ${{ gitea.ref }} CI_SHA: ${{ gitea.sha }} CI_TOKEN: ${{ github.token }} run: | set -euo pipefail workspace="${GITHUB_WORKSPACE:-$PWD}" repo_url="${CI_SERVER_URL}/${CI_REPOSITORY}.git" rm -rf "$workspace/.git" git init -b ci "$workspace" git -C "$workspace" remote add origin "$repo_url" if [[ -n "${CI_TOKEN}" ]]; then auth_header="Authorization: token ${CI_TOKEN}" git -C "$workspace" -c http.extraHeader="$auth_header" fetch --depth=1 origin "${CI_REF}" else git -C "$workspace" fetch --depth=1 origin "${CI_REF}" fi git -C "$workspace" checkout --detach FETCH_HEAD - name: Setup Go uses: actions/setup-go@v5 with: go-version: ~1.25.9 - name: Prepare Go cache shell: bash run: | set -euo pipefail mkdir -p "$PWD/.gitea-cache/go-build" "$PWD/.gitea-cache/gomod" echo "GOCACHE=$PWD/.gitea-cache/go-build" >> "$GITHUB_ENV" echo "GOMODCACHE=$PWD/.gitea-cache/gomod" >> "$GITHUB_ENV" - name: Download Go modules shell: bash run: | set -euo pipefail go mod download - name: Verify Go modules shell: bash run: | set -euo pipefail go mod verify - name: Resolve build metadata shell: bash run: | set -euo pipefail version_input="${{ inputs.version }}" targets_input="${{ inputs.targets }}" if [[ -n "$version_input" ]]; then version="$version_input" else version="$(go run ./cmd/internal/read_tag)" if [[ -z "$version" || "$version" == "unknown" ]]; then version="$(git describe --tags --always 2>/dev/null || git rev-parse --short HEAD)" fi fi if [[ -z "$targets_input" ]]; then targets_input="all" fi echo "VERSION=$version" >> "$GITHUB_ENV" echo "BUILD_TARGETS=$targets_input" >> "$GITHUB_ENV" - name: Build shell: bash run: | set -euo pipefail chmod +x ./building-linux.sh rm -rf dist mkdir -p dist VERSION="$VERSION" DIST_DIR="$PWD/dist" ./building-linux.sh ${BUILD_TARGETS} - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: sing-box-${{ env.VERSION }} path: dist if-no-files-found: error