From 3d1efdf6ea67b568fec1cc409c4e7d8dc364e23c Mon Sep 17 00:00:00 2001 From: Dimitris Karakasilis Date: Tue, 3 Oct 2023 12:53:12 +0300 Subject: [PATCH] Add pipeline to build enki image Signed-off-by: Dimitris Karakasilis --- .github/workflows/enki-image.yml | 69 ++++++++++++++++++++++++++++++++ .github/workflows/enki.yml | 24 +++++++++++ Dockerfile | 12 +++++- 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/enki-image.yml create mode 100644 .github/workflows/enki.yml diff --git a/.github/workflows/enki-image.yml b/.github/workflows/enki-image.yml new file mode 100644 index 0000000..11ffe91 --- /dev/null +++ b/.github/workflows/enki-image.yml @@ -0,0 +1,69 @@ +--- +name: 'Build enki image' + +on: + push: + branches: + - master + tags: + - '*' +concurrency: + group: enki-image-${{ github.ref || github.head_ref }} + cancel-in-progress: true + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Prepare + id: prep + run: | + DOCKER_IMAGE=quay.io/kairos/enki + VERSION=latest + SHORTREF=${GITHUB_SHA::8} + # If this is git tag, use the tag name as a docker tag + if [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/} + fi + TAGS="${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${SHORTREF}" + # If the VERSION looks like a version number, assume that + # this is the most recent version of the image and also + # tag it 'latest'. + if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + TAGS="$TAGS,${DOCKER_IMAGE}:latest" + fi + # Set output parameters. + echo ::set-output name=version::${VERSION} + echo ::set-output name=ref::${SHORTREF} + echo ::set-output name=tags::${TAGS} + echo ::set-output name=docker_image::${DOCKER_IMAGE} + - name: Set up QEMU + uses: docker/setup-qemu-action@master + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@master + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + + - name: Build + uses: docker/build-push-action@v4 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ./tools-image/enki + file: ./tools-image/enki/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.prep.outputs.tags }} + build-args: "ENKI_VERSION=${{ steps.prep.outputs.version }}, ENKI_COMMIT=${{ steps.prep.outputs.ref }}" diff --git a/.github/workflows/enki.yml b/.github/workflows/enki.yml new file mode 100644 index 0000000..a4521ad --- /dev/null +++ b/.github/workflows/enki.yml @@ -0,0 +1,24 @@ +--- +name: 'run enki unit tests' + +on: + pull_request: + +concurrency: + group: enki-${{ github.ref || github.head_ref }} + cancel-in-progress: true + +env: + FORCE_COLOR: 1 + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: earthly/actions-setup@v1.0.7 + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build + run: cd tools-image/enki && earthly -P +test diff --git a/Dockerfile b/Dockerfile index fae31ab..e768afa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,17 @@ WORKDIR /build COPY . . ENV CGO_ENABLED=0 -RUN go build -ldflags '-extldflags "-static"' -o /enki +RUN go mod download +# Set arg/env after go mod download, otherwise we invalidate the cached layers due to the commit changing easily +ARG ENKI_VERSION +ARG ENKI_COMMIT +ENV ENKI_VERSION=${ENKI_VERSION} +ENV ENKI_COMMIT=${ENKI_COMMIT} +RUN go build \ + -ldflags "-w -s \ + -X github.com/kairos-io/enki/internal/version.version=$ENKI_VERSION \ + -X github.com/kairos-io/enki/internal/version.gitCommit=$ENKI_COMMIT" \ + -o /usr/bin/enki FROM gcr.io/kaniko-project/executor:latest