name: Build, Test, and Deploy on: pull_request: types: [closed] push: branches: [master] workflow_dispatch: jobs: lint: name: Lint Code runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/cache@v4 with: path: build/cache key: ${{ runner.os }}-build-tools-cache-${{ hashFiles('build/checksums.txt') }} - name: Set up Go uses: actions/setup-go@v5 with: go-version: 1.23.0 cache: false - name: Run linters run: | go run build/ci.go lint go run build/ci.go check_tidy go run build/ci.go check_baddeps build-go: name: Build & Test Go runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: 1.24.0 cache: false - name: Run Go tests run: go test -short ./... env: GOOS: linux GOARCH: 386 check-labels: name: Check PR Labels runs-on: ubuntu-latest if: github.event.pull_request.merged == true outputs: ci_build: ${{ steps.label-check.outputs.ci_build }} steps: - name: Fetch PR Labels id: label-check run: | echo "Fetching labels for PR #${{ github.event.pull_request.number }}..." LABELS=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/labels" | jq -r '.[].name') echo "Found labels: $LABELS" if echo "$LABELS" | grep -q "CI:Build"; then echo "ci_build=true" >> $GITHUB_ENV echo "::set-output name=ci_build::true" else echo "ci_build=false" >> $GITHUB_ENV echo "::set-output name=ci_build::false" fi build-docker: name: Build & Push Docker Image runs-on: ubuntu-latest needs: [lint, build-go, check-labels] if: needs.check-labels.outputs.ci_build == 'true' steps: - name: Checkout repository uses: actions/checkout@v4 - name: Log in to Docker Hub run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Build Docker image run: docker build -t ipangelov/go-ethereum:latest . - name: Push Docker image to Docker Hub run: docker push ipangelov/go-ethereum:latest