Feat/active task #976
Workflow file for this run
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: Build Services image | |
on: | |
create: | |
tags: | |
workflow_call: | |
inputs: | |
push_image: | |
description: 'Push image' | |
required: false | |
type: boolean | |
default: false | |
push_image_tag: | |
description: 'Push image tag' | |
default: 'latest' | |
required: false | |
type: string | |
workflow_dispatch: | |
inputs: | |
push_image: | |
description: 'Push image' | |
required: false | |
type: boolean | |
default: false | |
push_image_tag: | |
description: 'Push image tag' | |
default: 'latest' | |
required: false | |
type: string | |
push: | |
branches: [ "main" ] | |
paths: | |
- "service/**" | |
- ".github/workflows/services.yml" | |
- "!**/*.md" | |
- "!**/*.yaml" | |
pull_request: | |
branches: [ "*" ] | |
paths: | |
- "service/**" | |
- ".github/workflows/services.yml" | |
- "!**/*.md" | |
- "!**/*.yaml" | |
env: | |
# Common versions | |
GO_VERSION: "1.22" | |
DEFAULT_OWNER: "labring" | |
CRYPTOKEY: ${{ secrets.CONTROLLER_BUILD_CRYPTOKEY }} | |
jobs: | |
resolve-modules: | |
runs-on: ubuntu-20.04 | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Resolve Modules | |
id: set-matrix | |
run: bash ./scripts/resolve-modules.sh ./service | |
golangci-lint: | |
needs: [ resolve-modules ] | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: ${{ fromJson(needs.resolve-modules.outputs.matrix) }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Golang with cache | |
uses: magnetikonline/action-golang-cache@v3 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Run Linter | |
uses: golangci/golangci-lint-action@v3 | |
with: | |
version: v1.54.2 | |
working-directory: ${{ matrix.workdir }} | |
args: "--out-${NO_FUTURE}format colored-line-number" | |
image-build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
## TODO: add more modules | |
module: [database, pay, account, minio, launchpad, exceptionmonitor] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Setup Golang with cache | |
uses: magnetikonline/action-golang-cache@v3 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
run: sudo apt update && sudo apt install -y libgpgme-dev libbtrfs-dev libdevmapper-dev | |
- name: Build ${{ matrix.module }} amd64 | |
working-directory: service/${{ matrix.module }} | |
run: | | |
GOARCH=amd64 make build | |
mv bin/manager bin/service-${{ matrix.module }}-amd64 | |
chmod +x bin/service-${{ matrix.module }}-amd64 | |
- name: Build ${{ matrix.module }} arm64 | |
working-directory: service/${{ matrix.module }} | |
run: | | |
GOARCH=arm64 make build | |
mv bin/manager bin/service-${{ matrix.module }}-arm64 | |
chmod +x bin/service-${{ matrix.module }}-arm64 | |
- name: Expose git commit data | |
uses: rlespinasse/git-commit-data-action@v1 | |
- name: Check if tag | |
id: check_tag | |
run: | | |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
echo "isTag=true" >> "$GITHUB_OUTPUT" | |
else | |
echo "isTag=false" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Prepare | |
id: prepare | |
run: | | |
bash ./scripts/resolve-tag-image.sh "${{ inputs.push_image }}" "${{ steps.check_tag.outputs.isTag }}" "${{ inputs.push_image_tag }}" | |
echo docker_repo=ghcr.io/${{ github.repository_owner }}/sealos-${{ matrix.module }}-service >> $GITHUB_OUTPUT | |
- # Add support for more platforms with QEMU (optional) | |
# https://github.com/docker/setup-qemu-action | |
name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
driver-opts: network=host | |
- name: Login to Docker Hub | |
uses: docker/login-action@v2 | |
if: ${{ (github.event_name == 'push') ||(github.event_name == 'create') || (inputs.push_image == true) }} | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GH_PAT }} | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: | | |
ghcr.io/${{ github.repository_owner }}/sealos-${{ matrix.module }}-service | |
tags: | | |
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} | |
type=raw,value=${{ steps.prepare.outputs.tag_name }},enable=true | |
- name: build (and publish) ${{ matrix.module }} main image | |
uses: docker/build-push-action@v4 | |
with: | |
context: ./service/${{ matrix.module }} | |
file: ./service/${{ matrix.module }}/Dockerfile | |
# Push if it's a push event or if push_image is true | |
push: ${{ (github.event_name == 'push') ||(github.event_name == 'create') || (inputs.push_image == true) }} | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
platforms: linux/amd64,linux/arm64 | |
save-sealos: | |
uses: ./.github/workflows/import-save-sealos.yml | |
build-cluster-image: | |
if: ${{ (github.event_name == 'push') ||(github.event_name == 'create') || (inputs.push_image == true) }} | |
needs: | |
- image-build | |
- save-sealos | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
## TODO: add more modules | |
module: [database, pay, account, minio, launchpad, exceptionmonitor] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Expose git commit data | |
uses: rlespinasse/git-commit-data-action@v1 | |
- name: Check if tag | |
id: check_tag | |
run: | | |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
echo "isTag=true" >> "$GITHUB_OUTPUT" | |
else | |
echo "isTag=false" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Prepare | |
id: prepare | |
run: | | |
bash ./scripts/resolve-tag-image.sh "${{ inputs.push_image }}" "${{ steps.check_tag.outputs.isTag }}" "${{ inputs.push_image_tag }}" | |
echo old_docker_repo=ghcr.io/labring/sealos-${{ matrix.module }}-service >> $GITHUB_OUTPUT | |
echo new_docker_repo=ghcr.io/${{ github.repository_owner }}/sealos-${{ matrix.module }}-service >> $GITHUB_OUTPUT | |
echo cluster_repo=ghcr.io/${{ github.repository_owner }}/sealos-cloud-${{ matrix.module }}-service >> $GITHUB_OUTPUT | |
- name: Download sealos | |
uses: actions/download-artifact@v3 | |
with: | |
name: sealos | |
path: /tmp/ | |
- name: Verify sealos | |
run: | | |
sudo chmod a+x /tmp/sealos | |
sudo mv /tmp/sealos /usr/bin/sealos | |
sudo sealos version | |
- name: Sealos login to ghcr.io | |
# if push to master, then login to ghcr.io | |
run: | | |
sudo sealos login -u ${{ github.repository_owner }} -p ${{ secrets.GH_PAT }} --debug ghcr.io | |
- name: Mutate image tag in deploy files | |
working-directory: service/${{ matrix.module }}/deploy | |
run: | | |
OLD_DOCKER_IMAGE_NAME=${{ steps.prepare.outputs.old_docker_repo }}:latest | |
NEW_DOCKER_IMAGE_NAME=${{ steps.prepare.outputs.new_docker_repo }}:${{ steps.prepare.outputs.tag_name }} | |
sed -i "s;${OLD_DOCKER_IMAGE_NAME};${NEW_DOCKER_IMAGE_NAME};" manifests/* | |
- name: Build ${{ matrix.module }}-service cluster image | |
working-directory: service/${{ matrix.module }}/deploy | |
run: | | |
CLUSTER_IMAGE_NAME=${{ steps.prepare.outputs.cluster_repo }}:${{ steps.prepare.outputs.tag_name }} | |
sudo sealos build -t ${CLUSTER_IMAGE_NAME}-amd64 --platform linux/amd64 -f Kubefile | |
sudo rm -rf registry | |
sudo sealos build -t ${CLUSTER_IMAGE_NAME}-arm64 --platform linux/arm64 -f Kubefile | |
sudo sealos images | |
- name: Build ${{ matrix.module }}-service cluster image for latest | |
run: | | |
CLUSTER_IMAGE_NAME=${{ steps.prepare.outputs.cluster_repo }}:${{ steps.prepare.outputs.tag_name }} | |
CLUSTER_IMAGE_NAME_LATEST=${{ steps.prepare.outputs.cluster_repo }}:latest | |
sudo sealos tag ${CLUSTER_IMAGE_NAME}-amd64 ${CLUSTER_IMAGE_NAME_LATEST}-amd64 | |
sudo sealos tag ${CLUSTER_IMAGE_NAME}-arm64 ${CLUSTER_IMAGE_NAME_LATEST}-arm64 | |
sudo sealos images | |
bash docker/patch/manifest-cluster-images.sh $CLUSTER_IMAGE_NAME | |
bash docker/patch/manifest-cluster-images.sh $CLUSTER_IMAGE_NAME_LATEST | |
- name: Renew issue and Sync Images | |
uses: labring/[email protected] | |
if: ${{ github.repository_owner == env.DEFAULT_OWNER }} | |
with: | |
version: v0.0.8-rc1 | |
env: | |
GH_TOKEN: "${{ secrets.GH_PAT }}" | |
SEALOS_TYPE: "issue_renew" | |
SEALOS_ISSUE_TITLE: "[DaylyReport] Auto build for sealos" | |
SEALOS_ISSUE_BODYFILE: "scripts/ISSUE_RENEW.md" | |
SEALOS_ISSUE_LABEL: "dayly-report" | |
SEALOS_ISSUE_TYPE: "day" | |
SEALOS_ISSUE_REPO: "labring-actions/cluster-image" | |
SEALOS_COMMENT_BODY: "/imagesync ghcr.io/${{ github.repository_owner }}/sealos-cloud-${{ matrix.module }}-service:${{ steps.prepare.outputs.tag_name }}" | |
- name: Renew issue and Sync Images for latest | |
uses: labring/[email protected] | |
if: ${{ github.repository_owner == env.DEFAULT_OWNER }} | |
with: | |
version: v0.0.8-rc1 | |
env: | |
GH_TOKEN: "${{ secrets.GH_PAT }}" | |
SEALOS_TYPE: "issue_renew" | |
SEALOS_ISSUE_TITLE: "[DaylyReport] Auto build for sealos" | |
SEALOS_ISSUE_BODYFILE: "scripts/ISSUE_RENEW.md" | |
SEALOS_ISSUE_LABEL: "dayly-report" | |
SEALOS_ISSUE_TYPE: "day" | |
SEALOS_ISSUE_REPO: "labring-actions/cluster-image" | |
SEALOS_COMMENT_BODY: "/imagesync ghcr.io/${{ github.repository_owner }}/sealos-cloud-${{ matrix.module }}-service:latest" |