name: Go Linter on: pull_request: branches: - master - release push: branches: - master - release jobs: lint: name: Run golangci-lint runs-on: ubuntu-22.04 strategy: matrix: project: - api_gateway steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.23 - name: Install golangci-lint run: | curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.62.2 - name: Run golangci-lint run: | go mod tidy golangci-lint run -c ./.golangci-lint.yaml --fix=false --color=always build: name: Build golang services runs-on: ubuntu-22.04 needs: lint strategy: matrix: project: - api_gateway steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.23 - name: Build golang services run: | go mod tidy CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o main cmd/main.go push: name: Push Docker Images runs-on: ubuntu-22.04 needs: lint if: ${{ gitea.ref == 'refs/heads/master' || gitea.ref == 'refs/heads/release' }} strategy: matrix: project: - api_gateway steps: - name: Checkout репозитория uses: actions/checkout@v4 - name: Extract Git metadata id: git-metadata env: REPO: ${{ github.repository }} run: | GIT_SHA=$(git rev-parse --short HEAD) GIT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo 'none') TARGET_ENV=${{ github.ref == 'refs/heads/release' && 'staging' || 'production' }} echo "GIT_SHA=${GIT_SHA}" >> $GITHUB_OUTPUT echo "GIT_TAG=${GIT_TAG}" >> $GITHUB_OUTPUT echo "TARGET_ENV=${TARGET_ENV}" >> $GITHUB_OUTPUT echo "REPO_NAME=$(echo $REPO | cut -d'/' -f2)" >> $GITHUB_OUTPUT - name: Login to Docker Registry uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Extract image metadata id: docker-metadata needs: git-metadata env: REGISTRY: hub.docker.com REPO_NAME: ${{ steps.git-metadata.outputs.REPO_NAME }} TARGET_ENV: ${{ steps.git-metadata.outputs.TARGET_ENV }} GIT_TAG: ${{ steps.git-metadata.outputs.GIT_TAG }} GIT_SHA: ${{ steps.git-metadata.outputs.GIT_SHA }} run: | IMAGE_TAG=$TARGET_ENV-$($GIT_TAG != 'none' && echo $GIT_TAG || echo $GIT_SHA) echo "IMAGE_NAME=molvaapp/${{ steps.git-metadata.outputs.REPO_NAME }}" >> $GITHUB_OUTPUT echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_OUTPUT - name: Build and Push Docker Image needs: docker-metadata env: IMAGE_NAME: ${{ steps.docker-metadata.outputs.IMAGE_NAME }} IMAGE_TAG: ${{ steps.docker-metadata.outputs.IMAGE_TAG }} CONFIG_FILE: .build/config/${{ steps.git-metadata.outputs.TARGET_ENV }}.yaml run: | docker build \ --build-arg BUILD_LDFLAGS="-w -s" \ --build-arg CONFIG_FILE_PATH=$CONFIG_FILE \ -t $IMAGE_NAME:$IMAGE_TAG \ -t $IMAGE_NAME:latest \ . docker tag $IMAGE_NAME:$IMAGE_TAG $IMAGE_NAME:latest docker push $IMAGE_NAME:$IMAGE_TAG docker push $IMAGE_NAME:latest echo "Pushed image $IMAGE_NAME:$IMAGE_TAG and :latest"