Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
272 changes: 272 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,272 @@
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
118 changes: 118 additions & 0 deletions AUTHORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# AUTHORS

This file lists the contributors to the Conquer game project.

## Original Authors (1987-1988)

**Ed Barlow** <barlowedward@hotmail.com>
*Original creator and lead developer*
- Created the initial version of Conquer
- Distributed via USENET comp.sources.games (October 26, 1987)
- Developed the core game mechanics and engine
- Copyright holder (1987-1988)

**Adam Bryant** <adb@usa.com>
*Co-author and maintainer*
- Co-developer of the original game
- Maintained and enhanced the code through version 4
- Handled community feedback and bug fixes
- Active in USENET community discussions
- Copyright holder (1987-1988)

## Additional Original Contributors (1989)
** Martin Forssen (MaF)** <d8forma@dtek.chalmers.se> (historical)> / <maf@recordedfuture.com> (current)
*PostScript utilities author*

- Created psmap.c - PostScript map generator for Conquer
- Developed CONQPS.INFO documentation and utilities
- Created PostScript visualization components
- Original "Feel free to hack" licensing approach
- Copyright holder for PostScript utilities (1989)
- Granted GPL v3 relicensing permission (2025)

## Historical Context

The original Conquer was developed during the late 1980s when source code was commonly distributed through USENET newsgroups. Both authors contributed significantly to early computer gaming and open source distribution methods.

## Modern Maintainers and Contributors

### GPL Relicensing and Preservation

**Vejeta (Juan Manuel Méndez Rey)** <vejeta@gmail.com>
*GPL relicensing coordinator and current maintainer*
- Initiated the relicensing effort in 2006
- Successfully contacted both original authors for permissions
- Extracted and compiled code from original USENET posts
- Documented the complete history and relicensing process
- Current repository maintainer (2006-present)
- Created comprehensive documentation and legal framework

### Related Projects and Forks

**quixadhal (Dread Quixadhal)** - https://github.com/quixadhal
*Alternative maintainer and code preservation*
- Maintains a parallel version at https://github.com/quixadhal/conquer
- Preserves the original codebase and documentation
- Provides alternative access point for the historical code

## Community Contributors

### Historical Community
- **USENET community** (comp.sources.games, rec.games.empire)
- **Early Unix gaming community** (1987-1990s)
- Various bug reporters and testers from the original USENET distributions

### Modern Community
- **Debian Legal mailing list** contributors who provided licensing guidance
- **GNU Savannah** community members who assisted with project hosting
- **Barrapunto** community members who provided technical advice

## Special Acknowledgments

### Legal and Technical Advisors
- **Debian Legal mailing list** - Provided crucial guidance on GPL relicensing procedures
- **Free Software Foundation** - Licensing framework and philosophy
- **GNU Savannah** - Initial hosting and project management support

### Historical Preservation
- **Google Groups/USENET archives** - Preserved original discussions and source code
- **Internet Archive/Wayback Machine** - Historical website preservation
- **Various gaming historians and archivists** - Documented early computer gaming history

## Project Roles

### Original Development (1987-1988)
- **Ed Barlow**: Game design, core engine, initial implementation
- **Adam Bryant**: Co-development, maintenance, community management

### GPL Relicensing Era (2006-2011)
- **Juan Manuel Méndez Rey (Vejeta)**: Legal coordination, author contact, documentation
- **Ed Barlow**: Permission granting, historical clarification
- **Adam Bryant**: Permission confirmation, copyright clarification
- **Martin Forssen**: PostScript utilities, relicensing permission (2025)

### Current Era (2011-present)
- **Vejeta**: Primary maintainer, documentation, community coordination
- **quixadhal**: Alternative preservation, parallel maintenance

## Contributing

This project represents a successful example of preserving legacy software through proper legal channels and community collaboration. The relicensing effort demonstrates how historical software can be made available to modern audiences while respecting original copyright holders.

### For New Contributors
- See `CONTRIBUTING.md` for guidelines (if available)
- Review `HISTORY.md` for project background
- Check `RELICENSING-PERMISSIONS.md` for legal framework
- Follow GNU General Public License v3.0+ terms

## Contact Information

- **Current Maintainer**: vejeta@gmail.com
- **Project Repository**: https://github.com/vejeta/conquer
- **Historical Reference**: http://vejeta.com/historia-del-conquer/

---

This file follows the GNU Coding Standards and Free Software Foundation guidelines for contributor attribution in free software projects.

**Last Updated**: September 13, 2025
Loading