Skip to content

Commit

Permalink
refactor: add reusable workflows to build, test and release oceanbase-ce
Browse files Browse the repository at this point in the history
  • Loading branch information
whhe committed Aug 28, 2024
1 parent 1e8e0d3 commit f5a3f7c
Show file tree
Hide file tree
Showing 10 changed files with 302 additions and 348 deletions.
78 changes: 0 additions & 78 deletions .github/workflows/build-oceanbase-ce.yml

This file was deleted.

94 changes: 5 additions & 89 deletions .github/workflows/release-lts-oceanbase-ce.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,93 +6,9 @@ on:
- "lts-oceanbase-ce-[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+"
- "lts-oceanbase-[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+"

env:
tagName: ${{ github.ref_name }}

jobs:
release-lts-oceanbase-ce:
runs-on: ubuntu-latest
steps:
- name: Free disk space on Ubuntu runner
uses: kfir4444/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
swap-storage: true

- name: Checkout repository
uses: actions/checkout@v4

- name: Set Version variables
id: set_version_vars
run: echo "version=$(echo $tagName | grep -P '(\d*\.\d*\.\d*\.\d*-\d{18})' --only-matching)" >> $GITHUB_OUTPUT

- name: Set LTS tag variables
id: set_lts_tag_vars
run: echo "lts_tag=$(echo $tagName | grep -P '(\d*\.\d*\.\d*)' --only-matching)" >> $GITHUB_OUTPUT

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Log in to Quay io
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_IO_USERNAME }}
password: ${{ secrets.QUAY_IO_PASSWORD }}

- name: Log in to Ghcr io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build pre image
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64
file: ./oceanbase-ce/Dockerfile.pre
push: false
load: true
tags: oceanbase-ce-pre
build-args: |
VERSION=${{ steps.set_version_vars.outputs.version }}
- name: Copy storage files
run: |
mkdir -p ./oceanbase-ce/share
docker run -v ./oceanbase-ce/share:/root/share oceanbase-ce-pre
- name: Build and push observer w/o cache
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64,linux/arm64
file: ./oceanbase-ce/Dockerfile
push: true
tags: |
${{ vars.DOCKER_PUSH_BASE }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
quay.io/${{ vars.QUAY_IO_PUSH_BASE }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
ghcr.io/${{ github.repository_owner }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
${{ vars.DOCKER_PUSH_BASE }}/oceanbase-ce:${{ steps.set_lts_tag_vars.outputs.lts_tag }}-lts
quay.io/${{ vars.QUAY_IO_PUSH_BASE }}/oceanbase-ce:${{ steps.set_lts_tag_vars.outputs.lts_tag }}-lts
ghcr.io/${{ github.repository_owner }}/oceanbase-ce:${{ steps.set_lts_tag_vars.outputs.lts_tag }}-lts
${{ vars.DOCKER_PUSH_BASE }}/oceanbase-ce:latest
quay.io/${{ vars.QUAY_IO_PUSH_BASE }}/oceanbase-ce:latest
ghcr.io/${{ github.repository_owner }}/oceanbase-ce:latest
build-args: |
VERSION=${{ steps.set_version_vars.outputs.version }}
release:
uses: ./.github/workflows/reusable-test-and-release-oceanbase-ce.yml
with:
tag_name: ${{ github.ref_name }}
lts: true
84 changes: 5 additions & 79 deletions .github/workflows/release-oceanbase-ce.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,83 +6,9 @@ on:
- "oceanbase-ce-[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+"
- "oceanbase-[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+"

env:
tagName: ${{ github.ref_name }}

jobs:
release-oceanbase-ce:
runs-on: ubuntu-latest
steps:
- name: Free disk space on Ubuntu runner
uses: kfir4444/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
swap-storage: true

- name: Checkout repository
uses: actions/checkout@v4

- name: Set Version variables
id: set_version_vars
run: echo "version=$(echo $tagName | grep -P '(\d*\.\d*\.\d*\.\d*-\d{18})' --only-matching)" >> $GITHUB_OUTPUT

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Log in to Quay io
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_IO_USERNAME }}
password: ${{ secrets.QUAY_IO_PASSWORD }}

- name: Log in to Ghcr io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build pre image
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64
file: ./oceanbase-ce/Dockerfile.pre
push: false
load: true
tags: oceanbase-ce-pre
build-args: |
VERSION=${{ steps.set_version_vars.outputs.version }}
- name: Copy storage files
run: |
mkdir -p ./oceanbase-ce/share
docker run -v ./oceanbase-ce/share:/root/share oceanbase-ce-pre
- name: Build and push observer w/o cache
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64,linux/arm64
file: ./oceanbase-ce/Dockerfile
push: true
tags: |
${{ vars.DOCKER_PUSH_BASE }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
quay.io/${{ vars.QUAY_IO_PUSH_BASE }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
ghcr.io/${{ github.repository_owner }}/oceanbase-ce:${{ steps.set_version_vars.outputs.version }}
build-args: |
VERSION=${{ steps.set_version_vars.outputs.version }}
release:
uses: ./.github/workflows/reusable-test-and-release-oceanbase-ce.yml
with:
tag_name: ${{ github.ref_name }}
lts: false
127 changes: 127 additions & 0 deletions .github/workflows/reusable-build-and-release-oceanbase-ce.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: build and release oceanbase-ce

on:
workflow_call:
inputs:
version:
required: true
type: string
cache_key:
required: false
type: string
push-images:
required: false
type: boolean
push-lts-images:
required: false
type: boolean

jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Free disk space on Ubuntu runner
uses: kfir4444/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
swap-storage: true

- name: Print environment variables
run: printenv

- name: Check out repository code
uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build pre image
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64
file: ./oceanbase-ce/Dockerfile.pre
push: false
load: true
tags: oceanbase-ce-pre
build-args: |
VERSION=${{ inputs.version }}
- name: Copy storage files
run: |
mkdir -p ./oceanbase-ce/share
docker run -v ./oceanbase-ce/share:/root/share oceanbase-ce-pre
- name: Build observer image
if: ${{ inputs.push-images == false }}
run: |
cd oceanbase-ce
docker buildx build --build-arg VERSION=${{ inputs.version }} --platform linux/amd64 -t oceanbase-ce:amd64 --load --output type=docker,dest=./oceanbase-ce-amd64.tar .
docker buildx build --build-arg VERSION=${{ inputs.version }} --platform linux/arm64 -t oceanbase-ce:arm64 --load --output type=docker,dest=./oceanbase-ce-arm64.tar .
- name: Upload artifact
if: ${{ inputs.push-images == false }}
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.cache_key }}
path: oceanbase-ce/oceanbase-ce-**.tar

- name: Log in to Docker hub
if: ${{ inputs.push-images }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Log in to Quay io
if: ${{ inputs.push-images }}
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ secrets.QUAY_IO_USERNAME }}
password: ${{ secrets.QUAY_IO_PASSWORD }}

