Split core game contribs #10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| make clean || true | |
| make all | |
| - name: Verify executables | |
| run: | | |
| # Check that executables were created | |
| ls -la conquer conqrun | |
| file conquer conqrun | |
| - name: Basic functionality test | |
| run: | | |
| # Test that executables can run (help/version) | |
| ./conquer -h || echo "conquer help test completed" | |
| ./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 artifacts | |
| 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 |