release-image-build #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: release-image-build | |
on: | |
workflow_dispatch: | |
inputs: | |
commit: | |
description: 'Commit reference (branch or SHA) from which to build the images.' | |
required: true | |
tag: | |
description: 'Desired release version tag (e.g. v1.0.0-rc.1).' | |
required: true | |
jobs: | |
release_apiserver_image: | |
env: | |
working-directory: ./apiserver | |
name: Release APIServer Docker Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: v1.20 | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ github.event.inputs.commit }} | |
- name: install kubebuilder | |
run: | | |
wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.0.0/kubebuilder_$(go env GOOS)_$(go env GOARCH) | |
sudo mv kubebuilder_$(go env GOOS)_$(go env GOARCH) /usr/local/bin/kubebuilder | |
- name: Get revision SHA | |
id: vars | |
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" | |
- name: Get dependencies | |
run: go mod download | |
working-directory: ${{env.working-directory}} | |
- name: Build | |
run: go build ./... | |
working-directory: ${{env.working-directory}} | |
- name: Test | |
run: go test ./pkg/... ./cmd/... -race -parallel 4 | |
working-directory: ${{env.working-directory}} | |
- name: Set up Docker | |
uses: docker-practice/actions-setup-docker@master | |
- name: Build Docker Image - Apiserver | |
run: | | |
docker build -t kuberay/apiserver:${{ steps.vars.outputs.sha_short }} -f apiserver/Dockerfile . | |
docker save -o /tmp/apiserver.tar kuberay/apiserver:${{ steps.vars.outputs.sha_short }} | |
- name: Log in to Quay.io | |
uses: docker/login-action@v2 | |
with: | |
registry: quay.io | |
username: ${{ secrets.QUAY_USERNAME }} | |
password: ${{ secrets.QUAY_ROBOT_TOKEN }} | |
- name: Push Apiserver to Quay.io | |
run: | | |
docker image tag kuberay/apiserver:${{ steps.vars.outputs.sha_short }} quay.io/kuberay/apiserver:${{ steps.vars.outputs.sha_short }}; | |
docker push quay.io/kuberay/apiserver:${{ steps.vars.outputs.sha_short }}; | |
docker image tag kuberay/apiserver:${{ steps.vars.outputs.sha_short }} quay.io/kuberay/apiserver:${{ github.event.inputs.tag }}; | |
docker push quay.io/kuberay/apiserver:${{ github.event.inputs.tag }} | |
release_operator_image: | |
env: | |
working-directory: ./ray-operator | |
name: Release Operator Docker Images | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: v1.20 | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ github.event.inputs.commit }} | |
- name: install kubebuilder | |
run: | | |
wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.0.0/kubebuilder_$(go env GOOS)_$(go env GOARCH) | |
sudo mv kubebuilder_$(go env GOOS)_$(go env GOARCH) /usr/local/bin/kubebuilder | |
- name: Get revision SHA | |
id: vars | |
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" | |
- name: Get dependencies | |
run: go mod download | |
working-directory: ${{env.working-directory}} | |
- name: Build | |
run: make build | |
working-directory: ${{env.working-directory}} | |
- name: Test | |
run: make test | |
working-directory: ${{env.working-directory}} | |
- name: Set up Docker | |
uses: docker-practice/actions-setup-docker@master | |
- name: Build Docker Image - Operator | |
run: | | |
IMG=kuberay/operator:${{ steps.vars.outputs.sha_short }} make docker-image | |
working-directory: ${{env.working-directory}} | |
- name: Log in to Quay.io | |
uses: docker/login-action@v2 | |
with: | |
registry: quay.io | |
username: ${{ secrets.QUAY_USERNAME }} | |
password: ${{ secrets.QUAY_ROBOT_TOKEN }} | |
# Build operators inside the gh runner vm directly and then copy the go binaries to docker images using the Dockerfile.buildx | |
- name: Build linux/amd64 Operator go binary | |
env: | |
CGO_ENABLED: 1 | |
GOOS: linux | |
GOARCH: amd64 | |
run: | | |
CGO_ENABLED=$CGO_ENABLED GOOS=$GOOS GOARCH=$GOARCH go build -tags strictfipsruntime -a -o manager-$GOARCH main.go | |
working-directory: ${{env.working-directory}} | |
- name: Build linux/arm64 Operator binary | |
env: | |
CC: aarch64-linux-gnu-gcc | |
CGO_ENABLED: 1 | |
GOOS: linux | |
GOARCH: arm64 | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross | |
CC=$CC CGO_ENABLED=$CGO_ENABLED GOOS=$GOOS GOARCH=$GOARCH go build -tags strictfipsruntime -a -o manager-$GOARCH main.go | |
working-directory: ${{env.working-directory}} | |
- name: Build MultiArch Image | |
uses: docker/build-push-action@v5 | |
env: | |
PUSH: true | |
REPO_ORG: kuberay | |
REPO_NAME: operator | |
with: | |
platforms: linux/amd64,linux/arm64 | |
context: ${{env.working-directory}} | |
file: ${{env.working-directory}}/Dockerfile.buildx | |
push: ${{env.PUSH}} | |
provenance: false | |
tags: | | |
quay.io/${{env.REPO_ORG}}/${{env.REPO_NAME}}:${{ steps.vars.outputs.sha_short }} | |
quay.io/${{env.REPO_ORG}}/${{env.REPO_NAME}}:${{ github.event.inputs.tag }} | |
- name: Create tag | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
await github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: 'refs/tags/ray-operator/${{ github.event.inputs.tag }}', | |
sha: '${{ github.event.inputs.commit }}' | |
}) |