diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index fe185e7..58ef5d0 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -158,26 +158,56 @@ jobs: chmod +x build.sh ./build.sh - - name: List built packages + - name: Verify and list built packages run: | set -euo pipefail - echo "=== Built packages ===" - if [[ -d "zabbix-apk-builder/packages" ]]; then - ls -la zabbix-apk-builder/packages/ - echo "=== Package sizes ===" - find zabbix-apk-builder/packages/ -name "*.apk" -exec du -h {} \; - else - echo "ERROR: No packages directory found" + echo "=== Verifying package build ===" + cd zabbix-apk-builder + + if [[ ! -d "packages" ]]; then + echo "❌ ERROR: packages directory does not exist" + echo "Current directory contents:" + ls -la . exit 1 fi + + # Check for packages in the standard Alpine directory structure + PACKAGE_DIRS=( + "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 uses: actions/upload-artifact@v4 with: - name: zabbix-apk-packages - path: zabbix-apk-builder/packages/*.apk + name: zabbix-apk-packages-${{ gitea.run_number }} + path: | + zabbix-apk-builder/packages/**/*.apk + !zabbix-apk-builder/packages/**/APKINDEX.tar.gz retention-days: 30 + if-no-files-found: error deploy-test: needs: [check-version, build-packages] diff --git a/zabbix-apk-builder/Dockerfile b/zabbix-apk-builder/Dockerfile index b7e5de8..077010f 100644 --- a/zabbix-apk-builder/Dockerfile +++ b/zabbix-apk-builder/Dockerfile @@ -36,34 +36,32 @@ COPY --chown=builder:builder . /home/builder/zabbix/ WORKDIR /home/builder/zabbix -# Create build script +# Create build script that just builds packages USER root -RUN cat > /usr/local/bin/build-and-copy.sh << 'EOF' +RUN cat > /usr/local/bin/build-packages.sh << 'EOF' #!/bin/sh set -e echo "Building packages as builder user..." sudo -u builder sh -c " cd /home/builder/zabbix + echo 'Generating checksums...' abuild checksum + echo 'Building packages...' abuild -r " -echo "Copying packages to output..." -find /home/builder/packages -name '*.apk' -exec cp {} /output/ \; +echo "Build complete! Packages built in /home/builder/packages:" +find /home/builder/packages -name "*.apk" -exec ls -la {} \; -# Make files readable and writable by everyone (fixes permission issues) -chmod 666 /output/*.apk 2>/dev/null || true +echo "Setting proper permissions on packages..." +chmod 644 /home/builder/packages/*.apk 2>/dev/null || true -# Also try changing ownership to a generic user ID that should work -# Use UID 1000 which is common for CI runners -chown 1000:1000 /output/*.apk 2>/dev/null || true - -echo "Build complete! Packages:" -ls -la /output/ +echo "Final package list (excluding APKINDEX):" +find /home/builder/packages -name "*.apk" -exec ls -la {} \; EOF -RUN chmod +x /usr/local/bin/build-and-copy.sh +RUN chmod +x /usr/local/bin/build-packages.sh # Set build command -CMD ["/usr/local/bin/build-and-copy.sh"] \ No newline at end of file +CMD ["/usr/local/bin/build-packages.sh"] \ No newline at end of file diff --git a/zabbix-apk-builder/build.sh b/zabbix-apk-builder/build.sh index e0ac75a..38234de 100755 --- a/zabbix-apk-builder/build.sh +++ b/zabbix-apk-builder/build.sh @@ -12,29 +12,46 @@ echo "=== Zabbix APK Builder ===" echo "Project directory: $PROJECT_DIR" echo "Output directory: $OUTPUT_DIR" -# Clean up any existing containers +# Clean up function cleanup() { - echo "Cleaning up..." - docker rm -f "$CONTAINER_NAME" 2>/dev/null || true + echo "Cleaning up container..." + docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true } trap cleanup EXIT -# Create output directory +# Clean and create output directory +rm -rf "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR" # Build Docker image echo "Building Docker image..." docker build -t "$IMAGE_NAME" "$PROJECT_DIR" -# Run the build in container -echo "Running package build..." -docker run --rm \ - --name "$CONTAINER_NAME" \ - -v "$OUTPUT_DIR:/output" \ - "$IMAGE_NAME" +# Run the build in the container +echo "Running package build in container..." +docker run --name "$CONTAINER_NAME" "$IMAGE_NAME" -echo "Build completed successfully!" -echo "To install packages:" -echo " apk add --allow-untrusted $OUTPUT_DIR/zabbix-agent-*.apk" -echo " apk add --allow-untrusted $OUTPUT_DIR/zabbix-proxy-*.apk" \ No newline at end of file +# Copy packages from container to host +echo "Copying packages from container..." +if docker cp "$CONTAINER_NAME:/home/builder/packages/." "$OUTPUT_DIR/"; then + echo "✅ Packages copied successfully" + + # Remove APKINDEX files (we only want the .apk packages) + echo "Removing repository index files..." + find "$OUTPUT_DIR" -name "APKINDEX.tar.gz" -delete 2>/dev/null || true + + # Fix permissions on copied files + echo "Fixing file permissions..." + find "$OUTPUT_DIR" -name "*.apk" -exec chmod 644 {} \; 2>/dev/null || true + + echo "Build completed successfully!" + echo "Packages are in $OUTPUT_DIR:" + find "$OUTPUT_DIR" -name "*.apk" -exec ls -la {} \; +else + echo "❌ Failed to copy packages" + echo "Checking what's in the container..." + docker exec "$CONTAINER_NAME" find /home/builder -name "*.apk" -exec ls -la {} \; 2>/dev/null || true + docker exec "$CONTAINER_NAME" ls -la /home/builder/packages/ 2>/dev/null || true + exit 1 +fi \ No newline at end of file