186 lines
6.8 KiB
YAML
186 lines
6.8 KiB
YAML
name: Patched JNI CI
|
|
|
|
# This workflow attempts to build and test the wolfSSL JNI library with all
|
|
# available wolfSSL PR patches applied, eg WOLFSSL_PR*_PATCH_APPLIED defines.
|
|
# It currently only supports a single open PR patch at a time. If all patches
|
|
# are merged, it builds against master with all patch defines enabled.
|
|
|
|
on:
|
|
push:
|
|
branches: [ 'master', 'main', 'release/**' ]
|
|
pull_request:
|
|
branches: [ 'master' ]
|
|
|
|
# Cancel superseded in-progress runs for the same PR. Runs
|
|
# triggered by push events are never cancelled.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
resolve_wolfssl_ref:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should_run: ${{ steps.eval_prs.outputs.should_run }}
|
|
wolfssl_repo: ${{ steps.eval_prs.outputs.wolfssl_repo }}
|
|
wolfssl_ref: ${{ steps.eval_prs.outputs.wolfssl_ref }}
|
|
patch_defines: ${{ steps.eval_prs.outputs.patch_defines }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Find patch defines
|
|
id: find_defines
|
|
run: |
|
|
set -euo pipefail
|
|
defines=""
|
|
if ! defines="$(./scripts/find-wolfssl-pr-patch-defines.sh)"; then
|
|
echo "::warning::find-wolfssl-pr-patch-defines.sh failed; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
if [ -z "$defines" ]; then
|
|
echo "::warning::No WOLFSSL_PR*_PATCH_APPLIED defines found; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
echo "Found patch defines:"
|
|
printf "%s\n" "$defines"
|
|
{
|
|
echo "should_run=true"
|
|
echo "defines<<EOF"
|
|
printf "%s\n" "$defines"
|
|
echo "EOF"
|
|
} >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Evaluate PR statuses
|
|
id: eval_prs
|
|
if: steps.find_defines.outputs.should_run == 'true'
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
defines="${{ steps.find_defines.outputs.defines }}"
|
|
should_run=true
|
|
wolfssl_repo="wolfSSL/wolfssl"
|
|
wolfssl_ref="master"
|
|
found_open=false
|
|
patch_defines=""
|
|
|
|
echo "Evaluating patch defines:"
|
|
printf "%s\n" "$defines"
|
|
|
|
while read -r define; do
|
|
define="$(printf "%s" "$define" | tr -d '\r' | xargs)"
|
|
[ -z "$define" ] && continue
|
|
pr_number="$(printf "%s" "$define" | sed -E 's/^WOLFSSL_PR([0-9]+)_PATCH_APPLIED$/\1/')"
|
|
if [ -z "$pr_number" ] || [ "$pr_number" = "$define" ]; then
|
|
echo "::warning::Failed to derive PR number from define $define; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
pr_info=""
|
|
if ! pr_info="$(./scripts/find-pr-info.sh "$pr_number" --repo wolfSSL/wolfssl)"; then
|
|
echo "::warning::find-pr-info.sh failed for PR #$pr_number; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
if [ -z "$pr_info" ]; then
|
|
echo "::warning::Unable to resolve PR #$pr_number info; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
echo "PR #$pr_number raw info:"
|
|
printf "%s\n" "$pr_info"
|
|
|
|
info_repo="$(printf "%s\n" "$pr_info" | sed -n 's/^repo://p')"
|
|
info_branch="$(printf "%s\n" "$pr_info" | sed -n 's/^branch://p')"
|
|
info_commit="$(printf "%s\n" "$pr_info" | sed -n 's/^commit://p')"
|
|
info_status="$(printf "%s\n" "$pr_info" | sed -n 's/^status://p')"
|
|
|
|
if [ -z "$info_repo" ] || [ -z "$info_branch" ] || [ -z "$info_commit" ] || [ -z "$info_status" ]; then
|
|
echo "::warning::Missing expected PR info fields for PR #$pr_number; skipping patched CI."
|
|
echo "should_run=false" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
case "$info_status" in
|
|
merged)
|
|
continue
|
|
;;
|
|
open)
|
|
if [ "$found_open" = "false" ]; then
|
|
wolfssl_repo="$info_repo"
|
|
wolfssl_ref="$info_commit"
|
|
found_open=true
|
|
patch_defines="WOLFSSL_PR${pr_number}_PATCH_APPLIED"
|
|
echo "PR #$pr_number is open; using repo $wolfssl_repo"
|
|
echo "PR #$pr_number is open; using branch $info_branch"
|
|
echo "PR #$pr_number is open; using commit $wolfssl_ref"
|
|
else
|
|
echo "::warning::Found multiple PRs with patch defines; unable to determine which one to use; skipping patched CI."
|
|
should_run=false
|
|
break
|
|
fi
|
|
;;
|
|
*)
|
|
echo "::warning::PR #$pr_number is in unexpected state: $info_status; skipping patched CI."
|
|
should_run=false
|
|
break
|
|
;;
|
|
esac
|
|
done <<EOF
|
|
$defines
|
|
EOF
|
|
|
|
echo "should_run=$should_run" >> "$GITHUB_OUTPUT"
|
|
echo "wolfssl_repo=$wolfssl_repo" >> "$GITHUB_OUTPUT"
|
|
echo "wolfssl_ref=$wolfssl_ref" >> "$GITHUB_OUTPUT"
|
|
echo "patch_defines=$patch_defines" >> "$GITHUB_OUTPUT"
|
|
|
|
echo "Using: "
|
|
echo "repo : $wolfssl_repo"
|
|
echo "ref : $wolfssl_ref"
|
|
echo "branch : $info_branch"
|
|
echo "defines: $patch_defines"
|
|
|
|
patched_jni_build:
|
|
needs: resolve_wolfssl_ref
|
|
if: needs.resolve_wolfssl_ref.outputs.should_run == 'true'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Setup JUnit
|
|
uses: ./.github/actions/setup-junit
|
|
|
|
- name: Build native wolfSSL
|
|
uses: wolfSSL/actions-build-autotools-project@v1
|
|
with:
|
|
repository: ${{ needs.resolve_wolfssl_ref.outputs.wolfssl_repo }}
|
|
ref: ${{ needs.resolve_wolfssl_ref.outputs.wolfssl_ref }}
|
|
path: wolfssl
|
|
configure: --enable-jni
|
|
check: false
|
|
install: true
|
|
|
|
- name: Setup java
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: zulu
|
|
java-version: '21'
|
|
|
|
- name: Set LD_LIBRARY_PATH
|
|
run: |
|
|
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib" >> "$GITHUB_ENV"
|
|
|
|
- name: Build and test JNI library with all patches enabled
|
|
run: |
|
|
make build check PREFIX=$GITHUB_WORKSPACE/build-dir ENABLE_PATCHES=1 PATCH_DEFINES="${{ needs.resolve_wolfssl_ref.outputs.patch_defines }}"
|
|
|
|
- name: Show logs on failure
|
|
if: failure() || cancelled()
|
|
run: |
|
|
cat build/reports/*.txt
|