From 72d5f92cc173ddd4da9e536696383823b6fd947e Mon Sep 17 00:00:00 2001 From: Pattarapon Theanthong Date: Wed, 28 Feb 2024 08:45:21 +0700 Subject: [PATCH] [cicd][SRE-415]: build custom image --- .github/workflows/custom-build.yml | 192 +++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 .github/workflows/custom-build.yml diff --git a/.github/workflows/custom-build.yml b/.github/workflows/custom-build.yml new file mode 100644 index 00000000..a89b30ad --- /dev/null +++ b/.github/workflows/custom-build.yml @@ -0,0 +1,192 @@ +name: Build and Push + +on: + workflow_dispatch: + push: + branches: + - 'main' + - feature/SRE-415 + tags: + - 'v*' + +jobs: + # build-binaries: + # name: Build binaries + # runs-on: ubuntu-latest + # env: { CGO_ENABLED: 0 } + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + + # - name: Setup Go + # uses: actions/setup-go@v4 + # with: { go-version: '1.21' } + + # - name: Build go2rtc_win64 + # env: { GOOS: windows, GOARCH: amd64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_win64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_win64, path: go2rtc.exe } + + # - name: Build go2rtc_win32 + # env: { GOOS: windows, GOARCH: 386 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_win32 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_win32, path: go2rtc.exe } + + # - name: Build go2rtc_win_arm64 + # env: { GOOS: windows, GOARCH: arm64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_win_arm64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_win_arm64, path: go2rtc.exe } + + # - name: Build go2rtc_linux_amd64 + # env: { GOOS: linux, GOARCH: amd64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_amd64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_amd64, path: go2rtc } + + # - name: Build go2rtc_linux_i386 + # env: { GOOS: linux, GOARCH: 386 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_i386 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_i386, path: go2rtc } + + # - name: Build go2rtc_linux_arm64 + # env: { GOOS: linux, GOARCH: arm64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_arm64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_arm64, path: go2rtc } + + # - name: Build go2rtc_linux_arm + # env: { GOOS: linux, GOARCH: arm, GOARM: 7 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_arm + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_arm, path: go2rtc } + + # - name: Build go2rtc_linux_armv6 + # env: { GOOS: linux, GOARCH: arm, GOARM: 6 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_armv6 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_armv6, path: go2rtc } + + # - name: Build go2rtc_linux_mipsel + # env: { GOOS: linux, GOARCH: mipsle } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_linux_mipsel + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_linux_mipsel, path: go2rtc } + + # - name: Build go2rtc_mac_amd64 + # env: { GOOS: darwin, GOARCH: amd64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_mac_amd64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_mac_amd64, path: go2rtc } + + # - name: Build go2rtc_mac_arm64 + # env: { GOOS: darwin, GOARCH: arm64 } + # run: go build -ldflags "-s -w" -trimpath + # - name: Upload go2rtc_mac_arm64 + # uses: actions/upload-artifact@v3 + # with: { name: go2rtc_mac_arm64, path: go2rtc } + + docker-image: + name: Build docker image + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ github.repository }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}},enable=false + type=match,pattern=v(.*),group=1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Private Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ secrets.PRIVATE_REGISTRY_HOST }} + username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }} + password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + platforms: | + linux/amd64 + linux/386 + linux/arm/v7 + linux/arm64/v8 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + + docker-hardware: + name: Build docker hardware + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Docker meta + id: meta-hw + uses: docker/metadata-action@v4 + with: + images: ${{ github.repository }} + flavor: | + suffix=-hardware + latest=false + tags: | + type=ref,event=branch + type=semver,pattern={{version}},enable=false + type=match,pattern=v(.*),group=1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Private Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ secrets.PRIVATE_REGISTRY_HOST }} + username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }} + password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + file: hardware.Dockerfile + platforms: linux/amd64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta-hw.outputs.tags }} + labels: ${{ steps.meta-hw.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max