diff --git a/.forgejo/workflows/build-packages.yml b/.forgejo/workflows/build-packages.yml index 2b6063e..0d1798b 100644 --- a/.forgejo/workflows/build-packages.yml +++ b/.forgejo/workflows/build-packages.yml @@ -1,5 +1,20 @@ name: Build bootc Package +# ⚠️ IMPORTANT: Each repository needs its own FORGEJO_TOKEN secret! +# +# To set up this workflow in a new repository: +# 1. Go to repository settings: https://git.raines.xyz/OWNER/REPO/settings +# 2. Find "Secrets" or "Repository secrets" section +# 3. Add new secret: +# - Name: FORGEJO_TOKEN +# - Value: Your Personal Access Token with repo and write:packages permissions +# 4. The token needs these scopes: +# - repo (Full control of private repositories) +# - write:packages (Write packages) +# - read:packages (Read packages) +# +# This workflow will fail with "FORGEJO_TOKEN is not set" if the secret is missing. + on: push: branches: [ main, master ] @@ -21,7 +36,7 @@ jobs: - name: Setup build environment run: | apt update -y - apt install -y git curl pkg-config build-essential + apt install -y git curl pkg-config build-essential gnupg # Install Rust using rustup to get the latest version curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y @@ -30,6 +45,20 @@ jobs: # Verify Rust version rustc --version cargo --version + + # Add Forgejo repository for libostree packages + echo "Adding Forgejo repository for libostree packages..." + curl -fsSL https://git.raines.xyz/api/packages/robojerk/debian/repository.key | gpg --dearmor -o /usr/share/keyrings/forgejo-robojerk.gpg + echo "deb [signed-by=/usr/share/keyrings/forgejo-robojerk.gpg] https://git.raines.xyz/api/packages/robojerk/debian noble main" | tee /etc/apt/sources.list.d/forgejo-robojerk.list + + # Update package lists and install libostree packages + apt update -y + echo "Installing libostree packages from Forgejo repository..." + apt install -y libostree-dev=2025.2-1~noble1 libostree-1-1=2025.2-1~noble1 + + echo "✅ libostree packages installed successfully" + echo "libostree-dev version: $(dpkg-query -W -f='${Version}' libostree-dev)" + echo "libostree-1-1 version: $(dpkg-query -W -f='${Version}' libostree-1-1)" - name: Checkout repository manually run: | @@ -38,18 +67,81 @@ jobs: cp -r /tmp/bootc-deb/* . cp -r /tmp/bootc-deb/.* . 2>/dev/null || true - - name: Setup build environment for bootc + - name: Install curl and jq for API testing + run: | + apt-get update -y + apt-get install -y curl jq + + - name: Debug - Check ACCESS_TOKEN (safe) + run: | + echo "=== Debugging ACCESS_TOKEN ===" + echo "Token exists: ${{ secrets.ACCESS_TOKEN != '' }}" + echo "Token length: ${#ACCESS_TOKEN}" + echo "Token first 4 chars: $(echo "$ACCESS_TOKEN" | cut -c1-4)..." + echo "Token last 4 chars: ...$(echo "$ACCESS_TOKEN" | rev | cut -c1-4 | rev)" + echo "Environment variable name: ACCESS_TOKEN" + echo "Available secrets:" + env | grep -i token || echo "No token env vars found" + env: + ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} + + - name: Test API endpoints + run: | + echo "=== Testing Forgejo API endpoints with ACCESS_TOKEN ===" + + # Test 1: Check Forgejo version and capabilities + echo "Testing Forgejo version..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/version" | jq . 2>/dev/null || echo "Version endpoint failed" + + echo "" + echo "=== Testing user info ===" + + # Test 2: Check user info + echo "Testing user info..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/user" | jq . 2>/dev/null || echo "User endpoint failed" + + echo "" + echo "=== Testing repository info ===" + + # Test 3: Check repository info + echo "Testing repository info..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/repos/robojerk/bootc-deb" | jq . 2>/dev/null || echo "Repository endpoint failed" + + echo "" + echo "=== Testing package registry endpoints ===" + + # Test 4: Check if package registry is enabled + echo "Testing package registry availability..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/user/packages" | jq . 2>/dev/null || echo "User packages endpoint failed" + + echo "" + echo "=== Testing repository packages ===" + + # Test 5: Check repository packages + echo "Testing repository packages..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/repos/robojerk/bootc-deb/packages" | jq . 2>/dev/null || echo "Repository packages endpoint failed" + + echo "" + echo "=== Testing Debian package registry ===" + + # Test 6: Check available package types + echo "Testing Debian package registry..." + curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/packages/robojerk/debian" | jq . 2>/dev/null || echo "Debian packages endpoint failed" + + - name: Install additional build dependencies run: | apt update -y - apt install -y git curl pkg-config build-essential - - # Install Rust using rustup to get the latest version - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - source ~/.cargo/env - - # Verify Rust version - rustc --version - cargo --version + apt install -y libglib2.0-dev libgpgme-dev libssl-dev libcurl4-gnutls-dev \ + libarchive-dev libfuse3-dev libsystemd-dev libmount-dev \ + libselinux1-dev libavahi-client-dev libavahi-glib-dev \ + libsoup-3.0-dev gobject-introspection gtk-doc-tools \ + docbook-xml docbook-xsl xsltproc gjs libglib2.0-doc - name: Clone bootc source run: | @@ -102,6 +194,52 @@ jobs: echo "Built bootc packages:" ls -la bootc-${BOOTC_VERSION}/../*.deb + - name: Upload to Debian Package Registry + id: debian_upload + shell: bash + run: | + echo "=== Attempting Debian Package Registry upload with ACCESS_TOKEN ===" + + # Check if ACCESS_TOKEN is available + if [ -z "${{ secrets.ACCESS_TOKEN }}" ]; then + echo "❌ ACCESS_TOKEN is not set" + exit 1 + fi + echo "✅ ACCESS_TOKEN is set" + + # List contents for debugging + echo "Built packages:" + ls -la bootc-${BOOTC_VERSION}/../*.deb || echo "No .deb files found" + + for deb_file in bootc-${BOOTC_VERSION}/../*.deb; do + if [ -f "$deb_file" ]; then + echo "Uploading $deb_file to Debian Package Registry..." + filename=$(basename "$deb_file") + echo "File: $filename" + + # Get HTTP code directly using curl -w (same as libostree-dev) + 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/noble/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/noble/main/upload" 2>&1 + exit 1 + fi + fi + done + - name: Create release assets run: | mkdir -p release-assets @@ -118,4 +256,18 @@ jobs: ls -la release-assets/*.deb 2>/dev/null || echo "No packages found" >> release-assets/BUILD_SUMMARY.txt echo "Release assets created:" - ls -la release-assets/ \ No newline at end of file + ls -la release-assets/ + + - name: Success Summary + run: | + echo "=== Upload Summary ===" + echo "✅ All bootc packages uploaded successfully to Forgejo Debian Package Registry" + echo "✅ Packages automatically assigned to repository by Forgejo" + echo "" + echo "📦 Packages should now be available at:" + echo " https://git.raines.xyz/robojerk/bootc-deb/packages" + echo "" + echo "🎯 Next steps:" + echo " - Verify packages appear in repository packages page" + echo " - Test package installation on Ubuntu Noble systems" + echo " - Users can install with: sudo apt install bootc" \ No newline at end of file diff --git a/PACKAGING_SUMMARY.md b/PACKAGING_SUMMARY.md deleted file mode 100644 index 061b687..0000000 --- a/PACKAGING_SUMMARY.md +++ /dev/null @@ -1,175 +0,0 @@ -# Bootc Debian Packaging - Complete Solution - -## 🎯 Goal Achieved - -Successfully created **shareable .deb package(s)** for bootc on Debian/Ubuntu systems with complete tooling for distribution. - -## 📦 What's Included - -### 1. **Compatibility Patch** ✅ -- **File**: `bootc-libostree-compatibility.patch` -- **Fix**: Comments out `set_null_log()` call that's incompatible with current ostree Rust bindings -- **Location**: Applied to `crates/lib/src/cli.rs` -- **Status**: Ready for sharing - -### 2. **Complete Debian Packaging** ✅ -- **debian/control**: Package metadata, dependencies, and descriptions -- **debian/rules**: Build automation with cargo integration -- **debian/changelog**: Package version history -- **debian/copyright**: License information -- **Status**: Production-ready packaging structure - -### 3. **Automated Build Tooling** ✅ -- **build-bootc-deb.sh**: One-command package building -- **install-bootc.sh**: Automated installation with dependency handling -- **Status**: Fully automated build and install process - -### 4. **Documentation** ✅ -- **README.md**: Comprehensive usage instructions -- **PACKAGING_SUMMARY.md**: This summary document -- **Status**: Complete documentation for users and contributors - -## 🔧 Technical Details - -### Patch Contents - -**Simple Explanation**: The patch comments out a function call that doesn't exist in the current ostree library version, allowing bootc to build successfully. - -```rust -// Before (causes build failure): -ostree::SePolicy::set_null_log(); - -// After (compatible): -// TODO: Re-enable when ostree Rust bindings support set_null_log() -// ostree::SePolicy::set_null_log(); -``` - -**What it does**: -- Comments out a `set_null_log()` function call that's not available in current ostree Rust bindings -- This prevents build failures while maintaining core functionality -- The function was likely for debugging/logging and isn't essential for bootc operation -- Includes a TODO comment for future re-enablement when ostree library supports it - -### Package Information -- **Package Name**: bootc -- **Version**: 1.5.1-1~noble1 -- **Target**: Ubuntu Noble (24.04 LTS) -- **Dependencies**: libostree-1-1 (>= 2025.2), systemd, podman|docker.io, skopeo -- **Architecture**: any (Rust binary) - -### Build Process -1. **Prerequisites Check**: Validates libostree 2025.2-1 and build tools -2. **Source Preparation**: Copies bootc source and applies patch -3. **Cargo Build**: Builds bootc with release optimization -4. **Package Creation**: Creates proper .deb package -5. **Testing**: Validates package installation -6. **Distribution**: Copies results to packaging directory - -## 🚀 Usage Instructions - -### For Package Builders -```bash -cd /opt/Projects/bootc-deb-packaging - -# First, ensure libostree 2025.2-1 is available (if needed) -./libostree-dev_noble_backport.sh - -# Then build the bootc package -./build-bootc-deb.sh -``` - -### For End Users -```bash -# Install the built package -sudo ./install-bootc.sh - -# Or manually -sudo dpkg -i bootc_1.5.1-1~noble1_*.deb -sudo apt-get install -f -``` - -### For Distribution -- **Direct Installation**: Share .deb files directly -- **Repository Hosting**: Host in apt repository -- **CI/CD Integration**: Use build script in automated pipelines - -## 🔗 Integration with apt-ostree - -This packaging is specifically designed for your Aurora-style workflow: - -1. **OCI Image Compatibility**: Works with apt-ostree generated images -2. **Container Tool Integration**: Compatible with podman, skopeo -3. **System Integration**: Proper Ubuntu Noble integration -4. **Version Compatibility**: Requires libostree 2025.2-1 (automated backport available) - -### Dependency Management -- **libostree-dev_noble_backport.sh**: Automated script to backport libostree 2025.2-1 from Ubuntu Questing to Noble -- **Safety Features**: VM detection, disk space checks, cleanup on exit -- **Complete Process**: Downloads source, builds packages, installs dependencies -- **Integration Ready**: Works seamlessly with the bootc packaging workflow - -## 📁 File Structure - -``` -/opt/Projects/bootc-deb-packaging/ -├── bootc-libostree-compatibility.patch # The compatibility fix -├── build-bootc-deb.sh # Automated build script -├── install-bootc.sh # Installation script -├── libostree-dev_noble_backport.sh # Dependency backport script -├── README.md # Usage documentation -├── PACKAGING_SUMMARY.md # This summary -└── debian/ # Debian packaging files - ├── control # Package metadata - ├── rules # Build rules - ├── changelog # Version history - └── copyright # License info -``` - -## ✅ Verification - -### Build Verification -- ✅ Patch applies cleanly -- ✅ Cargo build succeeds -- ✅ Debian package creation works -- ✅ Package installation test passes - -### Runtime Verification -- ✅ bootc binary works correctly -- ✅ All commands functional -- ✅ Proper system integration -- ✅ Dependency resolution works - -## 🔄 Maintenance - -### Version Updates -1. Update version in `debian/changelog` -2. Update version in `build-bootc-deb.sh` -3. Test build process -4. Update documentation if needed - -### Compatibility Updates -1. Modify patch if new issues arise -2. Update dependencies in `debian/control` -3. Test on clean Ubuntu Noble systems -4. Update documentation - -## 🎉 Success Metrics - -- ✅ **Shareable .deb files**: Created and tested -- ✅ **Compatibility patch**: Applied and working -- ✅ **Automated tooling**: Build and install scripts -- ✅ **Complete documentation**: README and usage guides -- ✅ **Production ready**: Proper Debian packaging structure -- ✅ **Integration tested**: Works with apt-ostree workflow - -## 🚀 Next Steps - -1. **Test the build process** on your system -2. **Share the packaging** with other users -3. **Integrate with CI/CD** for automated builds -4. **Create repository** for easy distribution -5. **Test with apt-ostree** OCI images - ---- - -**Status**: ✅ **COMPLETE** - All goals achieved successfully! \ No newline at end of file diff --git a/README.md b/README.md index f15a7bb..17dc6e0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Bootc Debian Package Builder -A minimal repository containing the patch and deb packaging tooling to build bootc .deb packages for Debian/Ubuntu systems with libostree 2025.2-1 compatibility. +A complete solution for building and distributing bootc .deb packages for Debian/Ubuntu systems with libostree 2025.2-1 compatibility. This repository provides automated CI/CD workflows that build bootc packages and upload them to a Forgejo package repository. ## 🎯 What This Repository Contains @@ -8,9 +8,10 @@ A minimal repository containing the patch and deb packaging tooling to build boo - **Debian Packaging**: Complete debian/ directory structure - **Build Script**: Automatically clones bootc source and builds .deb - **Install Script**: Installs the built package with dependency handling -- **CI/CD**: Automated build pipeline for bootc packages +- **CI/CD**: Automated build pipeline with package upload to Forgejo +- **Package Repository Integration**: Automatic upload to Forgejo package registry -**Note**: The libostree 2025.2-1 backport is now maintained in a separate repository: [libostree-dev](https://git.raines.xyz/robojerk/libostree-dev) +**Note**: The libostree 2025.2-1 packages are available as Debian packages in the Forgejo repository: [libostree-dev](https://git.raines.xyz/robojerk/libostree-dev) ## 🚀 Quick Start @@ -18,6 +19,7 @@ A minimal repository containing the patch and deb packaging tooling to build boo 1. **Basic build tools**: `git`, `cargo`, `rustc`, `pkg-config` 2. **Ubuntu Noble (24.04 LTS)** system +3. **libostree 2025.2-1 packages** from Forgejo repository ### Complete Workflow @@ -26,14 +28,24 @@ A minimal repository containing the patch and deb packaging tooling to build boo git clone bootc-deb cd bootc-deb -# Step 1: Install libostree 2025.2-1 backport (if not already installed) -# See: https://git.raines.xyz/robojerk/libostree-dev +# Step 1: Install libostree 2025.2-1 packages from Forgejo +curl -fsSL https://git.raines.xyz/api/packages/robojerk/debian/repository.key | sudo gpg --dearmor -o /usr/share/keyrings/forgejo-robojerk.gpg +echo "deb [signed-by=/usr/share/keyrings/forgejo-robojerk.gpg] https://git.raines.xyz/api/packages/robojerk/debian noble main" | sudo tee /etc/apt/sources.list.d/forgejo-robojerk.list +sudo apt update +sudo apt install -y libostree-dev=2025.2-1~noble1 libostree-1-1=2025.2-1~noble1 # Step 2: Build the bootc .deb package -./build-bootc-deb.sh +./build.sh # Step 3: Install the package -sudo ./install-bootc.sh +sudo ./install.sh +``` + +### Alternative: Test Installation + +```bash +# Test that libostree packages can be installed +./test-libostree-install.sh ``` ## 📁 Repository Structure @@ -41,17 +53,17 @@ sudo ./install-bootc.sh ``` bootc-deb/ ├── bootc-libostree-compatibility.patch # The compatibility fix -├── build-bootc-deb.sh # Build script (clones + builds) -├── install-bootc.sh # Installation script +├── build.sh # Build script (clones + builds) +├── install.sh # Installation script +├── test-libostree-install.sh # Test libostree package installation +├── test-debian-upload.sh # Test package upload functionality ├── libostree-dev_noble_backport.sh # Legacy backport script (see separate repo) ├── README.md # This file -├── PACKAGING_SUMMARY.md # Detailed summary ├── .forgejo/ # CI/CD workflows │ ├── workflows/ -│ │ ├── build-packages.yml # Full build pipeline +│ │ ├── build-packages.yml # Full build pipeline with package upload │ │ ├── test-build.yml # Test workflow -│ │ ├── update-readme.yml # README update workflow -│ │ └── config.yml # CI/CD configuration +│ │ └── update-readme.yml # README update workflow └── debian/ # Debian packaging files ├── control # Package metadata ├── rules # Build rules @@ -63,12 +75,13 @@ bootc-deb/ ### The Complete Process -1. **Requires libostree 2025.2-1** from the separate backport repository +1. **Installs libostree 2025.2-1** from Forgejo package repository 2. **Clones bootc source** from GitHub (v1.5.1) 3. **Applies our patch** to fix libostree compatibility 4. **Installs build dependencies** automatically 5. **Builds the .deb package** using dpkg-buildpackage -6. **Copies results** to the repository directory +6. **Uploads packages** to Forgejo package registry +7. **Creates release assets** for manual download ### The Patch @@ -91,18 +104,18 @@ This repository is designed to work on any Ubuntu Noble system: # On any PC in the world: git clone bootc-deb cd bootc-deb -# Install libostree 2025.2-1 from separate repo # Step 1: Get required dependencies -./build-bootc-deb.sh # Step 2: Build bootc package -sudo ./install-bootc.sh # Step 3: Install the package + +# Install from Forgejo package repository +curl -fsSL https://git.raines.xyz/api/packages/robojerk/debian/repository.key | sudo gpg --dearmor -o /usr/share/keyrings/forgejo-robojerk.gpg +echo "deb [signed-by=/usr/share/keyrings/forgejo-robojerk.gpg] https://git.raines.xyz/api/packages/robojerk/debian noble main" | sudo tee /etc/apt/sources.list.d/forgejo-robojerk.list +sudo apt update +sudo apt install -y bootc ``` The complete workflow will: -- ✅ Install libostree 2025.2-1 from separate repository -- ✅ Clone bootc source from GitHub -- ✅ Apply the compatibility patch -- ✅ Install all build dependencies -- ✅ Build the .deb package -- ✅ Install the package +- ✅ Install libostree 2025.2-1 from Forgejo repository +- ✅ Install bootc from Forgejo repository +- ✅ All dependencies handled automatically ## 📦 Package Information @@ -118,15 +131,17 @@ This packaging is specifically designed for Aurora-style workflow: 1. **OCI Image Compatibility**: Works with apt-ostree generated images 2. **Container Tool Integration**: Compatible with podman, skopeo 3. **System Integration**: Proper Ubuntu Noble integration -4. **Version Compatibility**: Requires libostree 2025.2-1 (automated backport included) +4. **Version Compatibility**: Requires libostree 2025.2-1 (available in Forgejo repository) + +### Package Repository Integration + +Both libostree and bootc packages are available from the Forgejo package repository: -### Dependency Management -The libostree 2025.2-1 backport is now maintained in a separate repository: - **Repository**: [libostree-dev](https://git.raines.xyz/robojerk/libostree-dev) -- **Automated backporting** of libostree 2025.2-1 from Ubuntu Questing -- **Safety features** including VM detection and disk space checks -- **Complete build process** with proper Debian packaging -- **CI/CD integration** for automated builds +- **Package Registry**: [Forgejo Packages](https://git.raines.xyz/robojerk/-/packages) +- **Automated builds** with CI/CD integration +- **Complete dependency chain** from libostree to bootc +- **Easy installation** via standard apt commands ## 🛠️ Manual Steps (if needed) @@ -155,44 +170,44 @@ dpkg-buildpackage -us -uc -b ### Updating Versions 1. Update version in `debian/changelog` -2. Update version in `build-bootc-deb.sh` +2. Update version in `build.sh` 3. Update version in `.forgejo/workflows/build-packages.yml` 4. Test build process ### Updating the Patch 1. Modify `bootc-libostree-compatibility.patch` -2. Test with `./build-bootc-deb.sh` +2. Test with `./build.sh` 3. Update documentation if needed ### CI/CD Automation -This repository includes Forgejo Actions workflows for automated package building: +This repository includes Forgejo Actions workflows for automated package building and distribution: -- **`.forgejo/workflows/build-packages.yml`**: Full build pipeline for bootc package +- **`.forgejo/workflows/build-packages.yml`**: Full build pipeline with package upload to Forgejo - **`.forgejo/workflows/test-build.yml`**: Lightweight testing for development and PRs -- **`.forgejo/workflows/config.yml`**: CI/CD configuration settings +- **`.forgejo/workflows/update-readme.yml`**: README update workflow #### Automated Build Process 1. **Triggers**: Push to main/master, pull requests, and releases -2. **bootc Package**: Builds bootc with libostree 2025.2-1 dependency (from separate repo) -4. **Artifacts**: Uploads .deb packages as build artifacts -5. **Releases**: Creates release assets when a new release is published +2. **Dependencies**: Installs libostree 2025.2-1 from Forgejo repository +3. **Build**: Builds bootc with libostree compatibility patch +4. **Upload**: Automatically uploads packages to Forgejo package registry +5. **Release Assets**: Creates downloadable artifacts for manual installation + +#### Package Repository Integration + +- **Automatic Upload**: Packages are uploaded to Forgejo after successful builds +- **Repository Association**: Packages are automatically associated with the repository +- **Dependency Resolution**: Users can install directly via apt with proper dependencies +- **Version Management**: Each build creates a new package version #### Manual Workflow Triggers You can manually trigger builds in the Forgejo Actions tab: - **Test Build**: Quick validation of bootc build process -- **Full Build**: Complete bootc package build - -#### Automatic README Updates - -The CI/CD automatically updates the README with download links to the latest packages: -- **Trigger**: After successful package builds -- **Content**: Direct download links to .deb files -- **Instructions**: Installation commands for users -- **Timestamp**: Shows when packages were last built +- **Full Build**: Complete bootc package build with upload ## 🎉 Success! @@ -205,15 +220,28 @@ After installation, you'll have: ## 📋 Troubleshooting ### Build Issues -- **Missing libostree 2025.2-1**: Install from [libostree-dev repository](https://git.raines.xyz/robojerk/libostree-dev) -- **Build dependencies**: The script installs them automatically +- **Missing libostree 2025.2-1**: Install from Forgejo repository using the commands in Quick Start +- **Build dependencies**: The workflow installs them automatically - **Git clone issues**: Check internet connection -- **Backport build failures**: See the [libostree-dev repository](https://git.raines.xyz/robojerk/libostree-dev) for troubleshooting +- **Package upload failures**: Verify FORGEJO_TOKEN secret is set correctly ### Runtime Issues - **Missing runtime dependencies**: Run `sudo apt-get install -f` - **AppArmor denials**: Monitor with `sudo aa-logprof` +- **Package installation issues**: Ensure Forgejo repository is properly configured + +### Testing + +Use the provided test scripts to verify functionality: + +```bash +# Test libostree package installation +./test-libostree-install.sh + +# Test package upload functionality +./test-debian-upload.sh +``` --- -**Perfect for distributing bootc as .deb packages on any Ubuntu Noble system!** 🎉 \ No newline at end of file +**Perfect for distributing bootc as .deb packages on any Ubuntu Noble system with automated CI/CD!** 🎉 \ No newline at end of file