- name: Log in to Ghcr io
if: ${{ inputs.push-images }}
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set image tags
if: ${{ inputs.push-images }}
id: set_image_tags
run: |
image_tags=""
image_tags="${image_tags} ${{ env.DOCKER_PUSH_BASE }}/oceanbase-ce:${{ inputs.version }}"
image_tags="${image_tags} quay.io/${{ env.QUAY_IO_PUSH_BASE }}/oceanbase-ce:${{ inputs.version }}"
image_tags="${image_tags} ghcr.io/${{ github.repository_owner }}/oceanbase-ce:${{ inputs.version }}"
if [[ "${{ inputs.push-lts-images }}" == "true" ]]; then
lts_version="$(echo ${{ inputs.version }} | grep -P '(\d*\.\d*\.\d*)' --only-matching)"
lts_tag="${lts_version}-lts"
image_tags="${image_tags} ${{ env.DOCKER_PUSH_BASE }}/oceanbase-ce:${lts_tag}"
image_tags="${image_tags} quay.io/${{ env.QUAY_IO_PUSH_BASE }}/oceanbase-ce:${lts_tag}"
image_tags="${image_tags} ghcr.io/${{ github.repository_owner }}/oceanbase-ce:${lts_tag}"
fi
echo "image tags: ${image_tags}"
echo "tags=${image_tags}" >> $GITHUB_OUTPUT
- name: Build and push observer image
if: ${{ inputs.push-images }}
uses: docker/build-push-action@v6
with:
context: ./oceanbase-ce
platforms: linux/amd64,linux/arm64
file: ./oceanbase-ce/Dockerfile
push: true
tags: ${{ steps.set_image_tags.outputs.tags }}
build-args: |
VERSION=${{ inputs.version }}
Loading

0 comments on commit f5a3f7c

Please sign in to comment.