ADD: Gitea workflow
This commit is contained in:
207
zabbix-alpine-builder/.gitea/workflows/build.yml
Normal file
207
zabbix-alpine-builder/.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
name: Build Zabbix APK on New Release
|
||||||
|
|
||||||
|
# Trigger the workflow on schedule (daily at 2 AM UTC) and manual dispatch
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *' # Daily at 2 AM UTC
|
||||||
|
workflow_dispatch: # Allow manual triggering
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build Zabbix APK Packages
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: alpine:latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
apk update
|
||||||
|
apk add --no-cache \
|
||||||
|
alpine-sdk \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
bash \
|
||||||
|
grep \
|
||||||
|
sed \
|
||||||
|
coreutils
|
||||||
|
|
||||||
|
- name: Check for new Zabbix version
|
||||||
|
id: version_check
|
||||||
|
run: |
|
||||||
|
echo "Checking for new Zabbix 7.4.x versions..."
|
||||||
|
|
||||||
|
# Install jq for JSON parsing
|
||||||
|
apk add --no-cache jq
|
||||||
|
|
||||||
|
# Fetch the latest stable version from Zabbix Bitbucket API (stable releases only)
|
||||||
|
LATEST_VERSION=$(curl -s "https://git.zabbix.com/rest/api/1.0/projects/ZBX/repos/zabbix/tags?limit=100" | \
|
||||||
|
jq -r '.values[].displayId' | \
|
||||||
|
grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | \
|
||||||
|
grep -v 'rc\|beta\|alpha' | \
|
||||||
|
sort -V | \
|
||||||
|
tail -1)
|
||||||
|
|
||||||
|
# Validate version format
|
||||||
|
if [[ ! "$LATEST_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "Error: Invalid version format detected: $LATEST_VERSION"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Latest upstream version: $LATEST_VERSION"
|
||||||
|
|
||||||
|
# Extract current version from APKBUILD
|
||||||
|
CURRENT_VERSION=$(grep '^pkgver=' zabbix/APKBUILD | cut -d'=' -f2)
|
||||||
|
echo "Current package version: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
# Compare versions
|
||||||
|
if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then
|
||||||
|
echo "No new version available. Current version $CURRENT_VERSION is up to date."
|
||||||
|
echo "new_version_available=false" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "New version available: $LATEST_VERSION"
|
||||||
|
echo "new_version_available=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Update APKBUILD with new version
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Updating APKBUILD with version ${{ steps.version_check.outputs.latest_version }}"
|
||||||
|
|
||||||
|
# Update package version in APKBUILD
|
||||||
|
sed -i "s/^pkgver=.*/pkgver=${{ steps.version_check.outputs.latest_version }}/" zabbix/APKBUILD
|
||||||
|
|
||||||
|
# Reset package release number for new version
|
||||||
|
sed -i "s/^pkgrel=.*/pkgrel=0/" zabbix/APKBUILD
|
||||||
|
|
||||||
|
echo "APKBUILD updated successfully"
|
||||||
|
|
||||||
|
- name: Create build user and setup environment
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Setting up build environment..."
|
||||||
|
|
||||||
|
# Create build user
|
||||||
|
adduser -D -s /bin/bash builder
|
||||||
|
addgroup builder abuild
|
||||||
|
|
||||||
|
# Setup abuild directories
|
||||||
|
mkdir -p /home/builder/.abuild
|
||||||
|
chown -R builder:builder /home/builder
|
||||||
|
|
||||||
|
# Generate signing key for builder user
|
||||||
|
su - builder -c "abuild-keygen -a -n"
|
||||||
|
|
||||||
|
# Copy project files to builder's workspace
|
||||||
|
cp -r /github/workspace /home/builder/workspace
|
||||||
|
chown -R builder:builder /home/builder/workspace
|
||||||
|
|
||||||
|
- name: Update checksums
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Updating checksums for new version..."
|
||||||
|
cd /home/builder/workspace/zabbix
|
||||||
|
|
||||||
|
# First, fetch the source to calculate checksums
|
||||||
|
su - builder -c "cd /home/builder/workspace/zabbix && abuild fetch"
|
||||||
|
|
||||||
|
# Update checksums in APKBUILD
|
||||||
|
su - builder -c "cd /home/builder/workspace/zabbix && abuild checksum"
|
||||||
|
|
||||||
|
# Copy updated APKBUILD back to workspace
|
||||||
|
cp /home/builder/workspace/zabbix/APKBUILD /github/workspace/zabbix/APKBUILD
|
||||||
|
|
||||||
|
echo "Checksums updated successfully"
|
||||||
|
|
||||||
|
- name: Build packages
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Building Zabbix packages..."
|
||||||
|
cd /home/builder/workspace
|
||||||
|
su - builder -c "cd /home/builder/workspace && ./build.sh"
|
||||||
|
|
||||||
|
- name: Collect build artifacts
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Collecting build artifacts..."
|
||||||
|
|
||||||
|
# Create artifacts directory
|
||||||
|
mkdir -p /github/workspace/artifacts
|
||||||
|
|
||||||
|
# Copy generated packages
|
||||||
|
if [ -d "/home/builder/packages" ]; then
|
||||||
|
find /home/builder/packages -name "zabbix*.apk" -type f -exec cp {} /github/workspace/artifacts/ \;
|
||||||
|
echo "Artifacts collected:"
|
||||||
|
ls -la /github/workspace/artifacts/
|
||||||
|
else
|
||||||
|
echo "No packages found in /home/builder/packages"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Archive build artifacts
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zabbix-apk-packages-${{ steps.version_check.outputs.latest_version }}
|
||||||
|
path: artifacts/*.apk
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
- name: Commit and push changes
|
||||||
|
if: steps.version_check.outputs.new_version_available == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Committing and pushing changes..."
|
||||||
|
|
||||||
|
# Configure git
|
||||||
|
git config --global user.name "Zabbix APK Builder Bot"
|
||||||
|
git config --global user.email "builder@example.com"
|
||||||
|
git config --global --add safe.directory /github/workspace
|
||||||
|
|
||||||
|
# Add changes
|
||||||
|
git add zabbix/APKBUILD
|
||||||
|
|
||||||
|
# Check if there are changes to commit
|
||||||
|
if git diff --staged --quiet; then
|
||||||
|
echo "No changes to commit"
|
||||||
|
else
|
||||||
|
# Commit changes
|
||||||
|
git commit -m "Update Zabbix to version ${{ steps.version_check.outputs.latest_version }}
|
||||||
|
|
||||||
|
- Updated pkgver from ${{ steps.version_check.outputs.current_version }} to ${{ steps.version_check.outputs.latest_version }}
|
||||||
|
- Reset pkgrel to 0 for new version
|
||||||
|
- Updated checksums for new source package
|
||||||
|
|
||||||
|
Built packages:
|
||||||
|
- zabbix-agent-${{ steps.version_check.outputs.latest_version }}-r0.apk
|
||||||
|
- zabbix-proxy-${{ steps.version_check.outputs.latest_version }}-r0.apk"
|
||||||
|
|
||||||
|
# Push to test branch (create if doesn't exist)
|
||||||
|
git checkout -B test
|
||||||
|
git push origin test --force-with-lease
|
||||||
|
|
||||||
|
echo "Changes committed and pushed to test branch successfully"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Build summary
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
echo "## Build Summary" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
if [ "${{ steps.version_check.outputs.new_version_available }}" = "true" ]; then
|
||||||
|
echo "✅ **New version detected and built successfully**" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Previous version:** ${{ steps.version_check.outputs.current_version }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **New version:** ${{ steps.version_check.outputs.latest_version }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Build artifacts:** Available in workflow artifacts" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Repository:** Changes pushed to \`test\` branch" >> $GITHUB_STEP_SUMMARY
|
||||||
|
else
|
||||||
|
echo "ℹ️ **No new version available**" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "The current version is up to date with the latest upstream release." >> $GITHUB_STEP_SUMMARY
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user