Update the CI/CD workflow to reference the full path to Go binaries (/usr/local/go/bin/go, gofmt) instead of relying on PATH resolution. This ensures the correct Go version is used when running in the Docker container where the binary location may differ from the default PATH expectation.
76 lines
2.4 KiB
YAML
76 lines
2.4 KiB
YAML
name: CI/CD
|
|
|
|
on:
|
|
push:
|
|
branches: [main, master]
|
|
pull_request:
|
|
branches: [main, master]
|
|
|
|
jobs:
|
|
lint-and-format:
|
|
name: Lint & Format
|
|
runs-on: shell-ubuntu
|
|
steps:
|
|
- name: Checkout repo
|
|
run: git clone "${{ secrets.G_CLONE_URL }}" .
|
|
|
|
- name: Set go proxy mirror
|
|
run: /usr/local/go/bin/go env -w GOPROXY=https://go.iranserver.com/repository/go/ && /usr/local/go/bin/go env -w GOSUMDB=off
|
|
|
|
- name: Download dependencies
|
|
run: /usr/local/go/bin/go mod download
|
|
|
|
- name: Check formatting
|
|
run: |
|
|
if [ "$(/usr/local/go/bin/gofmt -l $(find . -name '*.go' -not -path './vendor/*'))" ]; then
|
|
echo "Files not properly formatted:"
|
|
/usr/local/go/bin/gofmt -l $(find . -name '*.go' -not -path './vendor/*')
|
|
exit 1
|
|
fi
|
|
|
|
build:
|
|
name: Build binaries
|
|
runs-on: shell-ubuntu
|
|
needs: lint-and-format
|
|
steps:
|
|
- name: Checkout repo
|
|
run: git clone "${{ secrets.G_CLONE_URL }}" .
|
|
|
|
- name: Build for Linux amd64
|
|
run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 /usr/local/go/bin/go build -o auth-gate-linux-amd64 .
|
|
|
|
- name: Build for Linux arm64
|
|
run: CGO_ENABLED=0 GOOS=linux GOARCH=arm64 /usr/local/go/bin/go build -o auth-gate-linux-arm64 .
|
|
|
|
- name: Build for Windows amd64
|
|
run: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 /usr/local/go/bin/go build -o auth-gate-windows-amd64.exe
|
|
|
|
- name: Package binaries
|
|
run: |
|
|
tar czf auth-gate-linux-amd64.tar.gz auth-gate-linux-amd64
|
|
tar czf auth-gate-linux-arm64.tar.gz auth-gate-linux-arm64
|
|
tar czf auth-gate-windows-amd64.tar.gz auth-gate-windows-amd64.exe
|
|
|
|
docker:
|
|
name: Build & push Docker image
|
|
runs-on: shell-ubuntu
|
|
needs: lint-and-format
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- name: Checkout repo
|
|
run: git clone "${{ secrets.G_CLONE_URL }}" .
|
|
|
|
- name: Login to Gitea Registry
|
|
run: echo "${{ secrets.G_TOKEN }}" | docker login git.yejayekhoob.com -u "${{ secrets.G_USERNAME }}" --password-stdin
|
|
|
|
- name: Set up Docker Buildx
|
|
run: docker buildx create --name builder --use
|
|
|
|
- name: Build & push
|
|
run: |
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--tag "git.yejayekhoob.com/db123/auth-gate:${{ github.sha }}" \
|
|
--tag "git.yejayekhoob.com/db123/auth-gate:latest" \
|
|
--push \
|
|
. |