Skip to content

Finish rework of the melange build system #16

Finish rework of the melange build system

Finish rework of the melange build system #16

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
test:
name: Build and Test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libncurses-dev build-essential make
- name: Build project
run: |
# Test that the project builds correctly
cd gpl-release
make clean || true
make
- name: Verify executables
run: |
# Check that executables were created
cd gpl-release
ls -la conquer conqrun conqsort conqps
file conquer conqrun conqsort conqps
- name: Basic functionality test
run: |
# Test that executables can run (help/version)
./gpl-release/conquer -h || echo "conquer help test completed"
./gpl-release/conqrun -h || echo "conqrun help test completed"
package-apk:
name: Build APK Package (Alpine/Melange)
needs: test
runs-on: ubuntu-latest
# Run on all pushes to master, but only basic check on PRs
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker
uses: docker/setup-buildx-action@v3
- name: Build APK package with Melange
run: |
chmod +x scripts/build-melange.sh
scripts/build-melange.sh
- name: Verify APK package
run: |
# Check that the APK was created
echo "=== APK Package Verification ==="
find packages/ -name "*.apk" -type f -exec ls -lh {} \;
# Show package contents (APK-aware method)
APK_FILE=$(find packages/ -name "*.apk" | head -1)
if [ -n "$APK_FILE" ]; then
echo "=== APK Contents (first 20 files) ==="
# Use tar with error suppression and proper pipe handling
tar -tzf "$APK_FILE" 2>/dev/null | head -20 || {
echo "=== APK Contents (alternative method) ==="
# Alternative: just show basic structure
tar -tzf "$APK_FILE" 2>&1 | grep -v "APK-TOOLS.checksum" | head -20 | cat
}
echo "=== APK Metadata ==="
# Extract and show package info
tar -Oxzf "$APK_FILE" .PKGINFO 2>/dev/null | head -10 || echo "No .PKGINFO found"
fi
- name: Upload APK artifacts
uses: actions/upload-artifact@v4
if: github.ref == 'refs/heads/master'
with:
name: conquer-apk-${{ github.sha }}
path: packages/**/*.apk
retention-days: 90
package-deb:
name: Build DEB Package (Debian)
needs: test
runs-on: ubuntu-latest
# Note: Using Ubuntu runner but Docker provides Debian environment
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker
uses: docker/setup-buildx-action@v3
- name: Build DEB package
run: |
chmod +x scripts/build-debian.sh
scripts/build-debian.sh
- name: Verify DEB package
run: |
# Check that the DEB was created
echo "=== DEB Package Verification ==="
find packages/ -name "*.deb" -type f -exec ls -lh {} \;
# Show package info and contents
DEB_FILE=$(find packages/debian/ -name "*.deb" | head -1)
if [ -n "$DEB_FILE" ]; then
echo "=== Package Info ==="
dpkg-deb --info "$DEB_FILE"
echo ""
echo "=== Package Contents ==="
dpkg-deb --contents "$DEB_FILE" | head -20
fi
- name: Upload DEB atrifacts
uses: actions/upload-artifact@v4
if: github.ref == 'refs/heads/master'
with:
name: conquer-deb-${{ github.sha }}
path: packages/**/*.deb
retention-days: 90
# Lightweight verification for PRs
verify-pr:
name: PR Package Verification
needs: [package-apk, package-deb]
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: PR Build Summary
run: |
echo "✅ APK package build completed successfully"
echo "✅ DEB package build completed successfully"
echo ""
echo "This PR successfully builds both package formats."
echo "Full testing and artifact upload will occur when merged to master."
# Full integration testing for master branch
test-packages:
name: Integration Testing (Master Only)
needs: [package-apk, package-deb]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
strategy:
matrix:
test: [deb-install, apk-inspect]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download DEB package
if: matrix.test == 'deb-install'
uses: actions/download-artifact@v4
with:
name: conquer-deb-${{ github.sha }}
path: packages/
- name: Test DEB package installation
if: matrix.test == 'deb-install'
run: |
# Find and install the DEB package
DEB_FILE=$(find packages/ -name "*.deb" | head -1)
if [ -n "$DEB_FILE" ]; then
echo "=== Testing DEB Installation ==="
echo "Package: $DEB_FILE"
# Install dependencies
sudo apt-get update
sudo apt-get install -y libncurses6 ncurses-base
# Install the package
sudo dpkg -i "$DEB_FILE" || true
sudo apt-get install -f -y
# Test installation
echo "=== Verifying Installation ==="
which conquer
which conqrun
# Test executables
conquer -h || echo "conquer help test completed"
conqrun -h || echo "conqrun help test completed"
# Show installed files and locations
echo "=== Installed Files ==="
dpkg -L conquer | grep -E "(bin|lib)" | head -10
# Verify file permissions
ls -la /usr/bin/conquer /usr/bin/conqrun
ls -la /usr/lib/conquer/
fi
- name: Download APK package
if: matrix.test == 'apk-inspect'
uses: actions/download-artifact@v4
with:
name: conquer-apk-${{ github.sha }}
path: packages/
- name: Inspect APK package
if: matrix.test == 'apk-inspect'
run: |
# Find and inspect the APK package
APK_FILE=$(find packages/ -name "*.apk" | head -1)
if [ -n "$APK_FILE" ]; then
echo "=== APK Package Inspection ==="
echo "Package: $APK_FILE"
echo "Size: $(ls -lh "$APK_FILE" | awk '{print $5}')"
# Extract contents to temporary directory
mkdir -p /tmp/apk-extract
cd /tmp/apk-extract
# Extract with error suppression
echo "=== Extracting APK ==="
tar -xzf "$APK_FILE" 2>/dev/null || {
echo "Standard extraction had warnings, trying alternative..."
tar -xzf "$APK_FILE" 2>&1 | grep -v "APK-TOOLS.checksum" || true
}
echo "=== APK Structure ==="
find . -type f | grep -E "(bin|lib)" | head -15
echo "=== Executables ==="
find . -name "conquer*" -type f -exec ls -la {} \; 2>/dev/null || true
echo "=== Game Data Files ==="
find . -path "*/lib/conquer/*" -type f -exec ls -la {} \; 2>/dev/null || true
echo "=== Package Metadata ==="
if [ -f ".PKGINFO" ]; then
echo "--- .PKGINFO ---"
head -10 .PKGINFO
fi
fi
release:
name: Create Release
needs: [test-packages]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[release]')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v4.12-${{ github.sha }}
release_name: Conquer v4.12 (${{ github.sha }})
body: |
Automated release of Conquer v4.12
**Packages included:**
- 📦 APK for Alpine Linux (melange)
- 📦 DEB for Debian/Ubuntu
**Installation:**
- APK: `apk add --allow-untrusted conquer-*.apk`
- DEB: `dpkg -i conquer_*.deb`
draft: false
prerelease: false