diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..9ccca95 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,86 @@ +name: Build + +on: + push: + branches: + - "**" + tags: + - "v*" + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + build: + name: Test and build + runs-on: ubuntu-latest + steps: + - name: Check out source + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + cache: false + + - name: Test + run: go test -race ./... + + - name: Vet + run: go vet ./... + + - name: Build release archives + shell: bash + env: + BUILD_REF: ${{ github.ref }} + BUILD_REF_NAME: ${{ github.ref_name }} + BUILD_SHA: ${{ github.sha }} + run: | + set -euo pipefail + + package_version="snapshot-${BUILD_SHA:0:8}" + version_flags="" + if [[ "$BUILD_REF" == refs/tags/v* ]]; then + package_version="${BUILD_REF_NAME//\//-}" + version_flags="-X main.version=$BUILD_REF_NAME" + fi + + mkdir -p dist + for target in \ + linux/amd64 linux/arm64 \ + darwin/amd64 darwin/arm64 \ + windows/amd64 windows/arm64 + do + target_os="${target%/*}" + target_arch="${target#*/}" + archive="bdrclone-${package_version}-${target_os}-${target_arch}" + executable="bdrclone" + if [[ "$target_os" == "windows" ]]; then + executable="bdrclone.exe" + fi + + package_dir="dist/$archive" + mkdir -p "$package_dir" + CGO_ENABLED=0 GOOS="$target_os" GOARCH="$target_arch" \ + go build -trimpath -ldflags "-s -w $version_flags" \ + -o "$package_dir/$executable" ./cmd/bdrclone + cp README.md "$package_dir/" + tar -C dist -czf "dist/$archive.tar.gz" "$archive" + rm -rf "$package_dir" + done + + cd dist + sha256sum ./*.tar.gz > SHA256SUMS + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: bdrclone-build-${{ github.run_number }} + path: | + dist/*.tar.gz + dist/SHA256SUMS + if-no-files-found: error + retention-days: 30