diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 3dbf45f..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,149 +0,0 @@ -name: CI and releases - -on: - push: - branches: - - main - tags: - - "v*" - pull_request: - workflow_dispatch: - -permissions: - contents: read - -jobs: - quality: - name: Test and vet - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - name: Check out repository - uses: actions/checkout@v6 - - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go.mod - cache-dependency-path: go.sum - - - name: Test - shell: bash - run: | - set +e - output="$(go test -count=1 ./... 2>&1)" - status=$? - printf '%s\n' "${output}" - - if (( status != 0 )); then - output="${output//'%'/'%25'}" - output="${output//$'\r'/'%0D'}" - output="${output//$'\n'/'%0A'}" - echo "::error title=Go test failure::${output}" - exit "${status}" - fi - - - name: Vet - run: go vet ./... - - binaries: - name: Build release binaries - needs: quality - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - name: Check out repository - uses: actions/checkout@v6 - - - name: Set up Go - uses: actions/setup-go@v6 - with: - go-version-file: go.mod - cache-dependency-path: go.sum - - - name: Build archives and checksums - shell: bash - run: | - set -euo pipefail - - version="${GITHUB_REF_NAME//\//-}" - mkdir -p dist staging - - targets=( - "linux amd64" - "linux arm64" - "darwin amd64" - "darwin arm64" - "windows amd64" - "windows arm64" - ) - - for target in "${targets[@]}"; do - read -r goos goarch <<< "${target}" - archive="tarakan_${version}_${goos}_${goarch}" - package="staging/${archive}" - mkdir -p "${package}" - - binary="tarakan" - if [[ "${goos}" == "windows" ]]; then - binary="tarakan.exe" - fi - - # Strip leading v from tags so main.version matches tarakan --version. - version_ld="${version#v}" - CGO_ENABLED=0 GOOS="${goos}" GOARCH="${goarch}" \ - go build -trimpath -ldflags="-s -w -X main.version=${version_ld}" \ - -o "${package}/${binary}" ./cmd/tarakan - - cp LICENSE "${package}/" - - if [[ "${goos}" == "windows" ]]; then - (cd staging && zip -q -r "../dist/${archive}.zip" "${archive}") - else - tar -C staging -czf "dist/${archive}.tar.gz" "${archive}" - fi - done - - (cd dist && sha256sum tarakan_* > checksums.txt) - - - name: Upload binaries - uses: actions/upload-artifact@v7 - with: - name: tarakan-${{ github.sha }} - path: dist/ - if-no-files-found: error - retention-days: 14 - compression-level: 0 - - release: - name: Publish GitHub release - if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - needs: binaries - runs-on: ubuntu-latest - timeout-minutes: 10 - permissions: - contents: write - steps: - - name: Download binaries - uses: actions/download-artifact@v8 - with: - name: tarakan-${{ github.sha }} - path: dist/ - - - name: Create release - shell: bash - env: - GH_TOKEN: ${{ github.token }} - run: | - set +e - output="$(gh release create "${GITHUB_REF_NAME}" dist/* --repo "${GITHUB_REPOSITORY}" --verify-tag --generate-notes 2>&1)" - status=$? - printf '%s\n' "${output}" - - if (( status != 0 )); then - output="${output//'%'/'%25'}" - output="${output//$'\r'/'%0D'}" - output="${output//$'\n'/'%0A'}" - echo "::error title=GitHub release failure::${output}" - exit "${status}" - fi