Merge remote-tracking branch 'xerial/master' #133
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
name: CI | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- '**.java' | |
- '**.xml' | |
- '**.so' | |
- '**.dylib' | |
- '**.dll' | |
- '.github/workflows/*.yml' | |
- 'VERSION' | |
- 'pom.xml' | |
push: | |
branches: | |
- '*' | |
paths: | |
- '**.java' | |
- '**.xml' | |
- '**.so' | |
- '**.dylib' | |
- '**.dll' | |
- '.github/workflows/*.yml' | |
- 'VERSION' | |
- 'pom.xml' | |
jobs: | |
lint: | |
name: Check code formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
java-package: jdk | |
cache: 'maven' | |
- name: spotless:check | |
run: mvn --batch-mode --no-transfer-progress spotless:check | |
test: | |
name: test ${{ matrix.os }} jdk${{ matrix.java }} | |
strategy: | |
matrix: | |
os: [ ubuntu-latest ] | |
java: [ 11, 17, 20 ] | |
include: | |
- os: windows-latest | |
java: 20 | |
- os: macos-latest | |
java: 20 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java }} | |
java-package: jdk | |
cache: 'maven' | |
- name: Install tools for windows | |
if: matrix.os == 'windows-latest' | |
run: | | |
choco install wget --no-progress | |
- name: Source versions from VERSION file | |
run: cat VERSION >> $GITHUB_ENV | |
- name: Display version | |
run: echo $sqliteMCVersion $version $artifactVersion | |
- name: Build natives | |
run: make jni-header native | |
- name: Test | |
run: mvn --batch-mode --no-transfer-progress test | |
# test_graalvm: | |
# name: test ${{ matrix.os }} jdk${{ matrix.java }} GraalVM native-image - ${{ matrix.profiles }} | |
# strategy: | |
# matrix: | |
# os: [ ubuntu-latest, windows-latest, macos-latest ] | |
# java: [ '17', '21', '22' ] | |
# profiles: ['native', 'native,native-exported'] | |
# runs-on: ${{ matrix.os }} | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - uses: graalvm/setup-graalvm@v1 | |
# with: | |
# java-version: ${{ matrix.java }} | |
# distribution: 'graalvm-community' | |
# github-token: ${{ secrets.GITHUB_TOKEN }} | |
# - name: Test | |
# run: mvn --batch-mode --no-transfer-progress -P ${{ matrix.profiles }} integration-test | |
test_multiarch: | |
name: test ${{ matrix.arch }} ${{ matrix.distro }} jdk${{ matrix.java }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# ARM v7 | |
- arch: armv7 | |
distro: ubuntu_latest | |
java: 21 | |
# ARM 64 | |
- arch: aarch64 | |
distro: ubuntu_latest | |
java: 21 | |
- arch: aarch64 | |
distro: alpine_latest | |
java: 21 | |
# PPC64 | |
- arch: ppc64le | |
distro: ubuntu_latest | |
java: 21 | |
# RISC-V 64 | |
- arch: riscv64 | |
distro: ubuntu_latest | |
java: 21 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: uraimo/run-on-arch-action@v2 | |
name: Test | |
with: | |
arch: ${{ matrix.arch }} | |
distro: ${{ matrix.distro }} | |
# Not required, but speeds up builds | |
githubToken: ${{ github.token }} | |
# Install some dependencies in the container. This speeds up builds if | |
# you are also using githubToken. Any dependencies installed here will | |
# be part of the container image that gets cached, so subsequent | |
# builds don't have to re-install them. The image layer is cached | |
# publicly in your project's package repository, so it is vital that | |
# no secrets are present in the container state or logs. | |
install: | | |
case "${{ matrix.distro }}" in | |
ubuntu*|jessie|stretch|buster|bullseye) | |
apt-get update -q -y | |
apt-get install -q -y maven openjdk-${{ matrix.java }}-jdk openssl ca-certificates build-essential bash jq wget unzip curl gnupg | |
;; | |
alpine*) | |
apk update | |
apk add maven openjdk${{ matrix.java }} openssl ca-certificates build-base bash jq wget unzip curl gnupg | |
echo "INSTALL JAVA HOME: $(dirname $(dirname $(readlink -f $(which javac))))" | |
;; | |
esac | |
# We use the Github Action user, 1001:121, so that maven can access | |
# the /work directory and create target/classes | |
dockerRunArgs: | | |
--volume "${PWD}:/work" | |
--user 1001:121 | |
env: | | |
SKIP_TEST_OSINFO: true | |
SKIP_TEST_MULTIARCH: true | |
run: | | |
echo "Architecture: `uname -a`" | |
mvn --version | |
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) | |
cd /work && make jni-header native && mvn -Dmaven.repo.local=/work/.m2/repository --batch-mode --no-transfer-progress test | |
# This will test the build process using an external amalgamation, as well as the | |
# Java tests with that native library, as some functions will not be available (extensions). | |
# Here we use the sqlite3 package installed by homebrew on Mac, which comes | |
# with the header file and library. | |
test_external_amalgamation: | |
name: test external amalgamation | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: 20 | |
java-package: jdk | |
cache: 'maven' | |
- run: brew install sqlite3 | |
- name: Find SQLite directory | |
run: | | |
BREW_SQLITE_PREFIX=`brew --prefix sqlite3` | |
echo "SQLITE_DIR=$(dirname ${BREW_SQLITE_PREFIX})/$(readlink ${BREW_SQLITE_PREFIX})" | tee -a $GITHUB_ENV | |
- name: Make native lib | |
run: | | |
make native SQLITE_OBJ=${{ env.SQLITE_DIR }}/lib/libsqlite3.dylib SQLITE_HEADER=${{ env.SQLITE_DIR }}/include/sqlite3.h | |
- name: Test | |
run: mvn --batch-mode --no-transfer-progress test -DdisableCipherTests=true | |
# release: | |
# name: Deploy | |
# needs: [ lint, test, test_multiarch, test_external_amalgamation, test_graalvm ] | |
# if: github.repository_owner == 'xerial' && github.ref == 'refs/heads/master' # only perform on latest master | |
# runs-on: ubuntu-latest | |
# steps: | |
# - name: Print inputs | |
# run: | | |
# echo "Perform release: ${{ inputs.perform_release }}" | |
# - uses: actions/checkout@v4 | |
# if: github.event_name == 'push' || inputs.perform_release != true | |
# # when performing a release we need the full git history to generate the changelog | |
# - uses: actions/checkout@v4 | |
# if: inputs.perform_release | |
# with: | |
# fetch-depth: 0 | |
# - name: Set up Apache Maven Central | |
# uses: actions/setup-java@v4 | |
# with: # running setup-java again overwrites the settings.xml | |
# distribution: 'temurin' | |
# java-version: '11' | |
# java-package: jdk | |
# server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml | |
# server-username: MAVEN_CENTRAL_USERNAME # env variable for username in deploy (1) | |
# server-password: MAVEN_CENTRAL_PASSWORD # env variable for token in deploy (2) | |
# - name: Get Project Version | |
# run: | | |
# echo "PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" | tee -a $GITHUB_ENV | |
# - name: Cancel action for non SNAPSHOT push | |
# if: github.event_name == 'push' && !endsWith(env.PROJECT_VERSION, '-SNAPSHOT') | |
# uses: andymckay/[email protected] | |
# # from that point, if inputs.perform_release is true we perform a release, else we deploy snapshot | |
# - name: Prepare release | |
# if: inputs.perform_release | |
# run: | | |
# mvn --no-transfer-progress versions:set -DremoveSnapshot -DgenerateBackupPoms=false | |
# RELEASE_VERSION=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout` | |
# echo "RELEASE_VERSION=${RELEASE_VERSION}" | tee -a $GITHUB_ENV | |
# sed -i -e "s/^\:project-version\:\ .*/:project-version: ${RELEASE_VERSION}/g" README.adoc | |
# | |
# - name: Build | |
# run: mvn --batch-mode --no-transfer-progress package -P release -DskipTests | |
# | |
# # The sonatype maven plugin will decide the right destination depending on whether the project is SNAPSHOT or not | |
# - name: Publish to Apache Maven Central | |
# if: github.event_name == 'push' || inputs.push_maven | |
# run: mvn --batch-mode --no-transfer-progress deploy -P release -DskipTests -Dgpg.signer=bc | |
# env: | |
# MAVEN_CENTRAL_USERNAME: ${{ secrets.SONATYPE_USERNAME }} # must be the same env variable name as (1) | |
# MAVEN_CENTRAL_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} # must be the same env variable name as (2) | |
# MAVEN_GPG_KEY: ${{ secrets.GPG_KEY }} | |
# MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
# - name: Release commit and push | |
# if: inputs.perform_release | |
# uses: EndBug/add-and-commit@v9 | |
# with: | |
# message: 'chore(release): ${{ env.RELEASE_VERSION }} [skip ci]' | |
# tag: '${{ env.RELEASE_VERSION }} --force' | |
# default_author: github_actions | |
# - name: Create Github release with JReleaser | |
# if: inputs.perform_release | |
# env: | |
# JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# run: | | |
# mvn --batch-mode --no-transfer-progress -DskipTests jreleaser:full-release | |
# - name: Prepare next snapshot | |
# if: inputs.perform_release | |
# run: | | |
# mvn versions:set -DnextSnapshot -DgenerateBackupPoms=false | |
# - name: Next snapshot commit and push | |
# if: inputs.perform_release | |
# uses: EndBug/add-and-commit@v9 | |
# with: | |
# message: 'chore(release): prepare next snapshot [skip ci]' | |
# default_author: github_actions |