From fb2b4d77e80d4b07dbcb7c252b724627f8153760 Mon Sep 17 00:00:00 2001 From: M03ED <50927468+M03ED@users.noreply.github.com> Date: Tue, 4 Mar 2025 20:25:45 +0330 Subject: [PATCH 1/4] chore(workflow): trying to optimize docker image build --- .github/workflows/docker-build-dev.yml | 3 +++ .github/workflows/docker-build.yml | 3 +++ Dockerfile | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build-dev.yml b/.github/workflows/docker-build-dev.yml index 147108e..c38fc84 100644 --- a/.github/workflows/docker-build-dev.yml +++ b/.github/workflows/docker-build-dev.yml @@ -33,6 +33,9 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 0c48957..b89e8e1 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -32,6 +32,9 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/Dockerfile b/Dockerfile index 6ef7075..4784f70 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.24.0 as builder +FROM golang:1.24.0 as base WORKDIR /app COPY go.mod . @@ -6,7 +6,7 @@ COPY go.sum . RUN go mod download COPY . . -COPY . . +FROM base as builder ARG TARGETOS ARG TARGETARCH RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o main -ldflags="-w -s" . From b27620994d05bed9ab41693266386861c065ac2e Mon Sep 17 00:00:00 2001 From: M03ED <50927468+M03ED@users.noreply.github.com> Date: Mon, 10 Mar 2025 14:26:59 +0330 Subject: [PATCH 2/4] chore: generate binary in workflow instead of docker --- .github/workflows/docker-build-dev.yml | 45 +++++++++++++++++++++++--- Dockerfile.multi | 16 +++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 Dockerfile.multi diff --git a/.github/workflows/docker-build-dev.yml b/.github/workflows/docker-build-dev.yml index c38fc84..74e8ee6 100644 --- a/.github/workflows/docker-build-dev.yml +++ b/.github/workflows/docker-build-dev.yml @@ -10,16 +10,53 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - build: + build-binaries: + runs-on: ubuntu-latest + strategy: + matrix: + arch: [amd64, arm64] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.24.0' + check-latest: true + + - name: Build binary for ${{ matrix.arch }} + run: | + GOOS=linux GOARCH=${{ matrix.arch }} make build + + - name: Upload binary artifact + uses: actions/upload-artifact@v3 + with: + name: gozargah-node-linux-${{ matrix.arch }} + path: gozargah-node-linux-${{ matrix.arch }} + retention-days: 1 + + build-and-push-docker: + needs: build-binaries runs-on: ubuntu-latest permissions: contents: read packages: write - steps: - name: Checkout repository uses: actions/checkout@v4 + - name: Download all binary artifacts + uses: actions/download-artifact@v3 + + - name: Move binaries to correct location + run: | + ls -la + chmod +x */gozargah-node-linux-* + mkdir -p binaries + find . -name "gozargah-node-linux-*" -type f -exec cp {} binaries/ \; + ls -la binaries/ + - name: Login to Docker Hub uses: docker/login-action@v2 with: @@ -49,12 +86,12 @@ jobs: uses: docker/build-push-action@v5 with: context: . + file: ./Dockerfile.multi platforms: linux/amd64,linux/arm64 push: true tags: | m03ed/gozargah-node:${{ github.ref_name }} ghcr.io/m03ed/gozargah-node:${{ github.ref_name }} - labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max diff --git a/Dockerfile.multi b/Dockerfile.multi new file mode 100644 index 0000000..986b447 --- /dev/null +++ b/Dockerfile.multi @@ -0,0 +1,16 @@ +FROM alpine:latest + +RUN apk update && apk add --no-cache make + +RUN mkdir /app +WORKDIR /app + +COPY Makefile . + +ARG TARGETARCH +COPY gozargah-node-linux-${TARGETARCH} /app/main +RUN chmod +x /app/main + +RUN make install_xray + +ENTRYPOINT ["./main", "serve"] \ No newline at end of file From 173e756e1a341ff820e6dd788a5121b9f894c064 Mon Sep 17 00:00:00 2001 From: M03ED <50927468+M03ED@users.noreply.github.com> Date: Mon, 10 Mar 2025 14:29:10 +0330 Subject: [PATCH 3/4] fix: use upload-artifact@v4 --- .github/workflows/docker-build-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build-dev.yml b/.github/workflows/docker-build-dev.yml index 74e8ee6..50ff8d4 100644 --- a/.github/workflows/docker-build-dev.yml +++ b/.github/workflows/docker-build-dev.yml @@ -30,7 +30,7 @@ jobs: GOOS=linux GOARCH=${{ matrix.arch }} make build - name: Upload binary artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: gozargah-node-linux-${{ matrix.arch }} path: gozargah-node-linux-${{ matrix.arch }} @@ -47,7 +47,7 @@ jobs: uses: actions/checkout@v4 - name: Download all binary artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Move binaries to correct location run: | From 9d50fe504c9e8f2202b03da71f197c98e01cb324 Mon Sep 17 00:00:00 2001 From: M03ED <50927468+M03ED@users.noreply.github.com> Date: Mon, 10 Mar 2025 14:39:01 +0330 Subject: [PATCH 4/4] fix: apply workflow changes to On Release workflow --- .github/workflows/docker-build.yml | 44 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index b89e8e1..4d481ff 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -9,16 +9,53 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - build: + build-binaries: + runs-on: ubuntu-latest + strategy: + matrix: + arch: [amd64, arm64] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.24.0' + check-latest: true + + - name: Build binary for ${{ matrix.arch }} + run: | + GOOS=linux GOARCH=${{ matrix.arch }} make build + + - name: Upload binary artifact + uses: actions/upload-artifact@v4 + with: + name: gozargah-node-linux-${{ matrix.arch }} + path: gozargah-node-linux-${{ matrix.arch }} + retention-days: 1 + + build-and-push-docker: + needs: build-binaries runs-on: ubuntu-latest permissions: contents: read packages: write - steps: - name: Checkout repository uses: actions/checkout@v4 + - name: Download all binary artifacts + uses: actions/download-artifact@v4 + + - name: Move binaries to correct location + run: | + ls -la + chmod +x */gozargah-node-linux-* + mkdir -p binaries + find . -name "gozargah-node-linux-*" -type f -exec cp {} binaries/ \; + ls -la binaries/ + - name: Login to Docker Hub uses: docker/login-action@v2 with: @@ -59,9 +96,10 @@ jobs: uses: docker/build-push-action@v5 with: context: . + file: ./Dockerfile.multi platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKER_TAGS }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max