Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ name: Release Build

on:
push:
tags: ["v*"]
branches: [master]
paths: [CMakeLists.txt]

jobs:
build:
Expand All @@ -14,29 +15,50 @@ jobs:
env:
IMAGE: ghcr.io/${{ github.repository }}
steps:
- name: Lowercase image name
run: echo "IMAGE=${IMAGE,,}" >> "$GITHUB_ENV"

- uses: actions/checkout@v4

- name: Extract version and short SHA
id: version
run: |
VERSION=$(grep -oP 'VERSION \K[0-9]+(\.[0-9]+)+' CMakeLists.txt | head -1)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "short_sha=${GITHUB_SHA::8}" >> "$GITHUB_OUTPUT"
echo "IMAGE=${IMAGE,,}" >> "$GITHUB_ENV"

- name: Check if image already exists
id: check
run: |
if docker manifest inspect "${IMAGE}:${VERSION}" > /dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
echo "Image ${IMAGE}:${VERSION} already exists, skipping build"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
env:
DOCKER_CLI_EXPERIMENTAL: enabled
VERSION: ${{ steps.version.outputs.version }}

- uses: docker/setup-buildx-action@v3
if: steps.check.outputs.exists != 'true'

- name: Log in to ghcr.io
if: steps.check.outputs.exists != 'true'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push release image
if: steps.check.outputs.exists != 'true'
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile.release
push: true
tags: ${{ env.IMAGE }}:${{ github.ref_name }}
tags: ${{ env.IMAGE }}:${{ steps.version.outputs.version }}
build-args: |
OLR_VERSION=${{ github.ref_name }}
GIT_SHORT_SHA=${{ steps.version.outputs.short_sha }}
UIDOLR=1001
GIDOLR=1001
GIDORA=54322
Expand Down
23 changes: 13 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,27 @@

cmake_minimum_required(VERSION 3.16)
project(OpenLogReplicator
VERSION 1.9.0
VERSION 1.9.0.3
DESCRIPTION "OpenLogReplicator, Open Source Oracle database CDC"
HOMEPAGE_URL "https://github.com/bersler/OpenLogReplicator"
)

