Skip to content

Publish RonDB Tarball #12

Publish RonDB Tarball

Publish RonDB Tarball #12

Workflow file for this run

name: Publish RonDB Tarball
on:
workflow_dispatch:
inputs:
release_build:
required: true
type: boolean
default: false
push:
branches:
- "21.04.[0-9]+"
- "22.10.[0-9]+"
- "24.10.[0-9]+"
tags:
- "rondb-21.04.[0-9]+"
- "rondb-22.10.[0-9]+"
- "rondb-24.10.[0-9]+"
# This is important because the jobs are expensive and we don't want to wait a lot of time.
# This cancel-in-progress only works per branch, if a previous commit launched a job, a
# new one will cancel it.
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}
cancel-in-progress: true
jobs:
publish-arm-tarball:
runs-on: [self-hosted, ARM64]
if: github.repository == 'logicalclocks/rondb'
env:
REPO_HOPSWORKS_HOSTNAME: repo.hops.works
REPO_HOPSWORKS_USER: repo_upload
# The corresponding public key is added to the authorized_keys of the
# repo_upload user on the repo.hops.works server
SSH_PRIVATE_KEY: ${{ secrets.REPO_UPLOAD_SSH_PRIVATE_KEY }}
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- run: cat ./MYSQL_VERSION
- name: Extract Git tag
if: startsWith(github.ref, 'refs/tags/rondb-')
run: echo "TAG_NAME=${GITHUB_REF#refs/tags/rondb-}" >> $GITHUB_ENV
- name: Verify RONDB_VERSION
if: startsWith(github.ref, 'refs/tags/rondb-')
shell: bash
run: |
source ./MYSQL_VERSION
RONDB_VERSION="$MYSQL_VERSION_MAJOR.$MYSQL_VERSION_MINOR.$MYSQL_VERSION_PATCH"
if [ "$RONDB_VERSION" != "$TAG_NAME" ]; then
echo "Error: RONDB_VERSION ($RONDB_VERSION) does not match the tag version ($TAG_NAME)"
exit 1
fi
- name: Set up SSH
run: |
mkdir -p "$HOME/.ssh"
echo "$SSH_PRIVATE_KEY" > "$HOME/.ssh/id_ed25519"
chmod 600 "$HOME/.ssh/id_ed25519"
REPO_PUBLIC_KEY="repo.hops.works ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAvVvdl0/YDPeKNbg0AnCQQcFIXJV2WhuxcgQsjwj2+l"
# Check if known_hosts file exists, if not create it
KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts"
if [ ! -f "$KNOWN_HOSTS_FILE" ]; then
touch "$KNOWN_HOSTS_FILE"
chmod 644 "$KNOWN_HOSTS_FILE"
fi
# Add the host key to the known_hosts file if it is not already present
grep -qxF "$REPO_PUBLIC_KEY" "$KNOWN_HOSTS_FILE" || echo "$REPO_PUBLIC_KEY" >> "$KNOWN_HOSTS_FILE"
- name: Build RonDB Tarball
run: |
BUILD_CORES=$(nproc)
echo "Building RonDB tarball with $BUILD_CORES cores"
EXTRA_ARGS="--build-arg RELEASE_TARBALL=1"
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
if [ "${{ github.event.inputs.release_build }}" == "false" ]; then
EXTRA_ARGS=""
fi
fi
docker buildx build . \
-f Dockerfile.oraclelinux8 \
--target get-package-all \
--output . \
--build-arg BUILD_THREADS=$BUILD_CORES \
$EXTRA_ARGS
ls -l
- name: Upload RonDB Tarball
run: |
tarball=$(ls rondb-*.tar.gz 2>/dev/null)
count=$(echo "$tarball" | wc -w)
if [[ $count -eq 0 ]]; then
echo "No tarball found starting with 'rondb-'"
exit 1
elif [[ $count -gt 1 ]]; then
echo "Multiple tarballs found starting with 'rondb-':"
echo "$tarball"
exit 1
fi
echo "Found tarball: $tarball"
host_user="$REPO_HOPSWORKS_USER@$REPO_HOPSWORKS_HOSTNAME"
# We won't upload to repo.hops.works/master directly;
# This is handled by a cron job that checks whether the
# tarball already exists first
user_code_path="/home/$REPO_HOPSWORKS_USER/upload_area/master"
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
# This will be copied to /opt/repository/master/rondb-dev
user_code_path="${user_code_path}/rondb-dev"
fi
ssh $host_user "mkdir -p $user_code_path"
echo "Copying $tarball to $host_user:$user_code_path"
scp ./$tarball $host_user:$user_code_path/$tarball
# Delete the tarball after it has been uploaded
rm -f $tarball