deb-mock/.forgejo/workflows/build-debian.yml
robojerk 345fce2218
Some checks failed
Build and Publish Debian Package / Build Debian Package (push) Failing after 1m20s
fix CI/CD: simplify build-debian.yml workflow and remove duplicate release.yml
2025-08-04 02:30:37 +00:00

151 lines
No EOL
5.6 KiB
YAML

name: Build and Publish Debian Package
on:
push:
tags: [ 'v*' ]
workflow_dispatch:
jobs:
build-deb:
name: Build Debian Package
runs-on: ubuntu-latest
steps:
- name: Checkout code
run: |
git clone https://git.raines.xyz/robojerk/deb-mock.git /tmp/deb-mock
cp -r /tmp/deb-mock/* .
cp -r /tmp/deb-mock/.* . 2>/dev/null || true
- name: Set up Python
run: |
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3-pip
- name: Install build dependencies
run: |
# Configure APT to use your cache server
echo 'Acquire::http::Proxy "http://192.168.1.79:3142";' | sudo tee /etc/apt/apt.conf.d/99proxy
echo 'Acquire::https::Proxy "http://192.168.1.79:3142";' | sudo tee -a /etc/apt/apt.conf.d/99proxy
sudo apt update
sudo apt install -y build-essential devscripts debhelper dh-python python3-all python3-setuptools
sudo apt install -y sbuild schroot debootstrap
- name: Create mock directories
run: |
sudo mkdir -p /var/lib/mock/chroots /var/cache/mock
sudo chown -R $USER:$USER /var/lib/mock /var/cache/mock
- name: Set up virtual environment
run: |
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
- name: Install dependencies
run: |
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: Install mock in development mode
run: |
source venv/bin/activate
pip install -e .
- name: Run tests
run: |
source venv/bin/activate
python -m pytest tests/ -v --cov=deb_mock --cov-report=xml
- name: Build Debian package
run: |
echo "=== Building Debian Package ==="
# Get version from setup.py
VERSION=$(python3 -c "import re; print(re.search(r'version=[\"\']([^\"\']+)[\"\']', open('setup.py').read()).group(1))")
echo "Building version: $VERSION"
# Check if we need to update changelog
CURRENT_CHANGELOG_VERSION=$(head -1 debian/changelog | sed 's/mock (\([^-]*\)-[^)]*).*/\1/')
echo "Current changelog version: $CURRENT_CHANGELOG_VERSION"
echo "Target version: $VERSION"
if [ "$CURRENT_CHANGELOG_VERSION" != "$VERSION" ]; then
echo "Updating changelog to version $VERSION"
dch --newversion "$VERSION-1" --distribution unstable "Build from CI/CD"
else
echo "Changelog already at correct version"
fi
# Build the package
echo "Building package with dpkg-buildpackage..."
dpkg-buildpackage -us -uc -b
# List built packages
echo "Built packages:"
ls -la ../mock_*.deb ../mock_*.changes 2>/dev/null || echo "No packages found"
ls -la ../mock_*.dsc 2>/dev/null || echo "No .dsc file (binary-only package)"
- name: Upload to Forgejo Debian Package Registry
if: startsWith(github.ref, 'refs/tags/')
run: |
echo "=== Uploading to Forgejo Debian Package Registry ==="
# Check if ACCESS_TOKEN is available
if [ -z "${{ secrets.ACCESS_TOKEN }}" ]; then
echo "❌ ACCESS_TOKEN is not set - skipping upload"
echo "To enable uploads, add ACCESS_TOKEN secret to repository settings"
exit 0
fi
echo "✅ ACCESS_TOKEN is set"
# List packages for upload
echo "Built packages:"
ls -la ../mock_*.deb 2>/dev/null || echo "No .deb files found"
for deb_file in ../mock_*.deb; do
if [ -f "$deb_file" ]; then
echo "Uploading $deb_file to Forgejo Debian Package Registry..."
filename=$(basename "$deb_file")
echo "File: $filename"
# Upload using Forgejo's API
http_code=$(curl -s -o /dev/null -w "%{http_code}" \
--user "robojerk:${{ secrets.ACCESS_TOKEN }}" \
--upload-file "$deb_file" \
"https://git.raines.xyz/api/packages/robojerk/debian/pool/unstable/main/upload")
echo "HTTP Response Code: $http_code"
if [ "$http_code" = "201" ]; then
echo "✅ Debian Package Registry upload SUCCESS for $deb_file"
elif [ "$http_code" = "409" ]; then
echo "➡️ INFO: Package $deb_file already exists (HTTP 409 Conflict)"
else
echo "❌ Debian Package Registry upload FAILED for $deb_file (HTTP $http_code)"
# Show verbose output for debugging failures
curl -v -i --user "robojerk:${{ secrets.ACCESS_TOKEN }}" \
--upload-file "$deb_file" \
"https://git.raines.xyz/api/packages/robojerk/debian/pool/unstable/main/upload" 2>&1
exit 1
fi
fi
done
- name: Success Summary
if: startsWith(github.ref, 'refs/tags/')
run: |
echo "=== Upload Summary ==="
echo "✅ Mock package uploaded successfully to Forgejo Debian Package Registry"
echo "✅ Package automatically assigned to repository by Forgejo"
echo ""
echo "📦 Package should now be available at:"
echo " https://git.raines.xyz/robojerk/-/packages"
echo ""
echo "🎯 Next steps:"
echo " - Verify package appears in repository packages page"
echo " - Test package installation on Debian/Ubuntu systems"
echo " - Users can install with: sudo apt install mock"