name: Update PPA Packages on: workflow_dispatch: inputs: package: description: "Package to upload (dms, dms-git, dms-greeter, or all)" required: false default: "dms-git" rebuild_release: description: "Release number for rebuilds (e.g., 2, 3, 4 for ppa2, ppa3, ppa4)" required: false default: "" schedule: - cron: "0 */3 * * *" # Every 3 hours for dms-git builds jobs: check-updates: name: Check for updates runs-on: ubuntu-latest outputs: has_updates: ${{ steps.check.outputs.has_updates }} packages: ${{ steps.check.outputs.packages }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Check for updates id: check run: | # Helper function to check dms-git commit check_dms_git() { local CURRENT_COMMIT=$(git rev-parse --short=8 HEAD) local PPA_VERSION=$(curl -s "https://api.launchpad.net/1.0/~avengemedia/+archive/ubuntu/dms-git?ws.op=getPublishedSources&source_name=dms-git&status=Published" | grep -oP '"source_package_version":\s*"\K[^"]+' | head -1 || echo "") local PPA_COMMIT=$(echo "$PPA_VERSION" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") if [[ -n "$PPA_COMMIT" && "$CURRENT_COMMIT" == "$PPA_COMMIT" ]]; then echo "📋 dms-git: Commit $CURRENT_COMMIT already exists, skipping" return 1 # No update needed else echo "📋 dms-git: New commit $CURRENT_COMMIT (PPA has ${PPA_COMMIT:-none})" return 0 # Update needed fi } # Helper function to check stable package tag check_stable_package() { local PKG="$1" local PPA_NAME="$2" # Use git ls-remote to find the latest tag, sorted by version (descending) local LATEST_TAG=$(git ls-remote --tags --refs --sort='-v:refname' https://github.com/AvengeMedia/DankMaterialShell.git | head -n1 | awk -F/ '{print $NF}' | sed 's/^v//') local PPA_VERSION=$(curl -s "https://api.launchpad.net/1.0/~avengemedia/+archive/ubuntu/$PPA_NAME?ws.op=getPublishedSources&source_name=$PKG&status=Published" | grep -oP '"source_package_version":\s*"\K[^"]+' | head -1 || echo "") local PPA_BASE_VERSION=$(echo "$PPA_VERSION" | sed 's/ppa[0-9]*$//') if [[ -n "$LATEST_TAG" && "$LATEST_TAG" == "$PPA_BASE_VERSION" ]]; then echo "📋 $PKG: Tag $LATEST_TAG already exists, skipping" return 1 # No update needed else echo "📋 $PKG: New tag ${LATEST_TAG:-unknown} (PPA has ${PPA_BASE_VERSION:-none})" return 0 # Update needed fi } # Main logic REBUILD="${{ github.event.inputs.rebuild_release }}" if [[ "${{ github.event_name }}" == "schedule" ]]; then # Scheduled run - check dms-git only echo "packages=dms-git" >> $GITHUB_OUTPUT if check_dms_git; then echo "has_updates=true" >> $GITHUB_OUTPUT else echo "has_updates=false" >> $GITHUB_OUTPUT fi elif [[ -n "${{ github.event.inputs.package }}" ]]; then # Manual workflow trigger PKG="${{ github.event.inputs.package }}" if [[ -n "$REBUILD" ]]; then # Rebuild requested - always proceed echo "packages=$PKG" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT echo "🔄 Manual rebuild requested: $PKG (ppa$REBUILD)" elif [[ "$PKG" == "all" ]]; then # Check each package and build list of those needing updates PACKAGES_TO_UPDATE=() check_dms_git && PACKAGES_TO_UPDATE+=("dms-git") check_stable_package "dms" "dms" && PACKAGES_TO_UPDATE+=("dms") check_stable_package "dms-greeter" "danklinux" && PACKAGES_TO_UPDATE+=("dms-greeter") if [[ ${#PACKAGES_TO_UPDATE[@]} -gt 0 ]]; then echo "packages=${PACKAGES_TO_UPDATE[*]}" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT echo "✓ Packages to update: ${PACKAGES_TO_UPDATE[*]}" else echo "packages=" >> $GITHUB_OUTPUT echo "has_updates=false" >> $GITHUB_OUTPUT echo "✓ All packages up to date" fi elif [[ "$PKG" == "dms-git" ]]; then if check_dms_git; then echo "packages=$PKG" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT else echo "packages=" >> $GITHUB_OUTPUT echo "has_updates=false" >> $GITHUB_OUTPUT fi elif [[ "$PKG" == "dms" ]]; then if check_stable_package "dms" "dms"; then echo "packages=$PKG" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT else echo "packages=" >> $GITHUB_OUTPUT echo "has_updates=false" >> $GITHUB_OUTPUT fi elif [[ "$PKG" == "dms-greeter" ]]; then if check_stable_package "dms-greeter" "danklinux"; then echo "packages=$PKG" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT else echo "packages=" >> $GITHUB_OUTPUT echo "has_updates=false" >> $GITHUB_OUTPUT fi else # Unknown package - proceed anyway echo "packages=$PKG" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT echo "Manual trigger: $PKG" fi else # Fallback echo "packages=dms-git" >> $GITHUB_OUTPUT echo "has_updates=true" >> $GITHUB_OUTPUT fi upload-ppa: name: Upload to PPA needs: check-updates runs-on: ubuntu-latest if: needs.check-updates.outputs.has_updates == 'true' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v5 with: go-version: "1.24" cache: false - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y \ debhelper \ devscripts \ dput \ lftp \ build-essential \ fakeroot \ dpkg-dev - name: Configure GPG env: GPG_KEY: ${{ secrets.GPG_PRIVATE_KEY }} run: | echo "$GPG_KEY" | gpg --import GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | awk '{print $2}' | cut -d'/' -f2) echo "DEBSIGN_KEYID=$GPG_KEY_ID" >> $GITHUB_ENV - name: Determine packages to upload id: packages run: | # Use packages determined by check-updates job echo "packages=${{ needs.check-updates.outputs.packages }}" >> $GITHUB_OUTPUT if [[ "${{ github.event_name }}" == "schedule" ]]; then echo "Triggered by schedule: uploading git package" elif [[ -n "${{ github.event.inputs.package }}" ]]; then echo "Manual trigger: ${{ needs.check-updates.outputs.packages }}" fi - name: Upload to PPA run: | PACKAGES="${{ steps.packages.outputs.packages }}" REBUILD_RELEASE="${{ github.event.inputs.rebuild_release }}" if [[ -z "$PACKAGES" ]]; then echo "✓ No packages need uploading. All up to date!" exit 0 fi # Export REBUILD_RELEASE so ppa-build.sh can use it if [[ -n "$REBUILD_RELEASE" ]]; then export REBUILD_RELEASE echo "✓ Using rebuild release number: ppa$REBUILD_RELEASE" fi # PACKAGES can be space-separated list (e.g., "dms-git dms" from "all" check) # Loop through each package and upload for PKG in $PACKAGES; do # Map package to PPA name case "$PKG" in dms) PPA_NAME="dms" ;; dms-git) PPA_NAME="dms-git" ;; dms-greeter) PPA_NAME="danklinux" ;; *) echo "⚠️ Unknown package: $PKG, skipping" continue ;; esac echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Uploading $PKG to PPA $PPA_NAME..." if [[ -n "$REBUILD_RELEASE" ]]; then echo "🔄 Using rebuild release number: ppa$REBUILD_RELEASE" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" bash distro/scripts/ppa-upload.sh "$PKG" "$PPA_NAME" questing ${REBUILD_RELEASE:+"$REBUILD_RELEASE"} done - name: Summary if: always() run: | echo "### PPA Package Upload Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY PACKAGES="${{ steps.packages.outputs.packages }}" if [[ -z "$PACKAGES" ]]; then echo "**Status:** ✅ All packages up to date (no uploads needed)" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "All packages are current. Run will complete successfully." >> $GITHUB_STEP_SUMMARY else echo "**Packages Uploaded:**" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY for PKG in $PACKAGES; do case "$PKG" in dms) echo "- ✅ **dms** → [View builds](https://launchpad.net/~avengemedia/+archive/ubuntu/dms/+packages)" >> $GITHUB_STEP_SUMMARY ;; dms-git) echo "- ✅ **dms-git** → [View builds](https://launchpad.net/~avengemedia/+archive/ubuntu/dms-git/+packages)" >> $GITHUB_STEP_SUMMARY ;; dms-greeter) echo "- ✅ **dms-greeter** → [View builds](https://launchpad.net/~avengemedia/+archive/ubuntu/danklinux/+packages)" >> $GITHUB_STEP_SUMMARY ;; esac done echo "" >> $GITHUB_STEP_SUMMARY if [[ -n "${{ github.event.inputs.rebuild_release }}" ]]; then echo "**Rebuild Number:** ppa${{ github.event.inputs.rebuild_release }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY fi echo "Builds will appear once Launchpad processes the uploads." >> $GITHUB_STEP_SUMMARY fi