diff --git a/.gitea/workflows/build-no-dispatch.yaml b/.gitea/workflows/build-no-dispatch.yaml deleted file mode 100644 index c00a38a..0000000 --- a/.gitea/workflows/build-no-dispatch.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: Zabbix APK Builder No Dispatch -run-name: ${{ gitea.actor }} is building Zabbix APK packages 🚀 - -on: - # Trigger on pushes to main/test branch - push: - branches: [ main, test ] - paths: [ 'zabbix-apk-builder/**' ] - -jobs: - test-trigger: - runs-on: ubuntu-latest - steps: - - name: Test workflow trigger - run: | - echo "🎉 Build workflow was triggered!" - echo "Event: ${{ gitea.event_name }}" - echo "Branch: ${{ gitea.ref }}" - echo "Repository: ${{ gitea.repository }}" - - name: Check out repository code - uses: actions/checkout@v4 - - name: List files in the repository - run: | - ls ${{ gitea.workspace }} - ls ${{ gitea.workspace }}/zabbix-apk-builder/ diff --git a/.gitea/workflows/build-simple.yaml b/.gitea/workflows/build-simple.yaml deleted file mode 100644 index 5537d89..0000000 --- a/.gitea/workflows/build-simple.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: Zabbix Build Test -run-name: ${{ gitea.actor }} is testing Zabbix build 🚀 -on: [push] - -jobs: - test-zabbix-build: - runs-on: ubuntu-latest - steps: - - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event." - - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!" - - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}." - - name: Check out repository code - uses: actions/checkout@v4 - - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner." - - name: List files in the repository - run: | - ls ${{ gitea.workspace }} - echo "Checking zabbix-apk-builder directory:" - ls ${{ gitea.workspace }}/zabbix-apk-builder/ - - run: echo "🍏 This job's status is ${{ job.status }}." diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index a5d9266..b1df38f 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -2,34 +2,155 @@ name: Zabbix APK Builder run-name: ${{ gitea.actor }} is building Zabbix APK packages 🚀 on: - # Manual trigger - workflow_dispatch: - inputs: - force_build: - description: 'Force build even if version unchanged' - required: false - default: 'false' - type: boolean - # Trigger on pushes to main/test branch push: branches: [ main, test ] paths: [ 'zabbix-apk-builder/**' ] + # Scheduled check for new versions (daily at 6 AM UTC) + schedule: + - cron: '0 6 * * *' + jobs: - # Simple test job to verify workflow triggers - test-trigger: + check-version: runs-on: ubuntu-latest + outputs: + should_build: ${{ steps.version-check.outputs.should_build }} + latest_version: ${{ steps.version-check.outputs.latest_version }} + current_version: ${{ steps.version-check.outputs.current_version }} + steps: - - name: Test workflow trigger - run: | - echo "🎉 Build workflow was triggered!" - echo "Event: ${{ gitea.event_name }}" - echo "Branch: ${{ gitea.ref }}" - echo "Repository: ${{ gitea.repository }}" - - name: Check out repository code + - name: Checkout repository uses: actions/checkout@v4 - - name: List files in the repository + + - name: Check for new Zabbix version + id: version-check run: | - ls ${{ gitea.workspace }} - ls ${{ gitea.workspace }}/zabbix-apk-builder/ + # Install jq for JSON parsing + sudo apt-get update && sudo apt-get install -y jq + + # Get current version from APKBUILD + CURRENT_VERSION=$(grep '^pkgver=' zabbix-apk-builder/APKBUILD | cut -d'=' -f2) + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + echo "Current version: $CURRENT_VERSION" + + # Get latest version from Zabbix 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) + + echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT + echo "Latest version: $LATEST_VERSION" + + # Determine if we should build (remove workflow_dispatch reference) + if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then + echo "should_build=true" >> $GITHUB_OUTPUT + echo "Build required: Version changed" + else + echo "should_build=false" >> $GITHUB_OUTPUT + echo "No build required: Version unchanged" + fi + + update-version: + needs: check-version + if: needs.check-version.outputs.should_build == 'true' && needs.check-version.outputs.current_version != needs.check-version.outputs.latest_version + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITEA_TOKEN }} + + - name: Update APKBUILD version + run: | + LATEST_VERSION="${{ needs.check-version.outputs.latest_version }}" + CURRENT_VERSION="${{ needs.check-version.outputs.current_version }}" + + echo "Updating APKBUILD from $CURRENT_VERSION to $LATEST_VERSION" + + # Update pkgver + sed -i "s/^pkgver=.*/pkgver=$LATEST_VERSION/" zabbix-apk-builder/APKBUILD + + # Reset pkgrel to 0 for new version + sed -i "s/^pkgrel=.*/pkgrel=0/" zabbix-apk-builder/APKBUILD + + # Clear checksums (will be regenerated during build) + sed -i 's/^sha512sums=.*/sha512sums="SKIP"/' zabbix-apk-builder/APKBUILD + + # Commit changes + git config --local user.email "action@gitea.com" + git config --local user.name "Gitea Action" + git add zabbix-apk-builder/APKBUILD + git commit -m "Update Zabbix to version $LATEST_VERSION" || exit 0 + git push + + build-packages: + needs: [check-version] + if: needs.check-version.outputs.should_build == 'true' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ gitea.ref }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Zabbix packages + run: | + cd zabbix-apk-builder + chmod +x build.sh + ./build.sh + + - name: List built packages + run: | + echo "Built packages:" + ls -la zabbix-apk-builder/packages/ + + echo "Package sizes:" + du -h zabbix-apk-builder/packages/*.apk || echo "No packages found" + + - name: Upload packages as artifacts + uses: actions/upload-artifact@v4 + with: + name: zabbix-apk-packages + path: zabbix-apk-builder/packages/*.apk + retention-days: 30 + + deploy-test: + needs: [check-version, build-packages] + if: needs.check-version.outputs.should_build == 'true' && gitea.ref == 'refs/heads/test' + runs-on: ubuntu-latest + + steps: + - name: Download packages + uses: actions/download-artifact@v4 + with: + name: zabbix-apk-packages + path: packages/ + + - name: Test deployment in Alpine container + run: | + echo "Testing package installation..." + + # Test agent package + docker run --rm -v $PWD/packages:/packages alpine:latest sh -c " + apk add --allow-untrusted /packages/zabbix-agent-*.apk + which zabbix_agentd + zabbix_agentd --version + " || echo "Agent test failed" + + # Test proxy package + docker run --rm -v $PWD/packages:/packages alpine:latest sh -c " + apk add --allow-untrusted /packages/zabbix-proxy-*.apk + which zabbix_proxy + zabbix_proxy --version + " || echo "Proxy test failed" + + echo "✅ Package deployment test completed"