diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cbc3cbc..4f3c429 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,15 @@ jobs: build: name: Build runs-on: self-hosted + permissions: + contents: read + packages: write + steps: + - name: Set version + id: version + run: echo "::set-output name=version::$(echo ${GITHUB_REF#refs/tags/})" + - name: Set up Go uses: actions/setup-go@v4 with: @@ -35,7 +43,7 @@ jobs: -X 'version.BuiltAt=$(date +%Y-%m-%dT%H:%M:%S)' -X 'version.GoVersion=$(go version)' -X 'version.GitCommit=$(git rev-parse HEAD)' - -X 'version.Version=${{ github.ref }}' + -X 'version.Version=${{ steps.version.outputs.version }}' buildmode: default trimpath: true @@ -43,7 +51,7 @@ jobs: run: | mkdir -p compressed_artifacts for platform in windows-amd64.exe linux-amd64 linux-arm64 darwin-arm64; do - zip -r "compressed_artifacts/zurg-$platform-${{ github.ref }}.zip" "artifacts/zurg-$platform" + zip -r "compressed_artifacts/zurg-${{ steps.version.outputs.version }}-$platform.zip" "artifacts/zurg-$platform" done - name: Upload artifacts to workflow @@ -57,6 +65,10 @@ jobs: needs: build runs-on: ubuntu-latest steps: + - name: Set version + id: version + run: echo "::set-output name=version::$(echo ${GITHUB_REF#refs/tags/})" + - name: Download artifacts uses: actions/download-artifact@v3 with: @@ -68,8 +80,8 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} + tag_name: ${{ steps.version.outputs.version }} + release_name: Release ${{ steps.version.outputs.version }} draft: false prerelease: false @@ -78,10 +90,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | for platform in windows/amd64 linux/amd64 linux/arm64 darwin/arm64; do - asset_path="./compressed_artifacts/zurg-$platform-${{ github.ref }}.zip" + asset_path="./compressed_artifacts/zurg-$platform-${{ steps.version.outputs.version }}.zip" if [[ -f "$asset_path" ]]; then echo "Uploading $asset_path" - gh release upload ${{ github.ref }} "$asset_path" --c ${{ secrets.GITHUB_TOKEN }} + gh release upload ${{ steps.version.outputs.version }} "$asset_path" --c ${{ secrets.GITHUB_TOKEN }} else echo "File not found: $asset_path" fi diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index b070078..b68a3dd 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -1,22 +1,23 @@ -name: Build zurg-testing docker image +name: Build Docker Image on: push: - branches: - - main tags: - - v0* - paths: - - '**.go' + - 'v*' jobs: build-and-push-image: + name: Docker Build runs-on: self-hosted permissions: contents: read packages: write steps: + - name: Set version + id: version + run: echo "::set-output name=version::$(echo ${GITHUB_REF#refs/tags/})" + - name: Check out the repo uses: actions/checkout@v4 @@ -54,16 +55,21 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache + build-args: | + BuiltAt=$(date +%Y-%m-%dT%H:%M:%S) + GoVersion=$(go version) + GitCommit=$(git rev-parse HEAD) + Version=${{ steps.version.outputs.version }} - name: Extract metadata (tags, labels) for Docker - if: startsWith(github.ref, 'refs/tags/v0') + if: startsWith(github.ref, 'refs/tags/v') id: publicmeta uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository }}-testing - name: Build and push Docker image - if: startsWith(github.ref, 'refs/tags/v0') + if: startsWith(github.ref, 'refs/tags/v') uses: docker/build-push-action@v5 with: context: . @@ -73,3 +79,8 @@ jobs: labels: ${{ steps.publicmeta.outputs.labels }} cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache + build-args: | + BuiltAt=$(date +%Y-%m-%dT%H:%M:%S) + GoVersion=$(go version) + GitCommit=$(git rev-parse HEAD) + Version=${{ steps.version.outputs.version }} diff --git a/Dockerfile b/Dockerfile index e2fff3d..e8ab5a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,17 @@ # Accept GOOS and GOARCH as build arguments ARG GOOS=linux ARG GOARCH=amd64 +ARG BuiltAt +ARG GoVersion +ARG GitCommit +ARG Version # Build stage FROM golang:1-alpine AS builder WORKDIR /app COPY . . RUN apk add --no-cache bash git go gcc musl-dev curl fuse -RUN go build -o zurg cmd/zurg/main.go +RUN go build -ldflags="-s -w -X 'main.BuiltAt=${BuiltAt}' -X 'main.GoVersion=${GoVersion}' -X 'main.GitCommit=${GitCommit}' -X 'main.Version=${Version}'" -o zurg cmd/zurg/main.go # Obfuscation stage FROM alpine:3 AS obfuscator