set(SCHEMA_VERSION "1.9.0")
string(TIMESTAMP CMAKE_BUILD_TIMESTAMP "%Y-%m-%d %H:%M" UTC)
if(NOT DEFINED OLR_VERSION OR OLR_VERSION STREQUAL "")
execute_process(
COMMAND git describe --tags --always --dirty
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE OLR_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endif()
if(NOT DEFINED OLR_VERSION OR OLR_VERSION STREQUAL "")
set(OLR_VERSION "${PROJECT_VERSION}")
if(NOT DEFINED GIT_SHORT_SHA OR GIT_SHORT_SHA STREQUAL "")
execute_process(
COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_SHORT_SHA
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endif()
if(GIT_SHORT_SHA)
set(OLR_VERSION "${OLR_VERSION}-${GIT_SHORT_SHA}")
endif()
endif()
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_STANDARD 17)
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ ARG GIDOLR=1001
ARG UIDOLR=1001
ARG GIDORA=54322
ARG BUILD_TYPE=Debug
ARG OLR_VERSION
ARG GIT_SHORT_SHA
ARG WITHKAFKA
ARG WITHPROMETHEUS
ARG WITHORACLE
Expand Down Expand Up @@ -138,7 +138,7 @@ RUN --mount=type=cache,target=/root/.ccache,id=olr-ccache \
fi && \
mkdir cmake-build-${BUILD_TYPE}-${ARCH} && \
cd cmake-build-${BUILD_TYPE}-${ARCH} && \
cmake ${BUILDARGS} ${OLR_VERSION:+-DOLR_VERSION=${OLR_VERSION}} \
cmake ${BUILDARGS} ${GIT_SHORT_SHA:+-DGIT_SHORT_SHA=${GIT_SHORT_SHA}} \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache && \
cmake --build ./ --target OpenLogReplicator -j && \
Expand Down
9 changes: 4 additions & 5 deletions Dockerfile.release
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
# Produces a minimal runtime image with only the OLR binary and shared libs.
#
# Usage:
# OLR_VERSION=$(git describe --tags --always --dirty)
# docker buildx build -f Dockerfile.release \
# --build-arg OLR_VERSION=$OLR_VERSION \
# --build-arg GIT_SHORT_SHA=$(git rev-parse --short HEAD) \
# --build-arg GIDOLR=$(id -g) --build-arg UIDOLR=$(id -u) \
# --build-arg WITHORACLE=1 --build-arg WITHKAFKA=1 \
# --build-arg WITHPROTOBUF=1 --build-arg WITHPROMETHEUS=1 \
# -t rophy/openlogreplicator:$OLR_VERSION .
# -t rophy/openlogreplicator:latest .

ARG IMAGE=debian
ARG VERSION=13.0
Expand All @@ -23,7 +22,7 @@ FROM ${IMAGE}:${VERSION} AS builder

ARG ARCH=x86_64
ARG BUILD_TYPE=Release
ARG OLR_VERSION
ARG GIT_SHORT_SHA
ARG WITHKAFKA
ARG WITHPROMETHEUS
ARG WITHORACLE
Expand Down Expand Up @@ -139,7 +138,7 @@ RUN set -eu && \
fi && \
mkdir cmake-build-${BUILD_TYPE}-${ARCH} && \
cd cmake-build-${BUILD_TYPE}-${ARCH} && \
cmake ${BUILDARGS} ${OLR_VERSION:+-DOLR_VERSION=${OLR_VERSION}} && \
cmake ${BUILDARGS} ${GIT_SHORT_SHA:+-DGIT_SHORT_SHA=${GIT_SHORT_SHA}} && \
cmake --build ./ --target OpenLogReplicator -j

# Stage runtime libs into a single directory for clean COPY into runtime stage
Expand Down
9 changes: 4 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
OLR_IMAGE ?= olr-dev:latest
CACHE_IMAGE ?= ghcr.io/bersler/openlogreplicator:ci
BUILD_TYPE ?= Debug
OLR_VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo unknown)

GIT_SHORT_SHA ?= $(shell git rev-parse --short HEAD 2>/dev/null)
FIXTURE_ARCHIVES := $(wildcard tests/fixtures/*.tar.gz)
FIXTURE_DIRS := $(FIXTURE_ARCHIVES:.tar.gz=)

Expand All @@ -14,7 +13,7 @@ help: ## Show this help
build: ## Build OLR dev image (Debug)
docker buildx build \
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
--build-arg OLR_VERSION=$(OLR_VERSION) \
--build-arg GIT_SHORT_SHA=$(GIT_SHORT_SHA) \
--build-arg UIDOLR=$$(id -u) \
--build-arg GIDOLR=$$(id -g) \
--build-arg GIDORA=54322 \
Expand All @@ -29,14 +28,14 @@ build: ## Build OLR dev image (Debug)

build-release: ## Build OLR release image (minimal, multi-stage)
docker buildx build \
--build-arg OLR_VERSION=$(OLR_VERSION) \
--build-arg GIT_SHORT_SHA=$(GIT_SHORT_SHA) \
--build-arg GIDOLR=$$(id -g) \
--build-arg UIDOLR=$$(id -u) \
--build-arg WITHORACLE=1 \
--build-arg WITHKAFKA=1 \
--build-arg WITHPROTOBUF=1 \
--build-arg WITHPROMETHEUS=1 \
-t rophy/openlogreplicator:$(OLR_VERSION) \
-t rophy/openlogreplicator:$(shell grep -oP 'VERSION \K[0-9]+(\.[0-9]+)+' CMakeLists.txt | head -1) \
--load \
-f Dockerfile.release .

Expand Down
Loading