Skip to content

Merge branch 'Pi4J:develop' into develop #10

Merge branch 'Pi4J:develop' into develop

Merge branch 'Pi4J:develop' into develop #10

name: Build develop snapshot and push to download repo
on:
push:
branches: [ develop ]
workflow_dispatch:
jobs:
Build:
name: Build & Deploy Snapshot
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get remove --purge man-db
sudo apt-get install --yes build-essential linux-headers-$(uname -r) sudo libi2c-dev linux-modules-extra-$(uname -r)
- name: Install JDK25
uses: sfesenko/setup-sdkman@v1
with:
deps: java:25-zulu
- name: Create Maven settings
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
run: |
mkdir -p ~/.m2
printf '<settings><servers><server><id>sonatype-oss-snapshots</id><username>%s</username><password>%s</password></server></servers></settings>' "$MAVEN_USERNAME" "$MAVEN_PASSWORD" > ~/.m2/settings.xml
- name: Create and add current user to suitable groups
run: |
sudo addgroup spi
sudo adduser $USER spi
sudo adduser $USER i2c
sudo adduser $USER dialout
- name: Add proper udev rules and trigger udevadm
run: |
sudo cp udev.rules /etc/udev/rules.d/99-pi4j-io.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
- name: Cache local Maven repository
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Validate secrets are available
run: |
if [ -z "${{ secrets.OSSRH_USERNAME }}" ]; then
echo "ERROR: OSSRH_USERNAME secret is not set"
exit 1
fi
if [ -z "${{ secrets.OSSRH_TOKEN }}" ]; then
echo "ERROR: OSSRH_TOKEN secret is not set"
exit 1
fi
echo "✅ Both OSSRH_USERNAME and OSSRH_TOKEN secrets are available"
echo "Username length: ${#MAVEN_USERNAME}"
echo "Token length: ${#MAVEN_PASSWORD}"
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Verify Maven settings
run: |
echo "Generated Maven settings.xml:"
cat ~/.m2/settings.xml || echo "No settings.xml found"
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Build entire Pi4J Project
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
run: sudo -u $USER bash -c 'source ~/.sdkman/bin/sdkman-init.sh && ./mvnw deploy'
- name: Make staging directory
run: mkdir staging
- name: Build download archive
run: |
VERSION=$(grep -m1 '<version>' pom.xml | sed -E 's/.*<version>([^<]+)<\/version>.*/\1/')
mkdir -p bundle/core bundle/plugins bundle/test bundle/docs
cp -v LICENSE.txt NOTICE.txt README.md bundle/docs/
cp -v pi4j-core/target/pi4j-core-*.jar bundle/core/ || true
cp -v pi4j-test/target/pi4j-test-*.jar bundle/test/ || true
find plugins -type f -path '*/target/pi4j-*.jar' -exec cp -v {} bundle/plugins/ \;
(cd bundle && zip -r "../staging/pi4j-${VERSION}.zip" .)
ls -lh staging
- name: Upload distribution files to staging
uses: actions/upload-artifact@v4
with:
name: pi4j-dist
path: staging
DeployPackages:
name: Deploy to Download Repo
needs: [ Build ]
runs-on: ubuntu-latest
concurrency:
group: deploy-to-download-repo
cancel-in-progress: false
environment:
name: Staging
url: 'https://github.com/Pi4J/download'
steps:
- name: Download staged artifacts from build
uses: actions/download-artifact@v4
with:
name: pi4j-dist
- name: Display downloaded build artifacts
shell: bash
run: tree
- name: Publish build archives to download repository
env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
run: |
git clone --single-branch --branch main \
https://${API_TOKEN_GITHUB}@github.com/pi4j/download.git /tmp/download-repo
cp pi4j-*.zip /tmp/download-repo/
cd /tmp/download-repo
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git config user.name 'github-actions[bot]'
git add .
if git diff --staged --quiet; then
echo "No changes to commit"
exit 0
fi
git commit -m "Update from https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
for i in 1 2 3; do
git push origin main && break
echo "Push attempt $i failed, rebasing and retrying..."
git pull --rebase origin main
done