235 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			235 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| 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
 | |
| 
 | |
|     - name: Create release
 | |
|       if: github.ref == 'refs/heads/main'
 | |
|       uses: softprops/action-gh-release@v1
 | |
|       with:
 | |
|         tag_name: "v${{ needs.check-version.outputs.latest_version }}"
 | |
|         name: "Zabbix ${{ needs.check-version.outputs.latest_version }} APK Packages"
 | |
|         body: |
 | |
|           Automated build of Zabbix ${{ needs.check-version.outputs.latest_version }} packages for Alpine Linux.
 | |
|           
 | |
|           ## Packages
 | |
|           - `zabbix-agent-${{ needs.check-version.outputs.latest_version }}-r0.apk` - Monitoring agent
 | |
|           - `zabbix-proxy-${{ needs.check-version.outputs.latest_version }}-r0.apk` - Network proxy
 | |
|           - `zabbix-${{ needs.check-version.outputs.latest_version }}-r0.apk` - Meta package
 | |
|           
 | |
|           ## Installation
 | |
|           ```bash
 | |
|           apk add --allow-untrusted zabbix-agent-${{ needs.check-version.outputs.latest_version }}-r0.apk
 | |
|           rc-update add zabbix-agent default
 | |
|           rc-service zabbix-agent start
 | |
|           ```
 | |
|         files: packages/*.apk
 | |
|         draft: false
 | |
|         prerelease: false
 | |
| 
 | |
|   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"
 |