diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 02b68be7..19bb93ca 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,10 +7,10 @@ on: - '*' jobs: - go-release: - name: Go Release Job + goreleaser: + name: GoReleaser Job runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 60 steps: - name: Checkout uses: actions/checkout@v4 @@ -28,32 +28,6 @@ jobs: go-version-file: go.mod check-latest: true - - name: Run Go Releaser - uses: goreleaser/goreleaser-action@v6 - with: - distribution: goreleaser - version: "~> v2" - args: "release --clean --parallelism 1" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} - - container-release: - name: Container Release Job - runs-on: ubuntu-latest - needs: [go-release] - timeout-minutes: 240 - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Configure Git - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - - name: Set Up QEMU uses: docker/setup-qemu-action@v3 @@ -74,20 +48,13 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and Push Release Container to GitHub Container Registry/DockerHub Container Registry - uses: docker/build-push-action@v6 - with: - context: . - target: release - platforms: linux/amd64,linux/arm64 - push: true - tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}, docker.io/hauler/hauler:${{ github.ref_name }} - - - name: Build and Push Debug Container to GitHub Container Registry/DockerHub Container Registry - uses: docker/build-push-action@v6 + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 with: - context: . - target: debug - platforms: linux/amd64,linux/arm64 - push: true - tags: ghcr.io/${{ github.repository }}-debug:${{ github.ref_name }}, docker.io/hauler/hauler-debug:${{ github.ref_name }} + distribution: goreleaser + version: "~> v2" + args: "release --clean --parallelism 1 --timeout 60m" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} + DOCKER_CLI_EXPERIMENTAL: "enabled" diff --git a/.goreleaser.yaml b/.goreleaser.yaml index c3e38829..d196c435 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -55,3 +55,75 @@ brews: token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}" directory: Formula description: "Hauler CLI" + +dockers: + - id: hauler-amd64 + goos: linux + goarch: amd64 + use: buildx + dockerfile: Dockerfile + build_flag_templates: + - "--platform=linux/amd64" + - "--target=release" + image_templates: + - "docker.io/hauler/hauler-amd64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-amd64:{{ .Version }}" + - id: hauler-arm64 + goos: linux + goarch: arm64 + use: buildx + dockerfile: Dockerfile + build_flag_templates: + - "--platform=linux/arm64" + - "--target=release" + image_templates: + - "docker.io/hauler/hauler-arm64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-arm64:{{ .Version }}" + - id: hauler-debug-amd64 + goos: linux + goarch: amd64 + use: buildx + dockerfile: Dockerfile + build_flag_templates: + - "--platform=linux/amd64" + - "--target=debug" + image_templates: + - "docker.io/hauler/hauler-debug-amd64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-debug-amd64:{{ .Version }}" + - id: hauler-debug-arm64 + goos: linux + goarch: arm64 + use: buildx + dockerfile: Dockerfile + build_flag_templates: + - "--platform=linux/arm64" + - "--target=debug" + image_templates: + - "docker.io/hauler/hauler-debug-arm64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-debug-arm64:{{ .Version }}" + +docker_manifests: + - id: hauler-docker + use: docker + name_template: "docker.io/hauler/hauler:{{ .Version }}" + image_templates: + - "docker.io/hauler/hauler-amd64:{{ .Version }}" + - "docker.io/hauler/hauler-arm64:{{ .Version }}" + - id: hauler-ghcr + use: docker + name_template: "ghcr.io/hauler-dev/hauler:{{ .Version }}" + image_templates: + - "ghcr.io/hauler-dev/hauler-amd64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-arm64:{{ .Version }}" + - id: hauler-debug-docker + use: docker + name_template: "docker.io/hauler/hauler-debug:{{ .Version }}" + image_templates: + - "docker.io/hauler/hauler-debug-amd64:{{ .Version }}" + - "docker.io/hauler/hauler-debug-arm64:{{ .Version }}" + - id: hauler-debug-ghcr + use: docker + name_template: "ghcr.io/hauler-dev/hauler-debug:{{ .Version }}" + image_templates: + - "ghcr.io/hauler-dev/hauler-debug-amd64:{{ .Version }}" + - "ghcr.io/hauler-dev/hauler-debug-arm64:{{ .Version }}" diff --git a/Dockerfile b/Dockerfile index b8969af7..fe8c396b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,8 @@ # builder stage -FROM registry.suse.com/bci/golang:1.23 AS builder +FROM registry.suse.com/bci/bci-base:15.5 AS builder -RUN echo -e "[goreleaser]\nname=GoReleaser\nbaseurl=https://repo.goreleaser.com/yum/\nenabled=1\ngpgcheck=0" > /etc/zypp/repos.d/GoReleaser.repo -RUN zypper --non-interactive install make bash wget git goreleaser ca-certificates - -COPY . /build -WORKDIR /build -RUN make build - -ARG TARGETOS -ARG TARGETARCH - -RUN cp /build/dist/hauler_${TARGETOS}_${TARGETARCH}*/hauler /hauler +# fetched from goreleaser build proccess +COPY hauler /hauler RUN echo "hauler:x:1001:1001::/home/hauler:" > /etc/passwd \ && echo "hauler:x:1001:hauler" > /etc/group \ @@ -43,7 +34,7 @@ COPY --from=builder /var/lib/ca-certificates/ca-bundle.pem /etc/ssl/certs/ca-cer COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /etc/group /etc/group COPY --from=builder --chown=hauler:hauler /home/hauler/. /home/hauler -COPY --from=builder --chown=hauler:hauler /hauler /hauler +COPY --from=builder --chown=hauler:hauler /hauler /usr/local/bin/hauler RUN apk --no-cache add curl diff --git a/Makefile b/Makefile index 67fd244b..ce05e7c7 100644 --- a/Makefile +++ b/Makefile @@ -12,15 +12,20 @@ BIN_DIRECTORY=bin DIST_DIRECTORY=dist BINARIES_DIRECTORY=cmd/hauler/binaries -# builds hauler for current platform -# references other targets +# local build of hauler for current platform +# references/configuration from .goreleaser.yaml build: - goreleaser build --clean --snapshot --parallelism 1 --timeout 240m --single-target + goreleaser build --clean --snapshot --parallelism 1 --timeout 60m --single-target -# builds hauler for all platforms -# references other targets +# local build of hauler for all platforms +# references/configuration from .goreleaser.yaml build-all: - goreleaser build --clean --snapshot --parallelism 1 --timeout 240m + goreleaser build --clean --snapshot --parallelism 1 --timeout 60m + +# local release of hauler for all platforms +# references/configuration from .goreleaser.yaml +release: + goreleaser release --clean --snapshot --parallelism 1 --timeout 60m # install depedencies install: