diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..90e760f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + open-pull-requests-limit: 1 + rebase-strategy: "disabled" + - package-ecosystem: docker + directory: / + schedule: + interval: daily + open-pull-requests-limit: 1 + rebase-strategy: "disabled" \ No newline at end of file diff --git a/.github/workflows/image-prs.yaml b/.github/workflows/image-prs.yaml new file mode 100644 index 0000000..89ee25f --- /dev/null +++ b/.github/workflows/image-prs.yaml @@ -0,0 +1,121 @@ +name: Image PRs Build + +on: + pull_request_target: + types: + - opened + - synchronize + - reopened + push: + branches: + - master + +jobs: + build-and-push-prs: + if: ${{ github.repository == 'cilium/echoserver-udp' }} + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - name: echoserver-udp + dockerfile: ./Dockerfile + + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c + + - name: Set up QEMU + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 + + - name: Login to quay.io for CI + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d + with: + registry: quay.io + username: ${{ secrets.QUAY_CI_ECHOSERVER_UDP_USERNAME }} + password: ${{ secrets.QUAY_CI_ECHOSERVER_UDP_PASSWORD }} + + - name: Getting image tag + id: tag + run: | + if [ ${{ github.event.pull_request.head.sha }} != "" ]; then + echo tag=${{ github.event.pull_request.head.sha }} >> $GITHUB_OUTPUT + else + echo tag=${{ github.sha }} >> $GITHUB_OUTPUT + fi + + - name: Checkout Source Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + with: + ref: ${{ steps.tag.outputs.tag }} + + # master branch pushes + - name: CI Build ${{ matrix.name }} + if: ${{ github.event_name != 'pull_request_target' }} + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 + id: docker_build_ci_master + with: + context: . + file: ${{ matrix.dockerfile }} + push: true + platforms: linux/amd64,linux/arm64 + tags: | + quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:latest + quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:${{ steps.tag.outputs.tag }} + + - name: CI Image Releases digests + if: ${{ github.event_name != 'pull_request_target' }} + shell: bash + run: | + mkdir -p image-digest/ + echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:latest@${{ steps.docker_build_ci_master.outputs.digest }}" > image-digest/${{ matrix.name }}.txt + echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_ci_master.outputs.digest }}" >> image-digest/${{ matrix.name }}.txt + + # PR updates + - name: CI Build ${{ matrix.name }} + if: ${{ github.event_name == 'pull_request_target' }} + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 + id: docker_build_ci_pr + with: + context: . + file: ${{ matrix.dockerfile }} + push: true + platforms: linux/amd64,linux/arm64 + tags: | + quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:${{ steps.tag.outputs.tag }} + + - name: CI Image Releases digests + if: ${{ github.event_name == 'pull_request_target' }} + shell: bash + run: | + mkdir -p image-digest/ + echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_ci_pr.outputs.digest }}" >> image-digest/${{ matrix.name }}.txt + + # Upload artifact digests + - name: Upload artifact digests + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 + with: + name: image-digest ${{ matrix.name }} + path: image-digest + retention-days: 1 + + image-digests: + if: ${{ github.repository == 'cilium/echoserver-udp' }} + name: Display Digests + runs-on: ubuntu-22.04 + needs: build-and-push-prs + steps: + - name: Downloading Image Digests + shell: bash + run: | + mkdir -p image-digest/ + + - name: Download digests of all images built + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 + with: + path: image-digest/ + + - name: Image Digests Output + shell: bash + run: | + cd image-digest/ + find -type f | sort | xargs -d '\n' cat \ No newline at end of file diff --git a/.github/workflows/image-release.yaml b/.github/workflows/image-release.yaml new file mode 100644 index 0000000..ffd8f34 --- /dev/null +++ b/.github/workflows/image-release.yaml @@ -0,0 +1,96 @@ +name: Image Release Build + +on: + push: + tags: + - v[0-9]+.[0-9]+.[0-9]+ + - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+ + +jobs: + build-and-push: + if: ${{ github.repository == 'cilium/echoserver-udp' }} + environment: release + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - name: echoserver-udp + dockerfile: ./Dockerfile + + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c + + - name: Set up QEMU + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 + + - name: Login to quay.io + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d + with: + registry: quay.io + username: ${{ secrets.QUAY_RELEASE_ECHOSERVER_UDP_USERNAME }} + password: ${{ secrets.QUAY_RELEASE_ECHOSERVER_UDP_PASSWORD }} + + - name: Getting image tag + id: tag + run: | + echo tag=${GITHUB_REF##*/} >> $GITHUB_OUTPUT + + - name: Checkout Source Code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + + - name: Release Build ${{ matrix.name }} + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 + id: docker_build_release + with: + context: . + file: ${{ matrix.dockerfile }} + push: true + platforms: linux/amd64,linux/arm64 + tags: | + quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }} + quay.io/${{ github.repository_owner }}/${{ matrix.name }}-ci:${{ github.sha }} + + - name: Image Release Digest + shell: bash + run: | + mkdir -p image-digest/ + job_name=${{ matrix.name }} + job_name_capital=${job_name^^} + job_name_underscored=${job_name_capital//-/_} + echo "${job_name_underscored}_DIGEST := \"${{ steps.docker_build_release.outputs.digest }}\"" > image-digest/makefile-digest.txt + + echo "### ${{ matrix.name }}" > image-digest/${{ matrix.name }}.txt + echo "" >> image-digest/${{ matrix.name }}.txt + echo "\`quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_release.outputs.digest }}\`" >> image-digest/${{ matrix.name }}.txt + echo "" >> image-digest/${{ matrix.name }}.txt + + # Upload artifact digests + - name: Upload artifact digests + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 + with: + name: image-digest ${{ matrix.name }} + path: image-digest + retention-days: 1 + + image-digests: + if: ${{ github.repository == 'cilium/echoserver-udp' }} + name: Display Digests + runs-on: ubuntu-22.04 + needs: build-and-push + steps: + - name: Downloading Image Digests + shell: bash + run: | + mkdir -p image-digest/ + + - name: Download digests of all images built + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 + with: + path: image-digest/ + + - name: Image Digests Output + shell: bash + run: | + cd image-digest/ + find -type f | sort | xargs -d '\n' cat \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 09395e0..fd6418d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ -FROM golang:1.13.7-alpine as builder +FROM golang:1.22.1-alpine3.19 as builder WORKDIR /go/src/app COPY . . RUN go build -o echoserver-tftp . -FROM alpine:3.11 +FROM alpine:3.19.1 COPY --from=builder /go/src/app/echoserver-tftp /usr/bin/echoserver-tftp ENTRYPOINT ["/usr/bin/echoserver-tftp"] diff --git a/go.mod b/go.mod index 3e2a903..a313dcf 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module tftp-echoserver -go 1.13 +go 1.22 require pack.ag/tftp v1.0.0