forked from kubewharf/katalyst-core
chore(ci): add ci pipeline
This commit is contained in:
parent
6c7fa0715d
commit
48fe043e45
|
@ -0,0 +1,102 @@
|
|||
name: Build/Push Images
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ 'master', 'main', 'release-*' ]
|
||||
# Publish semver tags as releases.
|
||||
pull_request: {}
|
||||
release:
|
||||
types: [ 'published' ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY_GITHUB: ghcr.io
|
||||
REGISTRY_DOCKERHUB: docker.io
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# This is used to complete the identity challenge
|
||||
# with sigstore/fulcio when running outside of PRs.
|
||||
id-token: write
|
||||
strategy:
|
||||
matrix:
|
||||
target: [katalyst-agent, katalyst-scheduler, katalyst-controller, katalyst-webhook, katalyst-metric]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Workaround: https://github.com/docker/build-push-action/issues/461
|
||||
- name: Setup Docker buildx
|
||||
uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY_GITHUB }}
|
||||
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
|
||||
with:
|
||||
registry: ${{ env.REGISTRY_GITHUB }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Log into registry ${{ env.REGISTRY_DOCKERHUB }}
|
||||
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
|
||||
with:
|
||||
registry: ${{ env.REGISTRY_DOCKERHUB }}
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
# Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
|
||||
with:
|
||||
images: ${{ env.REGISTRY_GITHUB }}/${{ github.repository_owner }}/${{ matrix.target }}
|
||||
|
||||
# For pushes on main or release-* branch,
|
||||
# use ${repo_branch_name}-${commit_sha} as image tag
|
||||
- name: Set image tag for pushes
|
||||
id: image-tag-push
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
run: echo "IMAGE_TAG=${GITHUB_REF#refs/*/}-${GITHUB_SHA}" >> $GITHUB_ENV
|
||||
|
||||
# For releases use ${repo_tag} as image tag
|
||||
- name: Set image tag for release
|
||||
id: image-tag-release
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
run: echo "IMAGE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
|
||||
# For pull requests use ${repo_sha} as image tag
|
||||
- name: Set image tag for pr
|
||||
id: image-tag-pr
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
run: echo "IMAGE_TAG=${GITHUB_SHA}" >> $GITHUB_ENV
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
id: build-and-push
|
||||
uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
file: build/dockerfiles/Dockerfile
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
build-args: |
|
||||
BINARY=${{ matrix.target }}
|
||||
tags: |
|
||||
${{ env.REGISTRY_GITHUB }}/${{ github.repository_owner }}/${{ matrix.target }}:${{ env.IMAGE_TAG }}
|
||||
${{ env.REGISTRY_DOCKERHUB }}/${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.target }}:${{ env.IMAGE_TAG }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha,target={{ matrix.target }}
|
||||
cache-to: type=gha,mode=max,target={{ matrix.target }}
|
|
@ -12,17 +12,14 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# todo
|
||||
# once all code is public, enable multi-stage build
|
||||
# FROM --platform=${BUILDPLATFORM} golang:1.18 as builder
|
||||
# ADD . /build
|
||||
# ARG TARGETOS TARGETARCH GIT_VERSION
|
||||
# ARG BINARY
|
||||
# WORKDIR /build/
|
||||
# RUN make build-linux TARGET=${BINARY}
|
||||
FROM --platform=${BUILDPLATFORM} golang:1.18 as builder
|
||||
ADD . /build
|
||||
ARG TARGETOS TARGETARCH GIT_VERSION
|
||||
ARG BINARY
|
||||
WORKDIR /build/
|
||||
RUN make build-binaries TARGET=${BINARY} TARGET_ARCHS=${TARGETARCH}
|
||||
|
||||
FROM --platform=${BUILDPLATFORM} kubewharf/distroless-base-debian11:latest
|
||||
ARG TARGETOS TARGETARCH
|
||||
ARG BINARY
|
||||
#COPY --from=builder /build/output/bin/${TARGETOS}/${TARGETARCH}/${BINARY} /usr/local/bin/${BINARY}
|
||||
COPY ./output/bin/${TARGETOS}/${TARGETARCH}/${BINARY} /usr/local/bin/${BINARY}
|
||||
COPY --from=builder /build/output/bin/${TARGETOS}/${TARGETARCH}/${BINARY} /usr/local/bin/${BINARY}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Copyright 2022 The Katalyst Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM kubewharf/distroless-base-debian11:latest
|
||||
ARG TARGETOS TARGETARCH
|
||||
ARG BINARY
|
||||
|
||||
COPY ./output/bin/${TARGETOS}/${TARGETARCH}/${BINARY} /usr/local/bin/${BINARY}
|
|
@ -18,7 +18,7 @@ TARGET_ARCHS=${TARGET_ARCHS:-""}
|
|||
|
||||
OUTPUT_DIR=${ROOT_DIR}/output
|
||||
BIN_DIR=${OUTPUT_DIR}/bin
|
||||
DOCKERFILE=${ROOT_DIR}/build/dockerfiles/Dockerfile
|
||||
DOCKERFILE=${ROOT_DIR}/build/dockerfiles/Dockerfile.local
|
||||
|
||||
PROJECT_PREFIX=${PROJECT_PREFIX:-katalyst}
|
||||
GIT_VERSION=${GIT_VERSION:-$(git describe --abbrev=0 --tags --always)}
|
||||
|
|
Loading…
Reference in New Issue