Build Release triggered by smallsheeeep 🎉 #1
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
### | |
# This workflow is used to build and release all artifacts (jar, rpm, image and client) | |
# Triggers: | |
# 1. Manual trigger | |
# Jobs: | |
# 1. Check Code Format | |
# 2. PMD Scan | |
# 3. Calculation Version Number | |
# 4. Build Web Artifact (only x86_64 for now) | |
# 5. Build Client Artifact | |
# 6. Release And Tag (TODO) | |
### | |
name: Build Release | |
run-name: Build Release triggered by ${{ github.actor }} 🎉 | |
on: | |
workflow_dispatch: | |
inputs: | |
rpm_release: | |
description: "Rpm release number" | |
required: false | |
default: '' | |
type: string | |
image_tag: | |
description: "Docker image tag" | |
required: false | |
default: '' | |
type: string | |
env: | |
ODC_CURRENT_BRANCH: ${{ github.ref_name }} | |
ODC_TARGET_BRANCH: ${{ github.base_ref }} | |
jobs: | |
check-format: | |
name: Check Code Format | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout workspace | |
uses: actions/checkout@v3 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: "8" | |
distribution: "temurin" | |
cache: maven | |
- name: Check code format | |
run: mvn impsort:check formatter:validate | |
- name: Check license | |
run: mvn license:check | |
pmd-scan: | |
name: PMD Scan | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout workspace | |
uses: actions/checkout@v3 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: "8" | |
distribution: "temurin" | |
cache: maven | |
- name: Build project | |
run: mvn clean install -Dmaven.test.skip=true | |
- name: Run PMD scan | |
run: mvn pmd:check | |
calculate-version: | |
name: Calculate Version Number | |
needs: [ check-format, pmd-scan ] | |
runs-on: ubuntu-latest | |
outputs: | |
odc_rpm_release_number: ${{ steps.calculate_version.outputs.odc_rpm_release_number }} | |
odc_docker_image_tag: ${{ steps.calculate_version.outputs.odc_docker_image_tag }} | |
steps: | |
- name: Checkout workspace | |
uses: actions/checkout@v3 | |
- name: Calculate version number | |
id: calculate_version | |
run: | | |
odc_rpm_release_number=$(date +%Y%m%d) | |
if [[ -n "${{ inputs.rpm_release }}" ]]; then odc_rpm_release_number="${{ inputs.rpm_release }}"; fi | |
echo "odc_rpm_release_number=${odc_rpm_release_number}" >> $GITHUB_OUTPUT | |
echo "odc_rpm_release_number=${odc_rpm_release_number}" | |
branch_match_regex="^[0-9]\\.[0-9]\\.([0-9]{1,2}|x)_(release|dev)$" | |
tag_prefix=`[[ "${{ env.ODC_CURRENT_BRANCH }}" =~ ${branch_match_regex} ]] && echo "" || echo "test-"` | |
odc_docker_image_tag="${tag_prefix}$(cat distribution/odc-server-VER.txt)-${odc_rpm_release_number}" | |
if [[ -n "${{ inputs.image_tag }}" ]]; then odc_docker_image_tag="${{ inputs.image_tag }}"; fi | |
echo "odc_docker_image_tag=${odc_docker_image_tag}" >> $GITHUB_OUTPUT | |
echo "odc_docker_image_tag=${odc_docker_image_tag}" | |
build-web-x86_64: | |
name: Build Web Artifact (x86_64) | |
needs: [ calculate-version ] | |
runs-on: ubuntu-latest | |
env: | |
odc_rpm_release_number: ${{ needs.calculate-version.outputs.odc_rpm_release_number }} | |
odc_docker_image_tag: ${{ needs.calculate-version.outputs.odc_docker_image_tag }} | |
steps: | |
- name: Checkout workspace | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
token: ${{ secrets.CI_ACCESS_TOKEN }} | |
- name: Setup JDK 8 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: "8" | |
distribution: "temurin" | |
cache: maven | |
- name: Setup node 16 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
- name: Build front static resources | |
run: | | |
echo "Current directory: "`pwd` | |
echo "Start build front static resources" | |
pushd client | |
echo "Run npm install pnpm -g" | |
npm install pnpm -g | |
echo "Run pnpm install" | |
pnpm install | |
echo "Run npm run build:odc" | |
npm run build:odc | |
popd | |
echo "Build front static resources success" | |
echo "Start copy resources files" | |
static_resources_path="server/odc-server/src/main/resources/static" | |
if [ ! -d "${static_resources_path}" ]; then | |
echo "mkdir -p ${static_resources_path}" | |
mkdir -p "${static_resources_path}" | |
fi | |
rm --force --recursive --verbose ${static_resources_path}/* | |
cp --force --recursive --verbose client/dist/renderer/* ${static_resources_path} | |
echo "Copy resources files success" | |
- name: Set release version | |
id: set_release_version | |
run: | | |
main_version="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | cut -d - -f 1)" | |
new_version="${main_version}-${odc_rpm_release_number}" | |
echo "new_version=${new_version}" >> $GITHUB_OUTPUT | |
echo "RPM's version is "${new_version} | |
mvn versions:set -DnewVersion="${new_version}" | |
mvn versions:commit | |
- name: Build jar & rpm (x86_64) | |
run: | | |
echo "Start prepare oceanbase-client" | |
pushd import | |
echo "Current dir is "`pwd` | |
rm -rf obclient_aarch.tar.gz | |
rm -rf obclient_win.tar.gz | |
mv obclient_x86.tar.gz obclient.tar.gz | |
popd | |
echo "Prepare oceanbase-client success" | |
echo "Start build rpm package" | |
mvn help:system | |
mvn clean install -Dmaven.test.skip=true | |
mvn --file server/odc-server/pom.xml rpm:rpm -Drpm.prefix=/opt | |
echo "Build rpm package success" | |
rm --force --recursive --verbose distribution/docker/resources/odc-*.rpm | |
mkdir -p distribution/docker/resources/ | |
mv --verbose server/odc-server/target/rpm/odc-server/RPMS/*/odc-*.rpm distribution/docker/resources/ | |
mv --verbose server/odc-server/target/*-executable.jar distribution/jar/odc.jar | |
cp -fv distribution/jar/odc.jar distribution/jar/odc-slim.jar | |
zip -d distribution/jar/odc-slim.jar "BOOT-INF/classes/static/*" | |
- name: Upload jar | |
uses: actions/upload-artifact@v3 | |
with: | |
name: odc-artifact-jar | |
path: | | |
distribution/plugins/*.jar | |
distribution/starters/*.jar | |
distribution/jar/*.jar | |
- name: Upload rpm (x86_64) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: odc-server-${{ steps.set_release_version.outputs.new_version }}.x86_64.rpm | |
path: distribution/docker/resources/odc-*.rpm | |
- name: Build docker image (x86_64) | |
run: | | |
sed -e "s/DATE_CHANGE/$(date)/" -i distribution/docker/odc/Dockerfile | |
echo "odc_docker_image_tag=${odc_docker_image_tag}" | |
pushd distribution/docker | |
docker build -t docker.io/oceanbase/odc-server:${odc_docker_image_tag} -f odc/Dockerfile . | |
docker save -o resources/odc-server-${odc_docker_image_tag}.tar.gz docker.io/oceanbase/odc-server:${odc_docker_image_tag} | |
popd | |
- name: Upload docker image (x86_64) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: odc-server-${{ env.odc_docker_image_tag }}.tar.gz | |
path: distribution/docker/resources/odc-server-*.tar.gz | |
build-client: | |
name: Build Client Artifact | |
needs: [ build-web-x86_64 ] | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
target: [ win, mac, linux_x86, linux_aarch64 ] | |
steps: | |
- name: Checkout workspace | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
token: ${{ secrets.CI_ACCESS_TOKEN }} | |
- name: Download resources | |
uses: actions/download-artifact@v3 | |
with: | |
name: odc-artifact-jar | |
path: jar-dist | |
- name: Change directory | |
run: | | |
mkdir -p client/libraries/java | |
cp jar-dist/jar/odc-slim.jar client/libraries/java/odc.jar | |
mkdir -p client/libraries/java/plugins | |
cp -R jar-dist/plugins/. client/libraries/java/plugins | |
mkdir -p client/libraries/java/starters | |
cp -R jar-dist/starters/. client/libraries/java/starters | |
- name: Setup node 16 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
- name: Install dependencies | |
uses: pnpm/action-setup@v2 | |
with: | |
version: 8 | |
run_install: false | |
- name: Get pnpm store directory | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- uses: actions/cache@v3 | |
name: Setup pnpm cache | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Build artifact | |
env: | |
# MACOS_CERTIFICATE: ${{ secrets.PROD_MACOS_CERTIFICATE }} | |
# MACOS_CERTIFICATE_PWD: ${{ secrets.PROD_MACOS_CERTIFICATE_PWD }} | |
# MACOS_CERTIFICATE_NAME: ${{ secrets.PROD_MACOS_CERTIFICATE_NAME }} | |
# MACOS_CI_KEYCHAIN_PWD: ${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }} | |
# APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }} | |
# APPLE_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }} | |
# APPLE_ID_PASSWORD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }} | |
# APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }} | |
WIN_CSC_LINK: ${{ secrets.PROD_WIN_CSC_LINK }} | |
WIN_CSC_KEY_PASSWORD: ${{ secrets.PROD_WIN_CSC_KEY_PASSWORD }} | |
run: | | |
# Turn our base64-encoded certificate back to a regular .p12 file | |
cd client | |
# echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 | |
# We need to create a new keychain, otherwise using the certificate will prompt | |
# with a UI dialog asking for the certificate password, which we can't | |
# use in a headless CI environment | |
# security create-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
# security default-keychain -s build.keychain | |
# security unlock-keychain -p "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
# security import certificate.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign | |
# security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_CI_KEYCHAIN_PWD" build.keychain | |
# echo "Cert Imported" | |
pnpm install | |
# We need to create a new keychain, otherwise using the certificate will prompt | |
# with a UI dialog asking for the certificate password, which we can't | |
# use in a headless CI environment | |
export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ | |
export ODC_BUILD_SKIP_JAR=true | |
export CSC_IDENTITY_AUTO_DISCOVERY=false | |
node ./scripts/client/build.js ${{ matrix.target }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: odc-client-pkg-${{ matrix.target }} | |
path: | | |
client/release/*.dmg | |
client/release/*.deb | |
client/release/*.exe | |
client/release/*.AppImage |