diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..196c6d9 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,212 @@ +name: Zabbix APK Builder + +on: + # Manual trigger + workflow_dispatch: + inputs: + force_build: + description: 'Force build even if version unchanged' + required: false + default: 'false' + type: boolean + + # Scheduled check for new versions (daily at 6 AM UTC) + schedule: + - cron: '0 6 * * *' + + # Trigger on pushes to main/test branch + push: + branches: [ main, test ] + paths: [ 'APKBUILD', 'Dockerfile', 'build.sh', '*.initd', '*.confd' ] + +jobs: + 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: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - name: Check for new Zabbix version + id: version-check + run: | + # Get current version from APKBUILD + CURRENT_VERSION=$(grep '^pkgver=' APKBUILD | cut -d'=' -f2) + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + echo "Current version: $CURRENT_VERSION" + + # Get latest 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) + + echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT + echo "Latest version: $LATEST_VERSION" + + # Determine if we should build + if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ] || [ "${{ inputs.force_build }}" = "true" ]; then + echo "should_build=true" >> $GITHUB_OUTPUT + echo "Build required: Version changed or force build requested" + 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' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - name: Update APKBUILD version + run: | + LATEST_VERSION="${{ needs.check-version.outputs.latest_version }}" + CURRENT_VERSION="${{ needs.check-version.outputs.current_version }}" + + if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then + echo "Updating APKBUILD from $CURRENT_VERSION to $LATEST_VERSION" + + # Update pkgver + sed -i "s/^pkgver=.*/pkgver=$LATEST_VERSION/" APKBUILD + + # Reset pkgrel to 0 for new version + sed -i "s/^pkgrel=.*/pkgrel=0/" APKBUILD + + # Clear checksums (will be regenerated during build) + sed -i '/^sha512sums="/,/^"$/c\sha512sums="\nSKIP\nSKIP\nSKIP\nSKIP\nSKIP\n"' APKBUILD + + # Commit changes + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add APKBUILD + git commit -m "Update Zabbix to version $LATEST_VERSION" || exit 0 + git push + fi + + build-packages: + needs: [check-version, update-version] + if: needs.check-version.outputs.should_build == 'true' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Zabbix packages + run: | + chmod +x build.sh + ./build.sh + + - name: List built packages + run: | + echo "Built packages:" + ls -la packages/ + + echo "Package sizes:" + du -h packages/*.apk + + - name: Upload packages as artifacts + uses: actions/upload-artifact@v4 + with: + name: zabbix-apk-packages + path: packages/*.apk + retention-days: 30 + + + + publish-to-gitea: + needs: [check-version, build-packages] + if: needs.check-version.outputs.should_build == 'true' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download packages + uses: actions/download-artifact@v4 + with: + name: zabbix-apk-packages + path: packages/ + + - name: Setup SSH for Gitea + run: | + mkdir -p ~/.ssh + echo "${{ secrets.GITEA_SSH_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H gitea-repo >> ~/.ssh/known_hosts 2>/dev/null || true + + - name: Publish to Gitea repository + run: | + # Clone or update the packages repository + git clone git@gitea-repo:mbuz/Zabbix.git gitea-repo || true + cd gitea-repo + + # Create packages directory structure + mkdir -p alpine/v3.18/main/x86_64 + + # Copy new packages + cp ../packages/*.apk alpine/v3.18/main/x86_64/ + + # Update package index (simplified) + cd alpine/v3.18/main/x86_64 + ls *.apk > PACKAGES.txt + + # Commit and push + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add . + git commit -m "Add Zabbix ${{ needs.check-version.outputs.latest_version }} packages" || exit 0 + git push + + deploy-test: + needs: [check-version, build-packages] + if: needs.check-version.outputs.should_build == 'true' && github.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: | + # 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 + " + + # 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 "✅ Package deployment test passed" diff --git a/.gitea/workflows/demo.yaml b/.gitea/workflows/demo.yaml new file mode 100644 index 0000000..394c807 --- /dev/null +++ b/.gitea/workflows/demo.yaml @@ -0,0 +1,19 @@ +name: Gitea Actions Demo +run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀 +on: [push] + +jobs: + Explore-Gitea-Actions: + 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." + - run: echo "🖥️ The workflow is now ready to test your code on the runner." + - name: List files in the repository + run: | + ls ${{ gitea.workspace }} + - run: echo "🍏 This job's status is ${{ job.status }}." \ No newline at end of file