diff --git a/.github/workflows/backup/run-obs.yml.bak b/.github/workflows/backup/run-obs.yml.bak new file mode 100644 index 00000000..4ffa6ef0 --- /dev/null +++ b/.github/workflows/backup/run-obs.yml.bak @@ -0,0 +1,383 @@ +name: Update OBS Packages + +on: + workflow_dispatch: + inputs: + package: + description: "Package to update (dms, dms-git, or all)" + required: false + default: "all" + force_upload: + description: "Force upload without version check" + required: false + default: "false" + type: choice + options: + - "false" + - "true" + rebuild_release: + description: "Release number for rebuilds (e.g., 2, 3, 4 to increment spec Release)" + required: false + default: "" + push: + tags: + - "v*" + 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 }} + version: ${{ steps.check.outputs.version }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install OSC + run: | + sudo apt-get update + sudo apt-get install -y osc + + mkdir -p ~/.config/osc + cat > ~/.config/osc/oscrc << EOF + [general] + apiurl = https://api.opensuse.org + + [https://api.opensuse.org] + user = ${{ secrets.OBS_USERNAME }} + pass = ${{ secrets.OBS_PASSWORD }} + EOF + chmod 600 ~/.config/osc/oscrc + + - name: Check for updates + id: check + run: | + if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" =~ ^refs/tags/ ]]; then + echo "packages=dms" >> $GITHUB_OUTPUT + VERSION="${GITHUB_REF#refs/tags/}" + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "Triggered by tag: $VERSION (always update)" + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "packages=dms-git" >> $GITHUB_OUTPUT + echo "Checking if dms-git source has changed..." + + # Get current commit hash (8 chars to match spec format) + CURRENT_COMMIT=$(git rev-parse --short=8 HEAD) + + # Check OBS for last uploaded commit + OBS_BASE="$HOME/.cache/osc-checkouts" + mkdir -p "$OBS_BASE" + OBS_PROJECT="home:AvengeMedia:dms-git" + + if [[ -d "$OBS_BASE/$OBS_PROJECT/dms-git" ]]; then + cd "$OBS_BASE/$OBS_PROJECT/dms-git" + osc up -q 2>/dev/null || true + + # Extract commit hash from spec Version line & format like; 0.6.2+git2264.a679be68 + if [[ -f "dms-git.spec" ]]; then + OBS_COMMIT=$(grep "^Version:" "dms-git.spec" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") + + if [[ -n "$OBS_COMMIT" ]]; then + if [[ "$CURRENT_COMMIT" == "$OBS_COMMIT" ]]; then + echo "has_updates=false" >> $GITHUB_OUTPUT + echo "📋 Commit $CURRENT_COMMIT already uploaded to OBS, skipping" + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 New commit detected: $CURRENT_COMMIT (OBS has $OBS_COMMIT)" + fi + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 Could not extract OBS commit, proceeding with update" + fi + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 No spec file in OBS, proceeding with update" + fi + + cd "${{ github.workspace }}" + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 First upload to OBS, update needed" + fi + elif [[ "${{ github.event.inputs.force_upload }}" == "true" ]]; then + PKG="${{ github.event.inputs.package }}" + if [[ -z "$PKG" || "$PKG" == "all" ]]; then + echo "packages=all" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "🚀 Force upload: all packages" + else + echo "packages=$PKG" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "🚀 Force upload: $PKG" + fi + elif [[ -n "${{ github.event.inputs.package }}" ]]; then + echo "packages=${{ github.event.inputs.package }}" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "Manual trigger: ${{ github.event.inputs.package }}" + else + echo "packages=all" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + fi + + update-obs: + name: Upload to OBS + needs: check-updates + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + if: | + github.event.inputs.force_upload == 'true' || + github.event_name == 'workflow_dispatch' || + needs.check-updates.outputs.has_updates == 'true' + + steps: + - name: Generate GitHub App Token + id: generate_token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ steps.generate_token.outputs.token }} + + - name: Check if last commit was automated + id: check-loop + run: | + LAST_COMMIT_MSG=$(git log -1 --pretty=%B | head -1) + if [[ "$LAST_COMMIT_MSG" == "ci: Auto-update PPA packages"* ]] || [[ "$LAST_COMMIT_MSG" == "ci: Auto-update OBS packages"* ]]; then + echo "⏭️ Last commit was automated ($LAST_COMMIT_MSG), skipping to prevent infinite loop" + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "✅ Last commit was not automated, proceeding" + echo "skip=false" >> $GITHUB_OUTPUT + fi + + - name: Determine packages to update + if: steps.check-loop.outputs.skip != 'true' + id: packages + run: | + if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" =~ ^refs/tags/ ]]; then + echo "packages=dms" >> $GITHUB_OUTPUT + VERSION="${GITHUB_REF#refs/tags/}" + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "Triggered by tag: $VERSION" + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "packages=${{ needs.check-updates.outputs.packages }}" >> $GITHUB_OUTPUT + echo "Triggered by schedule: updating git package" + elif [[ -n "${{ github.event.inputs.package }}" ]]; then + echo "packages=${{ github.event.inputs.package }}" >> $GITHUB_OUTPUT + echo "Manual trigger: ${{ github.event.inputs.package }}" + else + echo "packages=${{ needs.check-updates.outputs.packages }}" >> $GITHUB_OUTPUT + fi + + - name: Update dms-git spec version + if: steps.check-loop.outputs.skip != 'true' && (contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all') + run: | + # Get commit info for dms-git versioning + COMMIT_HASH=$(git rev-parse --short=8 HEAD) + COMMIT_COUNT=$(git rev-list --count HEAD) + BASE_VERSION=$(grep -oP '^Version:\s+\K[0-9.]+' distro/opensuse/dms.spec | head -1 || echo "0.6.2") + + NEW_VERSION="${BASE_VERSION}+git${COMMIT_COUNT}.${COMMIT_HASH}" + echo "📦 Updating dms-git.spec to version: $NEW_VERSION" + + # Update version in spec + sed -i "s/^Version:.*/Version: $NEW_VERSION/" distro/opensuse/dms-git.spec + + # Add changelog entry + DATE_STR=$(date "+%a %b %d %Y") + CHANGELOG_ENTRY="* $DATE_STR Avenge Media - ${NEW_VERSION}-1\n- Git snapshot (commit $COMMIT_COUNT: $COMMIT_HASH)" + sed -i "/%changelog/a\\$CHANGELOG_ENTRY" distro/opensuse/dms-git.spec + + - name: Update Debian dms-git changelog version + if: steps.check-loop.outputs.skip != 'true' && (contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all') + run: | + # Get commit info for dms-git versioning + COMMIT_HASH=$(git rev-parse --short=8 HEAD) + COMMIT_COUNT=$(git rev-list --count HEAD) + BASE_VERSION=$(grep -oP '^Version:\s+\K[0-9.]+' distro/opensuse/dms.spec | head -1 || echo "0.6.2") + + # Debian version format: 0.6.2+git2256.9162e314 + NEW_VERSION="${BASE_VERSION}+git${COMMIT_COUNT}.${COMMIT_HASH}" + echo "📦 Updating Debian dms-git changelog to version: $NEW_VERSION" + + CHANGELOG_DATE=$(date -R) + + CHANGELOG_FILE="distro/debian/dms-git/debian/changelog" + + # Get current version from changelog + CURRENT_VERSION=$(head -1 "$CHANGELOG_FILE" | sed 's/.*(\([^)]*\)).*/\1/') + + echo "Current Debian version: $CURRENT_VERSION" + echo "New version: $NEW_VERSION" + + # Only update if version changed + if [ "$CURRENT_VERSION" != "$NEW_VERSION" ]; then + # Create new changelog entry at top + TEMP_CHANGELOG=$(mktemp) + + cat > "$TEMP_CHANGELOG" << EOF + dms-git ($NEW_VERSION) nightly; urgency=medium + + * Git snapshot (commit $COMMIT_COUNT: $COMMIT_HASH) + + -- Avenge Media $CHANGELOG_DATE + + EOF + + # Prepend to existing changelog + cat "$CHANGELOG_FILE" >> "$TEMP_CHANGELOG" + mv "$TEMP_CHANGELOG" "$CHANGELOG_FILE" + + echo "✓ Updated Debian changelog: $CURRENT_VERSION → $NEW_VERSION" + else + echo "✓ Debian changelog already at version $NEW_VERSION" + fi + + - name: Update dms stable version + if: steps.check-loop.outputs.skip != 'true' && steps.packages.outputs.version != '' + run: | + VERSION="${{ steps.packages.outputs.version }}" + VERSION_NO_V="${VERSION#v}" + echo "Updating packaging to version $VERSION_NO_V" + + # Update openSUSE dms spec (stable only) + sed -i "s/^Version:.*/Version: $VERSION_NO_V/" distro/opensuse/dms.spec + + # Update openSUSE spec changelog + DATE_STR=$(date "+%a %b %d %Y") + CHANGELOG_ENTRY="* $DATE_STR AvengeMedia - ${VERSION_NO_V}-1\\n- Update to stable $VERSION release\\n- Bug fixes and improvements" + sed -i "/%changelog/a\\$CHANGELOG_ENTRY\\n" distro/opensuse/dms.spec + + # Update Debian _service files (both tar_scm and download_url formats) + for service in distro/debian/*/_service; do + if [[ -f "$service" ]]; then + # Update tar_scm revision parameter (for dms-git) + sed -i "s|v[0-9.]*|$VERSION|" "$service" + + # Update download_url paths (for dms stable) + sed -i "s|/v[0-9.]\+/|/$VERSION/|g" "$service" + sed -i "s|/tags/v[0-9.]\+\.tar\.gz|/tags/$VERSION.tar.gz|g" "$service" + fi + done + + # Update Debian changelog for dms stable + if [[ -f "distro/debian/dms/debian/changelog" ]]; then + CHANGELOG_DATE=$(date -R) + TEMP_CHANGELOG=$(mktemp) + + cat > "$TEMP_CHANGELOG" << EOF + dms ($VERSION_NO_V) stable; urgency=medium + + * Update to $VERSION stable release + * Bug fixes and improvements + + -- Avenge Media $CHANGELOG_DATE + + EOF + + cat "distro/debian/dms/debian/changelog" >> "$TEMP_CHANGELOG" + mv "$TEMP_CHANGELOG" "distro/debian/dms/debian/changelog" + + echo "✓ Updated Debian changelog to $VERSION_NO_V" + fi + + - name: Install Go + if: steps.check-loop.outputs.skip != 'true' + uses: actions/setup-go@v5 + with: + go-version: "1.24" + + - name: Install OSC + if: steps.check-loop.outputs.skip != 'true' + run: | + sudo apt-get update + sudo apt-get install -y osc + + mkdir -p ~/.config/osc + cat > ~/.config/osc/oscrc << EOF + [general] + apiurl = https://api.opensuse.org + + [https://api.opensuse.org] + user = ${{ secrets.OBS_USERNAME }} + pass = ${{ secrets.OBS_PASSWORD }} + EOF + chmod 600 ~/.config/osc/oscrc + + - name: Upload to OBS + if: steps.check-loop.outputs.skip != 'true' + env: + FORCE_UPLOAD: ${{ github.event.inputs.force_upload }} + REBUILD_RELEASE: ${{ github.event.inputs.rebuild_release }} + run: | + PACKAGES="${{ steps.packages.outputs.packages }}" + MESSAGE="Automated update from GitHub Actions" + + if [[ -n "${{ steps.packages.outputs.version }}" ]]; then + MESSAGE="Update to ${{ steps.packages.outputs.version }}" + fi + + if [[ "$PACKAGES" == "all" ]]; then + bash distro/scripts/obs-upload.sh dms "$MESSAGE" + bash distro/scripts/obs-upload.sh dms-git "Automated git update" + else + bash distro/scripts/obs-upload.sh "$PACKAGES" "$MESSAGE" + fi + + - name: Get changed packages + if: steps.check-loop.outputs.skip != 'true' + id: changed-packages + run: | + # Check if there are any changes to commit + if git diff --exit-code distro/debian/ distro/opensuse/ >/dev/null 2>&1; then + echo "has_changes=false" >> $GITHUB_OUTPUT + echo "📋 No changelog or spec changes to commit" + else + echo "has_changes=true" >> $GITHUB_OUTPUT + # Get list of changed packages for commit message + CHANGED_DEB=$(git diff --name-only distro/debian/ 2>/dev/null | grep 'debian/changelog' | xargs dirname 2>/dev/null | xargs dirname 2>/dev/null | xargs basename 2>/dev/null | tr '\n' ', ' | sed 's/, $//' || echo "") + CHANGED_SUSE=$(git diff --name-only distro/opensuse/ 2>/dev/null | grep '\.spec$' | sed 's|distro/opensuse/||' | sed 's/\.spec$//' | tr '\n' ', ' | sed 's/, $//' || echo "") + + PKGS=$(echo "$CHANGED_DEB,$CHANGED_SUSE" | tr ',' '\n' | grep -v '^$' | sort -u | tr '\n' ',' | sed 's/,$//') + echo "packages=$PKGS" >> $GITHUB_OUTPUT + echo "📋 Changed packages: $PKGS" + fi + + - name: Commit packaging changes + if: steps.check-loop.outputs.skip != 'true' && steps.changed-packages.outputs.has_changes == 'true' + run: | + git config user.name "dms-ci[bot]" + git config user.email "dms-ci[bot]@users.noreply.github.com" + git add distro/debian/*/debian/changelog distro/opensuse/*.spec + git commit -m "ci: Auto-update OBS packages [${{ steps.changed-packages.outputs.packages }}]" -m "🤖 Automated by GitHub Actions" + git pull --rebase origin master + git push + + - name: Summary + run: | + echo "### OBS Package Update Complete" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Packages**: ${{ steps.packages.outputs.packages }}" >> $GITHUB_STEP_SUMMARY + if [[ -n "${{ steps.packages.outputs.version }}" ]]; then + echo "- **Version**: ${{ steps.packages.outputs.version }}" >> $GITHUB_STEP_SUMMARY + fi + if [[ "${{ needs.check-updates.outputs.has_updates }}" == "false" ]]; then + echo "- **Status**: Skipped (no changes detected)" >> $GITHUB_STEP_SUMMARY + fi + echo "- **Project**: https://build.opensuse.org/project/show/home:AvengeMedia" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/backup/run-ppa.yml.bak b/.github/workflows/backup/run-ppa.yml.bak new file mode 100644 index 00000000..61875843 --- /dev/null +++ b/.github/workflows/backup/run-ppa.yml.bak @@ -0,0 +1,298 @@ +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" + force_upload: + description: "Force upload without version check" + required: false + default: "false" + type: choice + options: + - "false" + - "true" + 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: | + if [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "packages=dms-git" >> $GITHUB_OUTPUT + echo "Checking if dms-git source has changed..." + + # Get current commit hash (8 chars to match changelog format) + CURRENT_COMMIT=$(git rev-parse --short=8 HEAD) + + # Extract commit hash from changelog + # Format: dms-git (0.6.2+git2264.c5c5ce84) questing; urgency=medium + CHANGELOG_FILE="distro/ubuntu/dms-git/debian/changelog" + + if [[ -f "$CHANGELOG_FILE" ]]; then + CHANGELOG_COMMIT=$(head -1 "$CHANGELOG_FILE" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") + + if [[ -n "$CHANGELOG_COMMIT" ]]; then + if [[ "$CURRENT_COMMIT" == "$CHANGELOG_COMMIT" ]]; then + echo "has_updates=false" >> $GITHUB_OUTPUT + echo "📋 Commit $CURRENT_COMMIT already in changelog, skipping upload" + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 New commit detected: $CURRENT_COMMIT (changelog has $CHANGELOG_COMMIT)" + fi + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 Could not extract commit from changelog, proceeding with upload" + fi + else + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "📋 No changelog file found, proceeding with upload" + fi + elif [[ -n "${{ github.event.inputs.package }}" ]]; then + echo "packages=${{ github.event.inputs.package }}" >> $GITHUB_OUTPUT + echo "has_updates=true" >> $GITHUB_OUTPUT + echo "Manual trigger: ${{ github.event.inputs.package }}" + else + 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 + permissions: + contents: write + pull-requests: write + if: | + github.event.inputs.force_upload == 'true' || + github.event_name == 'workflow_dispatch' || + needs.check-updates.outputs.has_updates == 'true' + + steps: + - name: Generate GitHub App Token + id: generate_token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ steps.generate_token.outputs.token }} + + - name: Check if last commit was automated + id: check-loop + run: | + LAST_COMMIT_MSG=$(git log -1 --pretty=%B | head -1) + if [[ "$LAST_COMMIT_MSG" == "ci: Auto-update PPA packages"* ]] || [[ "$LAST_COMMIT_MSG" == "ci: Auto-update OBS packages"* ]]; then + echo "⏭️ Last commit was automated ($LAST_COMMIT_MSG), skipping to prevent infinite loop" + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "✅ Last commit was not automated, proceeding" + echo "skip=false" >> $GITHUB_OUTPUT + fi + + - name: Set up Go + if: steps.check-loop.outputs.skip != 'true' + uses: actions/setup-go@v5 + with: + go-version: "1.24" + cache: false + + - name: Install build dependencies + if: steps.check-loop.outputs.skip != 'true' + run: | + sudo apt-get update + sudo apt-get install -y \ + debhelper \ + devscripts \ + dput \ + lftp \ + build-essential \ + fakeroot \ + dpkg-dev + + - name: Configure GPG + if: steps.check-loop.outputs.skip != 'true' + 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 + if: steps.check-loop.outputs.skip != 'true' + id: packages + run: | + if [[ "${{ github.event.inputs.force_upload }}" == "true" ]]; then + PKG="${{ github.event.inputs.package }}" + if [[ -z "$PKG" || "$PKG" == "all" ]]; then + echo "packages=all" >> $GITHUB_OUTPUT + echo "🚀 Force upload: all packages" + else + echo "packages=$PKG" >> $GITHUB_OUTPUT + echo "🚀 Force upload: $PKG" + fi + elif [[ "${{ github.event_name }}" == "schedule" ]]; then + echo "packages=${{ needs.check-updates.outputs.packages }}" >> $GITHUB_OUTPUT + echo "Triggered by schedule: uploading git package" + elif [[ -n "${{ github.event.inputs.package }}" ]]; then + # Manual package selection should respect change detection + SELECTED_PKG="${{ github.event.inputs.package }}" + UPDATED_PKG="${{ needs.check-updates.outputs.packages }}" + + # Check if manually selected package is in the updated list + if [[ "$UPDATED_PKG" == *"$SELECTED_PKG"* ]] || [[ "$SELECTED_PKG" == "all" ]]; then + echo "packages=$SELECTED_PKG" >> $GITHUB_OUTPUT + echo "📦 Manual selection (has updates): $SELECTED_PKG" + else + echo "packages=" >> $GITHUB_OUTPUT + echo "⚠️ Manual selection '$SELECTED_PKG' has no updates - skipping (use force_upload to override)" + fi + else + echo "packages=${{ needs.check-updates.outputs.packages }}" >> $GITHUB_OUTPUT + fi + + - name: Upload to PPA + if: steps.check-loop.outputs.skip != 'true' + run: | + PACKAGES="${{ steps.packages.outputs.packages }}" + REBUILD_RELEASE="${{ github.event.inputs.rebuild_release }}" + + if [[ -z "$PACKAGES" ]]; then + echo "No packages selected for upload. Skipping." + exit 0 + fi + + # Build command arguments + BUILD_ARGS=() + if [[ -n "$REBUILD_RELEASE" ]]; then + BUILD_ARGS+=("$REBUILD_RELEASE") + echo "✓ Using rebuild release number: ppa$REBUILD_RELEASE" + fi + + if [[ "$PACKAGES" == "all" ]]; then + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "Uploading dms to PPA..." + if [ -n "$REBUILD_RELEASE" ]; then + echo "🔄 Using rebuild release number: ppa$REBUILD_RELEASE" + fi + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + bash distro/scripts/ppa-upload.sh dms dms questing "${BUILD_ARGS[@]}" + + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "Uploading dms-git to PPA..." + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + bash distro/scripts/ppa-upload.sh dms-git dms-git questing "${BUILD_ARGS[@]}" + + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "Uploading dms-greeter to PPA..." + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + bash distro/scripts/ppa-upload.sh dms-greeter danklinux questing "${BUILD_ARGS[@]}" + else + # Map package to PPA name + case "$PACKAGES" in + dms) + PPA_NAME="dms" + ;; + dms-git) + PPA_NAME="dms-git" + ;; + dms-greeter) + PPA_NAME="danklinux" + ;; + *) + PPA_NAME="$PACKAGES" + ;; + esac + + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "Uploading $PACKAGES to PPA..." + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + bash distro/scripts/ppa-upload.sh "$PACKAGES" "$PPA_NAME" questing "${BUILD_ARGS[@]}" + fi + + - name: Get changed packages + if: steps.check-loop.outputs.skip != 'true' + id: changed-packages + run: | + # Check if there are any changelog changes to commit + if git diff --exit-code distro/ubuntu/ >/dev/null 2>&1; then + echo "has_changes=false" >> $GITHUB_OUTPUT + echo "📋 No changelog changes to commit" + else + echo "has_changes=true" >> $GITHUB_OUTPUT + # Get list of changed packages for commit message (deduplicate) + CHANGED=$(git diff --name-only distro/ubuntu/ | grep 'debian/changelog' | sed 's|/debian/changelog||' | xargs -I{} basename {} | sort -u | tr '\n' ',' | sed 's/,$//') + echo "packages=$CHANGED" >> $GITHUB_OUTPUT + echo "📋 Changed packages: $CHANGED" + echo "📋 Debug - Changed files:" + git diff --name-only distro/ubuntu/ | grep 'debian/changelog' || echo "No changelog files found" + fi + + - name: Commit changelog changes + if: steps.check-loop.outputs.skip != 'true' && steps.changed-packages.outputs.has_changes == 'true' + run: | + git config user.name "dms-ci[bot]" + git config user.email "dms-ci[bot]@users.noreply.github.com" + git add distro/ubuntu/*/debian/changelog + git commit -m "ci: Auto-update PPA packages [${{ steps.changed-packages.outputs.packages }}]" -m "🤖 Automated by GitHub Actions" + git pull --rebase origin master + git push + + - name: Summary + run: | + echo "### PPA Package Upload Complete" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Packages**: ${{ steps.packages.outputs.packages }}" >> $GITHUB_STEP_SUMMARY + + if [[ "${{ needs.check-updates.outputs.has_updates }}" == "false" ]]; then + echo "- **Status**: Skipped (no changes detected)" >> $GITHUB_STEP_SUMMARY + fi + + PACKAGES="${{ steps.packages.outputs.packages }}" + if [[ "$PACKAGES" == "all" ]]; then + echo "- **PPA dms**: https://launchpad.net/~avengemedia/+archive/ubuntu/dms/+packages" >> $GITHUB_STEP_SUMMARY + echo "- **PPA dms-git**: https://launchpad.net/~avengemedia/+archive/ubuntu/dms-git/+packages" >> $GITHUB_STEP_SUMMARY + echo "- **PPA danklinux**: https://launchpad.net/~avengemedia/+archive/ubuntu/danklinux/+packages" >> $GITHUB_STEP_SUMMARY + elif [[ "$PACKAGES" == "dms" ]]; then + echo "- **PPA**: https://launchpad.net/~avengemedia/+archive/ubuntu/dms/+packages" >> $GITHUB_STEP_SUMMARY + elif [[ "$PACKAGES" == "dms-git" ]]; then + echo "- **PPA**: https://launchpad.net/~avengemedia/+archive/ubuntu/dms-git/+packages" >> $GITHUB_STEP_SUMMARY + elif [[ "$PACKAGES" == "dms-greeter" ]]; then + echo "- **PPA**: https://launchpad.net/~avengemedia/+archive/ubuntu/danklinux/+packages" >> $GITHUB_STEP_SUMMARY + fi + + if [[ -n "${{ steps.packages.outputs.version }}" ]]; then + echo "- **Version**: ${{ steps.packages.outputs.version }}" >> $GITHUB_STEP_SUMMARY + fi + echo "" >> $GITHUB_STEP_SUMMARY + echo "Builds will appear once Launchpad processes the uploads." >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/run-obs.yml b/.github/workflows/run-obs.yml index 4ffa6ef0..2a570559 100644 --- a/.github/workflows/run-obs.yml +++ b/.github/workflows/run-obs.yml @@ -41,24 +41,11 @@ jobs: with: fetch-depth: 0 - - name: Install OSC - run: | - sudo apt-get update - sudo apt-get install -y osc - - mkdir -p ~/.config/osc - cat > ~/.config/osc/oscrc << EOF - [general] - apiurl = https://api.opensuse.org - - [https://api.opensuse.org] - user = ${{ secrets.OBS_USERNAME }} - pass = ${{ secrets.OBS_PASSWORD }} - EOF - chmod 600 ~/.config/osc/oscrc - - name: Check for updates id: check + env: + OBS_USERNAME: ${{ secrets.OBS_USERNAME }} + OBS_PASSWORD: ${{ secrets.OBS_PASSWORD }} run: | if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" =~ ^refs/tags/ ]]; then echo "packages=dms" >> $GITHUB_OUTPUT @@ -73,40 +60,29 @@ jobs: # Get current commit hash (8 chars to match spec format) CURRENT_COMMIT=$(git rev-parse --short=8 HEAD) - # Check OBS for last uploaded commit - OBS_BASE="$HOME/.cache/osc-checkouts" - mkdir -p "$OBS_BASE" - OBS_PROJECT="home:AvengeMedia:dms-git" + # Query OBS API for current spec file version + # Format: Version: 1.0.2+git2528.d336866f + OBS_SPEC=$(curl -s -u "$OBS_USERNAME:$OBS_PASSWORD" "https://api.opensuse.org/source/home:AvengeMedia:dms-git/dms-git/dms-git.spec" 2>/dev/null || echo "") - if [[ -d "$OBS_BASE/$OBS_PROJECT/dms-git" ]]; then - cd "$OBS_BASE/$OBS_PROJECT/dms-git" - osc up -q 2>/dev/null || true + if [[ -n "$OBS_SPEC" && "$OBS_SPEC" != *"error"* ]]; then + # Extract commit hash from Version line (e.g., d336866f from 1.0.2+git2528.d336866f) + OBS_COMMIT=$(echo "$OBS_SPEC" | grep "^Version:" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") - # Extract commit hash from spec Version line & format like; 0.6.2+git2264.a679be68 - if [[ -f "dms-git.spec" ]]; then - OBS_COMMIT=$(grep "^Version:" "dms-git.spec" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") - - if [[ -n "$OBS_COMMIT" ]]; then - if [[ "$CURRENT_COMMIT" == "$OBS_COMMIT" ]]; then - echo "has_updates=false" >> $GITHUB_OUTPUT - echo "📋 Commit $CURRENT_COMMIT already uploaded to OBS, skipping" - else - echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 New commit detected: $CURRENT_COMMIT (OBS has $OBS_COMMIT)" - fi + if [[ -n "$OBS_COMMIT" ]]; then + if [[ "$CURRENT_COMMIT" == "$OBS_COMMIT" ]]; then + echo "has_updates=false" >> $GITHUB_OUTPUT + echo "📋 Commit $CURRENT_COMMIT already uploaded to OBS, skipping" else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 Could not extract OBS commit, proceeding with update" + echo "📋 New commit detected: $CURRENT_COMMIT (OBS has $OBS_COMMIT)" fi else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 No spec file in OBS, proceeding with update" + echo "📋 Could not extract OBS commit, proceeding with update" fi - - cd "${{ github.workspace }}" else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 First upload to OBS, update needed" + echo "📋 Could not fetch OBS spec, proceeding with update" fi elif [[ "${{ github.event.inputs.force_upload }}" == "true" ]]; then PKG="${{ github.event.inputs.package }}" @@ -132,42 +108,18 @@ jobs: name: Upload to OBS needs: check-updates runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write if: | github.event.inputs.force_upload == 'true' || github.event_name == 'workflow_dispatch' || needs.check-updates.outputs.has_updates == 'true' steps: - - name: Generate GitHub App Token - id: generate_token - uses: actions/create-github-app-token@v1 - with: - app-id: ${{ secrets.APP_ID }} - private-key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ steps.generate_token.outputs.token }} - - - name: Check if last commit was automated - id: check-loop - run: | - LAST_COMMIT_MSG=$(git log -1 --pretty=%B | head -1) - if [[ "$LAST_COMMIT_MSG" == "ci: Auto-update PPA packages"* ]] || [[ "$LAST_COMMIT_MSG" == "ci: Auto-update OBS packages"* ]]; then - echo "⏭️ Last commit was automated ($LAST_COMMIT_MSG), skipping to prevent infinite loop" - echo "skip=true" >> $GITHUB_OUTPUT - else - echo "✅ Last commit was not automated, proceeding" - echo "skip=false" >> $GITHUB_OUTPUT - fi - name: Determine packages to update - if: steps.check-loop.outputs.skip != 'true' id: packages run: | if [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" =~ ^refs/tags/ ]]; then @@ -186,7 +138,7 @@ jobs: fi - name: Update dms-git spec version - if: steps.check-loop.outputs.skip != 'true' && (contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all') + if: contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all' run: | # Get commit info for dms-git versioning COMMIT_HASH=$(git rev-parse --short=8 HEAD) @@ -205,7 +157,7 @@ jobs: sed -i "/%changelog/a\\$CHANGELOG_ENTRY" distro/opensuse/dms-git.spec - name: Update Debian dms-git changelog version - if: steps.check-loop.outputs.skip != 'true' && (contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all') + if: contains(steps.packages.outputs.packages, 'dms-git') || steps.packages.outputs.packages == 'all' run: | # Get commit info for dms-git versioning COMMIT_HASH=$(git rev-parse --short=8 HEAD) @@ -250,7 +202,7 @@ jobs: fi - name: Update dms stable version - if: steps.check-loop.outputs.skip != 'true' && steps.packages.outputs.version != '' + if: steps.packages.outputs.version != '' run: | VERSION="${{ steps.packages.outputs.version }}" VERSION_NO_V="${VERSION#v}" @@ -298,13 +250,11 @@ jobs: fi - name: Install Go - if: steps.check-loop.outputs.skip != 'true' uses: actions/setup-go@v5 with: go-version: "1.24" - name: Install OSC - if: steps.check-loop.outputs.skip != 'true' run: | sudo apt-get update sudo apt-get install -y osc @@ -321,7 +271,6 @@ jobs: chmod 600 ~/.config/osc/oscrc - name: Upload to OBS - if: steps.check-loop.outputs.skip != 'true' env: FORCE_UPLOAD: ${{ github.event.inputs.force_upload }} REBUILD_RELEASE: ${{ github.event.inputs.rebuild_release }} @@ -340,35 +289,6 @@ jobs: bash distro/scripts/obs-upload.sh "$PACKAGES" "$MESSAGE" fi - - name: Get changed packages - if: steps.check-loop.outputs.skip != 'true' - id: changed-packages - run: | - # Check if there are any changes to commit - if git diff --exit-code distro/debian/ distro/opensuse/ >/dev/null 2>&1; then - echo "has_changes=false" >> $GITHUB_OUTPUT - echo "📋 No changelog or spec changes to commit" - else - echo "has_changes=true" >> $GITHUB_OUTPUT - # Get list of changed packages for commit message - CHANGED_DEB=$(git diff --name-only distro/debian/ 2>/dev/null | grep 'debian/changelog' | xargs dirname 2>/dev/null | xargs dirname 2>/dev/null | xargs basename 2>/dev/null | tr '\n' ', ' | sed 's/, $//' || echo "") - CHANGED_SUSE=$(git diff --name-only distro/opensuse/ 2>/dev/null | grep '\.spec$' | sed 's|distro/opensuse/||' | sed 's/\.spec$//' | tr '\n' ', ' | sed 's/, $//' || echo "") - - PKGS=$(echo "$CHANGED_DEB,$CHANGED_SUSE" | tr ',' '\n' | grep -v '^$' | sort -u | tr '\n' ',' | sed 's/,$//') - echo "packages=$PKGS" >> $GITHUB_OUTPUT - echo "📋 Changed packages: $PKGS" - fi - - - name: Commit packaging changes - if: steps.check-loop.outputs.skip != 'true' && steps.changed-packages.outputs.has_changes == 'true' - run: | - git config user.name "dms-ci[bot]" - git config user.email "dms-ci[bot]@users.noreply.github.com" - git add distro/debian/*/debian/changelog distro/opensuse/*.spec - git commit -m "ci: Auto-update OBS packages [${{ steps.changed-packages.outputs.packages }}]" -m "🤖 Automated by GitHub Actions" - git pull --rebase origin master - git push - - name: Summary run: | echo "### OBS Package Update Complete" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/run-ppa.yml b/.github/workflows/run-ppa.yml index 61875843..85557df8 100644 --- a/.github/workflows/run-ppa.yml +++ b/.github/workflows/run-ppa.yml @@ -44,31 +44,32 @@ jobs: echo "packages=dms-git" >> $GITHUB_OUTPUT echo "Checking if dms-git source has changed..." - # Get current commit hash (8 chars to match changelog format) + # Get current commit hash (8 chars to match PPA version format) CURRENT_COMMIT=$(git rev-parse --short=8 HEAD) - # Extract commit hash from changelog - # Format: dms-git (0.6.2+git2264.c5c5ce84) questing; urgency=medium - CHANGELOG_FILE="distro/ubuntu/dms-git/debian/changelog" + # Query Launchpad API for last published version + # Format: 1.0.2+git2528.d336866fppa1 + 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 "") - if [[ -f "$CHANGELOG_FILE" ]]; then - CHANGELOG_COMMIT=$(head -1 "$CHANGELOG_FILE" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") + if [[ -n "$PPA_VERSION" ]]; then + # Extract commit hash from version (e.g., d336866f from 1.0.2+git2528.d336866fppa1) + PPA_COMMIT=$(echo "$PPA_VERSION" | grep -oP '\.[a-f0-9]{8}' | tr -d '.' || echo "") - if [[ -n "$CHANGELOG_COMMIT" ]]; then - if [[ "$CURRENT_COMMIT" == "$CHANGELOG_COMMIT" ]]; then + if [[ -n "$PPA_COMMIT" ]]; then + if [[ "$CURRENT_COMMIT" == "$PPA_COMMIT" ]]; then echo "has_updates=false" >> $GITHUB_OUTPUT - echo "📋 Commit $CURRENT_COMMIT already in changelog, skipping upload" + echo "📋 Commit $CURRENT_COMMIT already uploaded to PPA, skipping" else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 New commit detected: $CURRENT_COMMIT (changelog has $CHANGELOG_COMMIT)" + echo "📋 New commit detected: $CURRENT_COMMIT (PPA has $PPA_COMMIT)" fi else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 Could not extract commit from changelog, proceeding with upload" + echo "📋 Could not extract PPA commit, proceeding with upload" fi else echo "has_updates=true" >> $GITHUB_OUTPUT - echo "📋 No changelog file found, proceeding with upload" + echo "📋 No published version found in PPA, proceeding with upload" fi elif [[ -n "${{ github.event.inputs.package }}" ]]; then echo "packages=${{ github.event.inputs.package }}" >> $GITHUB_OUTPUT @@ -83,49 +84,24 @@ jobs: name: Upload to PPA needs: check-updates runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write if: | github.event.inputs.force_upload == 'true' || github.event_name == 'workflow_dispatch' || needs.check-updates.outputs.has_updates == 'true' steps: - - name: Generate GitHub App Token - id: generate_token - uses: actions/create-github-app-token@v1 - with: - app-id: ${{ secrets.APP_ID }} - private-key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ steps.generate_token.outputs.token }} - - - name: Check if last commit was automated - id: check-loop - run: | - LAST_COMMIT_MSG=$(git log -1 --pretty=%B | head -1) - if [[ "$LAST_COMMIT_MSG" == "ci: Auto-update PPA packages"* ]] || [[ "$LAST_COMMIT_MSG" == "ci: Auto-update OBS packages"* ]]; then - echo "⏭️ Last commit was automated ($LAST_COMMIT_MSG), skipping to prevent infinite loop" - echo "skip=true" >> $GITHUB_OUTPUT - else - echo "✅ Last commit was not automated, proceeding" - echo "skip=false" >> $GITHUB_OUTPUT - fi - name: Set up Go - if: steps.check-loop.outputs.skip != 'true' uses: actions/setup-go@v5 with: go-version: "1.24" cache: false - name: Install build dependencies - if: steps.check-loop.outputs.skip != 'true' run: | sudo apt-get update sudo apt-get install -y \ @@ -138,7 +114,6 @@ jobs: dpkg-dev - name: Configure GPG - if: steps.check-loop.outputs.skip != 'true' env: GPG_KEY: ${{ secrets.GPG_PRIVATE_KEY }} run: | @@ -147,7 +122,6 @@ jobs: echo "DEBSIGN_KEYID=$GPG_KEY_ID" >> $GITHUB_ENV - name: Determine packages to upload - if: steps.check-loop.outputs.skip != 'true' id: packages run: | if [[ "${{ github.event.inputs.force_upload }}" == "true" ]]; then @@ -180,7 +154,6 @@ jobs: fi - name: Upload to PPA - if: steps.check-loop.outputs.skip != 'true' run: | PACKAGES="${{ steps.packages.outputs.packages }}" REBUILD_RELEASE="${{ github.event.inputs.rebuild_release }}" @@ -240,34 +213,6 @@ jobs: bash distro/scripts/ppa-upload.sh "$PACKAGES" "$PPA_NAME" questing "${BUILD_ARGS[@]}" fi - - name: Get changed packages - if: steps.check-loop.outputs.skip != 'true' - id: changed-packages - run: | - # Check if there are any changelog changes to commit - if git diff --exit-code distro/ubuntu/ >/dev/null 2>&1; then - echo "has_changes=false" >> $GITHUB_OUTPUT - echo "📋 No changelog changes to commit" - else - echo "has_changes=true" >> $GITHUB_OUTPUT - # Get list of changed packages for commit message (deduplicate) - CHANGED=$(git diff --name-only distro/ubuntu/ | grep 'debian/changelog' | sed 's|/debian/changelog||' | xargs -I{} basename {} | sort -u | tr '\n' ',' | sed 's/,$//') - echo "packages=$CHANGED" >> $GITHUB_OUTPUT - echo "📋 Changed packages: $CHANGED" - echo "📋 Debug - Changed files:" - git diff --name-only distro/ubuntu/ | grep 'debian/changelog' || echo "No changelog files found" - fi - - - name: Commit changelog changes - if: steps.check-loop.outputs.skip != 'true' && steps.changed-packages.outputs.has_changes == 'true' - run: | - git config user.name "dms-ci[bot]" - git config user.email "dms-ci[bot]@users.noreply.github.com" - git add distro/ubuntu/*/debian/changelog - git commit -m "ci: Auto-update PPA packages [${{ steps.changed-packages.outputs.packages }}]" -m "🤖 Automated by GitHub Actions" - git pull --rebase origin master - git push - - name: Summary run: | echo "### PPA Package Upload Complete" >> $GITHUB_STEP_SUMMARY