Skip to content

Merge pull request #723 from kennethshackleton/separate-code #658

Merge pull request #723 from kennethshackleton/separate-code

Merge pull request #723 from kennethshackleton/separate-code #658

Workflow file for this run

name: 'Publication'
on:
push:
branches:
- main
release:
types: [published]
jobs:
build-native-jars:
name: 'Build Native JARs'
strategy:
matrix:
include:
- os: ubuntu-latest
platform: linux-amd64
container: registry.access.redhat.com/ubi8/ubi:latest
- os: macos-15
platform: darwin-aarch64
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
timeout-minutes: 60
steps:
- name: 'Install system packages'
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
dnf update -y
dnf install -y git gcc gcc-c++ glibc-devel make curl tar sed bash gnupg file perl kernel-headers cmake diffutils tcl
elif [[ "${{ runner.os }}" == "macOS" ]]; then
brew install make tcl-tk mimalloc
fi
- name: 'Build mimalloc'
if: runner.os == 'Linux'
run: |
cd /tmp
curl -L https://github.com/microsoft/mimalloc/archive/refs/tags/v3.1.6.tar.gz -o mimalloc.tar.gz
tar xzf mimalloc.tar.gz
cd mimalloc-3.1.6
mkdir -p out/release
cd out/release
cmake ../.. -DCMAKE_BUILD_TYPE=Release -DMI_BUILD_SHARED=OFF -DMI_BUILD_STATIC=ON -DMI_BUILD_TESTS=OFF
make -j$(nproc) mimalloc-static
cp libmimalloc.a /usr/local/lib/
cp ../../include/mimalloc.h /usr/local/include/
- name: 'Setup Java 17'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
- name: 'Set JAVA_HOME'
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
elif [[ "${{ runner.os }}" == "macOS" ]]; then
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
fi
- name: 'Setup Android SDK'
uses: android-actions/setup-android@v4
- name: 'Checkout'
uses: actions/checkout@v6
with:
fetch-depth: 2
submodules: recursive
- name: 'Configure Git'
if: runner.os == 'Linux'
run: |
git config --global --add safe.directory /__w/selekt/selekt
- name: 'Configure Gradle'
run: |
echo 'org.gradle.caching=false' >> gradle.properties
echo 'org.gradle.configuration-cache=false' >> gradle.properties
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
- name: 'Build'
env:
CC: ${{ runner.os == 'Linux' && 'gcc' || 'clang' }}
CXX: ${{ runner.os == 'Linux' && 'g++' || 'clang++' }}
LDFLAGS: '-s'
MACOSX_DEPLOYMENT_TARGET: ${{ runner.os == 'macOS' && '12.0' || '' }}
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
export CC=gcc
export CXX=g++
fi
if [[ "${{ github.event_name }}" == "push" ]]; then
./gradlew :selekt-sqlite3-sqlcipher:jar
elif [[ "${{ github.event_name }}" == "release" ]]; then
./gradlew -Prelease \
:selekt-sqlite3-sqlcipher:jar
fi
- name: 'Upload native JAR'
uses: actions/upload-artifact@v7.0.0
with:
name: selekt-sqlcipher-${{ matrix.platform }}
path: selekt-sqlite3-sqlcipher/build/libs/*.jar
publish-native:
name: Publish to OSSRH
runs-on: ubuntu-latest
needs: build-native-jars
timeout-minutes: 120
steps:
- name: 'Checkout'
uses: actions/checkout@v6
with:
fetch-depth: 2
submodules: false
- name: 'Setup Java 17'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
- name: 'Set JAVA_HOME'
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
elif [[ "${{ runner.os }}" == "macOS" ]]; then
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
fi
- name: 'Configure Gradle'
run: |
echo 'org.gradle.caching=false' >> gradle.properties
echo 'org.gradle.configuration-cache=false' >> gradle.properties
- name: 'Download all native JARs'
uses: actions/download-artifact@v8
with:
pattern: selekt-sqlcipher-*
path: selekt-sqlite3-sqlcipher/build/artifacts
merge-multiple: false
- name: 'Prepare JARs for publication'
run: |
mkdir -p selekt-sqlite3-sqlcipher/build/libs
find selekt-sqlite3-sqlcipher/build/artifacts -name '*.jar' -exec mv {} selekt-sqlite3-sqlcipher/build/libs/ \;
echo "JARs ready for publication:"
ls -la selekt-sqlite3-sqlcipher/build/libs/
- name: 'Publish to OSSRH'
if: github.event_name == 'release' && github.event.action == 'published'
env:
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEY_ID }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_KEY_PASSPHRASE }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.OSSRH_USER_TOKEN_PASSWORD }}
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.OSSRH_USER_TOKEN_USERNAME }}
run: |
./gradlew \
-Prelease \
:selekt-sqlite3-sqlcipher:publishNativePublicationToSonatypeRepository \
closeAndReleaseSonatypeStagingRepository \
-x jar
publish:
name: 'Publish'
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- name: 'Install system packages'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends clang gcc make sed tcl
- name: 'Checkout'
uses: actions/checkout@v6
with:
fetch-depth: 2
submodules: recursive
- name: 'Setup Java 17'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17
- name: 'Setup Java 25'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 25
- name: 'Set JAVA_HOME'
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
elif [[ "${{ runner.os }}" == "macOS" ]]; then
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
fi
- name: 'Configure Gradle'
run: |
echo 'org.gradle.caching=false' >> gradle.properties
echo 'org.gradle.configuration-cache=false' >> gradle.properties
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
- name: 'Unit tests'
run: ./gradlew :selekt-android:testDebugUnitTest :selekt-java:test :selekt-jdbc:test :selekt-sqlite3-classes:testJava17 :selekt-sqlite3-classes:testJava25 :selekt-common:test -x integrationTest ${{ env.SCAN }}
- name: 'Build Selekt Android'
run: |
./gradlew clean \
:OpenSSL:assembleArm64-v8a \
:OpenSSL:assembleArmeabi-v7a \
:OpenSSL:assembleX86 \
:OpenSSL:assembleX86_64
./gradlew :SQLite3:amalgamate
./gradlew assembleRelease
- name: 'Build Selekt JVM'
run: |
./gradlew :selekt-jdbc:jar :selekt-jvm:jar ${{ env.SCAN }}
- name: 'Publish release to OSSRH'
if: github.event_name == 'release' && github.event.action == 'published'
env:
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEY_ID }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_KEY_PASSPHRASE }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.OSSRH_USER_TOKEN_PASSWORD }}
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.OSSRH_USER_TOKEN_USERNAME }}
run: |
./gradlew \
-Prelease \
publishMainPublicationToSonatypeRepository \
closeAndReleaseSonatypeStagingRepository