change: revorked and simplified workflow
This commit is contained in:
		| @@ -1,19 +1,19 @@ | |||||||
| name: Zabbix APK Builder | name: Zabbix APK Builder | ||||||
|  |  | ||||||
| on: | on: | ||||||
|   # Trigger on pushes to main/test branch |   # Trigger on pushes to main/test branch into the zabbix-apk-builder directory | ||||||
|   push: |   push: | ||||||
|     branches: [ main, test ] |     branches: [ main, test ] | ||||||
|     paths: [ 'zabbix-apk-builder/**' ] |     paths: [ 'zabbix-apk-builder/**' ] | ||||||
|  |  | ||||||
|   # Scheduled check for new versions (daily at 6 AM UTC) |   # Scheduled runs at 06:00 UTC daily | ||||||
|   schedule: |   schedule: | ||||||
|     - cron: '0 6 * * *' |     - cron: '0 6 * * *' | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   check-version: |   check-version: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     # Skip the execution if the commit message contains [ci skip] |     # Skip the execution if the commit author is the bot itself to prevent loops | ||||||
|     if: ${{ gitea.event.head_commit.author.name != 'Gitea Action' }} |     if: ${{ gitea.event.head_commit.author.name != 'Gitea Action' }} | ||||||
|     outputs: |     outputs: | ||||||
|       should_build: ${{ steps.version-check.outputs.should_build }} |       should_build: ${{ steps.version-check.outputs.should_build }} | ||||||
| @@ -30,47 +30,28 @@ jobs: | |||||||
|       run: | |       run: | | ||||||
|         set -euo pipefail |         set -euo pipefail | ||||||
|          |          | ||||||
|         # Install jq for JSON parsing (remove sudo for container environment) |         # Remove jq installation | ||||||
|         apt-get update && apt-get install -y jq |         # apt-get update && apt-get install -y jq | ||||||
|          |          | ||||||
|         # Detect trigger type |         # Detect trigger type | ||||||
|         if [[ "${{ gitea.event_name }}" == "push" ]]; then |         IS_PUSH="${{ gitea.event_name == 'push' }}" | ||||||
|           echo "is_push_trigger=true" >> "${GITHUB_OUTPUT}" |         echo "is_push_trigger=${IS_PUSH}" >> "${GITHUB_OUTPUT}" | ||||||
|           echo "Triggered by push event - force build" |  | ||||||
|         else |  | ||||||
|           echo "is_push_trigger=false" >> "${GITHUB_OUTPUT}" |  | ||||||
|           echo "Triggered by schedule - check version" |  | ||||||
|         fi |  | ||||||
|          |          | ||||||
|         # Get current version from APKBUILD |         # Get versions | ||||||
|         CURRENT_VERSION=$(grep '^pkgver=' zabbix-apk-builder/APKBUILD | cut -d'=' -f2) |         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" | \ |         LATEST_VERSION=$(curl -s "https://git.zabbix.com/rest/api/1.0/projects/ZBX/repos/zabbix/tags?limit=100" | \ | ||||||
|           jq -r '.values[].displayId' | \ |           grep -o '"displayId":"[^"]*"' | cut -d'"' -f4 | \ | ||||||
|           grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | \ |           grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | grep -v 'rc\|beta\|alpha' | \ | ||||||
|           grep -v 'rc\|beta\|alpha' | \ |           sort -V | tail -1) | ||||||
|           sort -V | \ |  | ||||||
|           tail -1) |  | ||||||
|          |          | ||||||
|  |         echo "current_version=${CURRENT_VERSION}" >> "${GITHUB_OUTPUT}" | ||||||
|         echo "latest_version=${LATEST_VERSION}" >> "${GITHUB_OUTPUT}" |         echo "latest_version=${LATEST_VERSION}" >> "${GITHUB_OUTPUT}" | ||||||
|         echo "Latest version: ${LATEST_VERSION}" |  | ||||||
|          |          | ||||||
|         # Determine if we should build based on trigger type |         # Always build on push, build on schedule if versions differ | ||||||
|         if [[ "${{ gitea.event_name }}" == "push" ]]; then |         if [[ "${IS_PUSH}" == "true" || "${CURRENT_VERSION}" != "${LATEST_VERSION}" ]]; then | ||||||
|           # Push trigger: always build to test changes |  | ||||||
|           echo "should_build=true" >> "${GITHUB_OUTPUT}" |           echo "should_build=true" >> "${GITHUB_OUTPUT}" | ||||||
|           echo "Build required: Push trigger detected" |  | ||||||
|         elif [[ "${CURRENT_VERSION}" != "${LATEST_VERSION}" ]]; then |  | ||||||
|           # Schedule trigger: only build if version changed |  | ||||||
|           echo "should_build=true" >> "${GITHUB_OUTPUT}" |  | ||||||
|           echo "Build required: New version ${LATEST_VERSION} available" |  | ||||||
|         else |         else | ||||||
|           # Schedule trigger: no new version |  | ||||||
|           echo "should_build=false" >> "${GITHUB_OUTPUT}" |           echo "should_build=false" >> "${GITHUB_OUTPUT}" | ||||||
|           echo "No build required: Version ${CURRENT_VERSION} is current" |  | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|   update-version: |   update-version: | ||||||
| @@ -125,18 +106,6 @@ jobs: | |||||||
|         token: ${{ secrets.ACCESS_TOKEN }} |         token: ${{ secrets.ACCESS_TOKEN }} | ||||||
|         ref: ${{ gitea.ref }} |         ref: ${{ gitea.ref }} | ||||||
|  |  | ||||||
|     - name: Pull latest changes if version was updated |  | ||||||
|       run: | |  | ||||||
|         set -euo pipefail |  | ||||||
|          |  | ||||||
|         # Pull any version updates that may have been committed |  | ||||||
|         if [[ "${{ needs.check-version.outputs.is_push_trigger }}" == "false" ]]; then |  | ||||||
|           echo "Scheduled build - pulling latest changes" |  | ||||||
|           git pull origin "${GITEA_REF_NAME:-main}" || true |  | ||||||
|         else |  | ||||||
|           echo "Push build - using current ref" |  | ||||||
|         fi |  | ||||||
|  |  | ||||||
|     - name: Verify build environment |     - name: Verify build environment | ||||||
|       run: | |       run: | | ||||||
|         set -euo pipefail |         set -euo pipefail | ||||||
| @@ -164,42 +133,19 @@ jobs: | |||||||
|       run: | |       run: | | ||||||
|         set -euo pipefail |         set -euo pipefail | ||||||
|      |      | ||||||
|         echo "=== Verifying package build ===" |  | ||||||
|         cd zabbix-apk-builder |         cd zabbix-apk-builder | ||||||
|          |          | ||||||
|         if [[ ! -d "packages" ]]; then |         # Verify packages exist somewhere | ||||||
|           echo "❌ ERROR: packages directory does not exist" |         PACKAGE_COUNT=$(find packages -name "*.apk" | wc -l) | ||||||
|           echo "Current directory contents:" |          | ||||||
|           ls -la . |         if [[ $PACKAGE_COUNT -eq 0 ]]; then | ||||||
|  |           echo "ERROR: No packages found" | ||||||
|  |           find packages -type f 2>/dev/null || echo "packages directory is empty" | ||||||
|           exit 1 |           exit 1 | ||||||
|         fi |         fi | ||||||
|          |          | ||||||
|         # Check for packages in the standard Alpine directory structure |         echo "Found $PACKAGE_COUNT packages:" | ||||||
|         PACKAGE_DIRS=( |         find packages -name "*.apk" -exec ls -lh {} \; | ||||||
|           "packages/*.apk" |  | ||||||
|           "packages/builder/x86_64/*.apk" |  | ||||||
|           "packages/x86_64/*.apk" |  | ||||||
|         ) |  | ||||||
|          |  | ||||||
|         FOUND_PACKAGES=false |  | ||||||
|         for pattern in "${PACKAGE_DIRS[@]}"; do |  | ||||||
|           if ls $pattern >/dev/null 2>&1; then |  | ||||||
|             FOUND_PACKAGES=true |  | ||||||
|             echo "✅ Packages found in: $(dirname $pattern)" |  | ||||||
|             ls -la $pattern |  | ||||||
|             break |  | ||||||
|           fi |  | ||||||
|         done |  | ||||||
|          |  | ||||||
|         if [[ "$FOUND_PACKAGES" == "false" ]]; then |  | ||||||
|           echo "❌ ERROR: No packages found in any expected location" |  | ||||||
|           echo "Directory structure:" |  | ||||||
|           find packages -type f -name "*.apk" 2>/dev/null || echo "No .apk files found" |  | ||||||
|           exit 1 |  | ||||||
|         fi |  | ||||||
|          |  | ||||||
|         echo "=== Package details ===" |  | ||||||
|         find packages -name "*.apk" -exec bash -c 'echo "Package: $(basename "$1")"; echo "Size: $(du -h "$1" | cut -f1)"; echo "---"' _ {} \; |  | ||||||
|  |  | ||||||
|     - name: Upload packages as artifacts |     - name: Upload packages as artifacts | ||||||
|       uses: actions/upload-artifact@v3 |       uses: actions/upload-artifact@v3 | ||||||
| @@ -225,60 +171,33 @@ jobs: | |||||||
|       run: | |       run: | | ||||||
|         set -euo pipefail |         set -euo pipefail | ||||||
|          |          | ||||||
|         echo "=== Testing package installation ===" |         # Find packages | ||||||
|  |         AGENT_PKG=$(find packages -name "zabbix-agent-*.apk" | head -1) | ||||||
|  |         PROXY_PKG=$(find packages -name "zabbix-proxy-*.apk" | head -1) | ||||||
|          |          | ||||||
|         # Debug: Show what was actually downloaded |         # Test function | ||||||
|         echo "Downloaded packages:" |         test_package() { | ||||||
|         ls -la packages/ |           local pkg="$1" | ||||||
|         echo "Builder directory:" |           local binary="$2" | ||||||
|         ls -la packages/builder/ 2>/dev/null || echo "No builder directory" |  | ||||||
|         echo "x86_64 directory:" |  | ||||||
|         ls -la packages/builder/x86_64/ 2>/dev/null || echo "No x86_64 directory" |  | ||||||
|         echo "All .apk files:" |  | ||||||
|         find packages/ -name "*.apk" -type f 2>/dev/null || echo "No .apk files found" |  | ||||||
|            |            | ||||||
|         # Use known paths - packages are uploaded from zabbix-apk-builder/packages/**/*.apk |           if [[ -f "$pkg" ]]; then | ||||||
|         # and downloaded to packages/, so they should be in packages/builder/x86_64/ |             echo "Testing $(basename "$pkg")..." | ||||||
|         PACKAGE_DIR="packages/builder/x86_64" |  | ||||||
|         AGENT_PKG="$PACKAGE_DIR/zabbix-agent-7.4.2-r0.apk" |  | ||||||
|         PROXY_PKG="$PACKAGE_DIR/zabbix-proxy-7.4.2-r0.apk" |  | ||||||
|          |  | ||||||
|         # Test agent package |  | ||||||
|         if [[ -f "$AGENT_PKG" ]]; then |  | ||||||
|           echo "Testing agent package at: $AGENT_PKG" |  | ||||||
|           echo "File size: $(du -h "$AGENT_PKG")" |  | ||||||
|            |  | ||||||
|           # Create container, copy package, install and test |  | ||||||
|             CONTAINER_ID=$(docker run -d alpine:latest sleep 30) |             CONTAINER_ID=$(docker run -d alpine:latest sleep 30) | ||||||
|           docker cp "$AGENT_PKG" "$CONTAINER_ID:/$(basename "$AGENT_PKG")" |             docker cp "$pkg" "$CONTAINER_ID:/$(basename "$pkg")" | ||||||
|           docker exec "$CONTAINER_ID" sh -c " |             if docker exec "$CONTAINER_ID" sh -c " | ||||||
|             ls -la /$(basename "$AGENT_PKG") |               apk add --allow-untrusted /$(basename "$pkg") >/dev/null 2>&1 | ||||||
|             apk add --allow-untrusted /$(basename "$AGENT_PKG") |               which $binary >/dev/null 2>&1 | ||||||
|             which zabbix_agentd |               $binary --version >/dev/null 2>&1 | ||||||
|             zabbix_agentd --version |             "; then | ||||||
|           " && echo "✅ Agent test passed" || echo "❌ Agent test failed" |               echo "SUCCESS: $(basename "$pkg") test passed" | ||||||
|  |             else | ||||||
|  |               echo "FAIL: $(basename "$pkg") test failed" | ||||||
|  |             fi | ||||||
|             docker rm -f "$CONTAINER_ID" >/dev/null |             docker rm -f "$CONTAINER_ID" >/dev/null | ||||||
|           else |           else | ||||||
|           echo "⚠️ Agent package not found at $AGENT_PKG" |             echo "ERROR: Package not found: $pkg" | ||||||
|           fi |           fi | ||||||
|  |         } | ||||||
|          |          | ||||||
|         # Test proxy package   |         test_package "$AGENT_PKG" "zabbix_agentd" | ||||||
|         if [[ -f "$PROXY_PKG" ]]; then |         test_package "$PROXY_PKG" "zabbix_proxy" | ||||||
|           echo "Testing proxy package at: $PROXY_PKG" |  | ||||||
|           echo "File size: $(du -h "$PROXY_PKG")" |  | ||||||
|            |  | ||||||
|           # Create container, copy package, install and test |  | ||||||
|           CONTAINER_ID=$(docker run -d alpine:latest sleep 30) |  | ||||||
|           docker cp "$PROXY_PKG" "$CONTAINER_ID:/$(basename "$PROXY_PKG")" |  | ||||||
|           docker exec "$CONTAINER_ID" sh -c " |  | ||||||
|             ls -la /$(basename "$PROXY_PKG") |  | ||||||
|             apk add --allow-untrusted /$(basename "$PROXY_PKG") |  | ||||||
|             which zabbix_proxy |  | ||||||
|             zabbix_proxy --version |  | ||||||
|           " && echo "✅ Proxy test passed" || echo "❌ Proxy test failed" |  | ||||||
|           docker rm -f "$CONTAINER_ID" >/dev/null |  | ||||||
|         else |  | ||||||
|           echo "⚠️ Proxy package not found at $PROXY_PKG" |  | ||||||
|         fi |  | ||||||
|          |  | ||||||
|         echo "✅ Package deployment test completed" |  | ||||||
		Reference in New Issue
	
	Block a user