Skip to content

1.3.4 on 12-Dec-2025 #79

1.3.4 on 12-Dec-2025

1.3.4 on 12-Dec-2025 #79

Workflow file for this run

name: Android CI
on:
release:
types: [ published ]
workflow_dispatch:
jobs:
deploy-to-maven-central:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Which version
run: echo "${{github.ref_name}}"
- name: Decrypt the artefact signing key
run: gpg --quiet --batch --yes --decrypt --passphrase="${{ secrets.ROOM_KIT_SECRET_KEY_PASSPHRASE }}" --output secrets/secring.gpg secrets/secring.gpg.gpg
- name: Import GPG key
run: |
# Configure GPG for non-interactive use
export GPG_TTY=$(tty)
echo "use-agent" >> ~/.gnupg/gpg.conf
echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf
echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
# Kill any existing gpg-agent
pkill -f gpg-agent || true
# Import the key with batch mode
gpg --batch --import secrets/secring.gpg
# List keys to verify import
echo "=== Public keys ==="
gpg --list-keys
echo "=== Secret keys ==="
gpg --list-secret-keys
- name: Debug GPG key
run: |
pwd
ls -l secrets/
head -n 5 secrets/secring.gpg
file secrets/secring.gpg
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Deploy to Maven Central live.100ms
run: |
./gradlew :prebuilt-themes:publishToMavenLocal -PhmsRoomKitGroup="live.100ms" -PHMS_ROOM_KIT_VERSION="${{github.ref_name}}" -PossrhUsername="${{ secrets.ANDROID_SONATYPE_USERNAME}}" -PossrhPassword="${{ secrets.ANDROID_SONATYPE_PASSWORD}}" -Psigning.keyId="D00FAF9F" -Psigning.password="${{ secrets.ROOM_KIT_SECRET_KEY_PASSPHRASE }}" -Psigning.secretKeyRingFile="../secrets/secring.gpg" -PTOKEN_ENDPOINT="\"​\""
./gradlew :vb-prebuilt:publishToMavenLocal -PhmsRoomKitGroup="live.100ms" -PHMS_ROOM_KIT_VERSION="${{github.ref_name}}" -PossrhUsername="${{ secrets.ANDROID_SONATYPE_USERNAME}}" -PossrhPassword="${{ secrets.ANDROID_SONATYPE_PASSWORD}}" -Psigning.keyId="D00FAF9F" -Psigning.password="${{ secrets.ROOM_KIT_SECRET_KEY_PASSPHRASE }}" -Psigning.secretKeyRingFile="../secrets/secring.gpg" -PTOKEN_ENDPOINT="\"​\""
./gradlew :room-kit:publishToMavenLocal -PhmsRoomKitGroup="live.100ms" -PHMS_ROOM_KIT_VERSION="${{github.ref_name}}" -PossrhUsername="${{ secrets.ANDROID_SONATYPE_USERNAME}}" -PossrhPassword="${{ secrets.ANDROID_SONATYPE_PASSWORD}}" -Psigning.keyId="D00FAF9F" -Psigning.password="${{ secrets.ROOM_KIT_SECRET_KEY_PASSPHRASE }}" -Psigning.secretKeyRingFile="../secrets/secring.gpg" -PTOKEN_ENDPOINT="\"​\""
- name: Create deployment bundle
run: |
VERSION="${{ github.ref_name }}"
# Process room-kit module
ARTIFACT_ID="room-kit"
GROUP_PATH="live/100ms/$ARTIFACT_ID/$VERSION"
mkdir -p bundle/$GROUP_PATH
# Now copy from local Maven repository where everything is properly structured
LOCAL_REPO="$HOME/.m2/repository/live/100ms/$ARTIFACT_ID/$VERSION"
# Copy all artifacts and their signatures
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar.asc bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom.asc bundle/$GROUP_PATH/
# Copy sources and javadoc if they exist
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc bundle/$GROUP_PATH/
# Process prebuilt-themes module
ARTIFACT_ID="prebuilt-themes"
GROUP_PATH="live/100ms/room-kit/$ARTIFACT_ID/$VERSION"
mkdir -p bundle/$GROUP_PATH
LOCAL_REPO="$HOME/.m2/repository/live/100ms/room-kit/$ARTIFACT_ID/$VERSION"
# Copy all artifacts and their signatures
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar.asc bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom.asc bundle/$GROUP_PATH/
# Copy sources and javadoc if they exist
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc bundle/$GROUP_PATH/
# Process virtual-background-bottomsheet module
ARTIFACT_ID="virtual-background-bottomsheet"
GROUP_PATH="live/100ms/room-kit/$ARTIFACT_ID/$VERSION"
mkdir -p bundle/$GROUP_PATH
LOCAL_REPO="$HOME/.m2/repository/live/100ms/room-kit/$ARTIFACT_ID/$VERSION"
# Copy all artifacts and their signatures
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.aar.asc bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom bundle/$GROUP_PATH/
cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}.pom.asc bundle/$GROUP_PATH/
# Copy sources and javadoc if they exist
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-sources.jar.asc bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar bundle/$GROUP_PATH/
[ -f "$LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc" ] && cp $LOCAL_REPO/${ARTIFACT_ID}-${VERSION}-javadoc.jar.asc bundle/$GROUP_PATH/
# Generate checksums for all files
find bundle -type f | while read file; do
if [[ ! "$file" =~ \.(md5|sha1|sha256|sha512|asc)$ ]]; then
md5sum "$file" | awk '{print $1}' > "$file.md5"
sha1sum "$file" | awk '{print $1}' > "$file.sha1"
sha256sum "$file" | awk '{print $1}' > "$file.sha256"
sha512sum "$file" | awk '{print $1}' > "$file.sha512"
fi
done
# Finally zip the bundle
cd bundle
zip -r ../bundle.zip .
- name: Upload to Central Publishing Portal
id: upload
run: |
echo "=== Uploading bundle to Central Publishing Portal ==="
# Check if bundle exists and its size
if [ -f "bundle.zip" ]; then
echo "Bundle size: $(ls -lh bundle.zip | awk '{print $5}')"
echo "Bundle contents:"
unzip -l bundle.zip
else
echo "ERROR: bundle.zip not found"
exit 1
fi
# Upload bundle and capture plain text deployment ID
DEPLOYMENT_ID=$(curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.SONATYPE_BASE64_TOKEN }}" \
-F bundle=@bundle.zip \
"https://central.sonatype.com/api/v1/publisher/upload?publishingType=AUTOMATIC")
echo "Deployment ID: $DEPLOYMENT_ID"
if [ -z "$DEPLOYMENT_ID" ]; then
echo "❌ ERROR: Empty deployment ID returned"
exit 1
fi
echo "deployment_id=$DEPLOYMENT_ID" >> $GITHUB_OUTPUT
- name: Wait for publishing to complete
run: |
for i in {1..30}; do
STATUS=$(curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.SONATYPE_BASE64_TOKEN }}" \
"https://central.sonatype.com/api/v1/publisher/status?id=${{ steps.upload.outputs.deployment_id }}" \
| jq -r .deploymentState)
echo "Status: $STATUS"
if [[ "$STATUS" == "PUBLISHED" ]]; then
echo "✅ Published successfully!"
break
elif [[ "$STATUS" == "FAILED" ]]; then
echo "❌ Publishing failed."
exit 1
fi
sleep 10
done