mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-05 21:15:38 -05:00
277 lines
11 KiB
YAML
277 lines
11 KiB
YAML
name: Update OBS Packages
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
package:
|
|
description: 'Package to update (dms, dms-git, or all)'
|
|
required: false
|
|
default: 'all'
|
|
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 [[ -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
|
|
if: |
|
|
github.event_name == 'workflow_dispatch' ||
|
|
needs.check-updates.outputs.has_updates == 'true'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Determine packages to update
|
|
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: 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 <AvengeMedia.US@gmail.com> - ${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: 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 <AvengeMedia.US@gmail.com> $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.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 Debian _service files
|
|
for service in distro/debian/*/_service; do
|
|
if [[ -f "$service" ]]; then
|
|
sed -i "s|<param name=\"revision\">v[0-9.]*</param>|<param name=\"revision\">$VERSION</param>|" "$service"
|
|
fi
|
|
done
|
|
|
|
- name: Install Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.24'
|
|
|
|
- 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: Upload to OBS
|
|
env:
|
|
FORCE_REBUILD: ${{ github.event_name == 'workflow_dispatch' && 'true' || '' }}
|
|
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: 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
|