mirror of
https://github.com/johndoe6345789/SparkOS.git
synced 2026-04-24 13:34:56 +00:00
Add CI/CD workflow for compiled release zip
Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
224
.github/workflows/release.yml
vendored
Normal file
224
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
name: Build and Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up build environment
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y gcc make
|
||||||
|
|
||||||
|
- name: Build init binary
|
||||||
|
run: |
|
||||||
|
echo "Building SparkOS init system..."
|
||||||
|
make init
|
||||||
|
echo "Build complete!"
|
||||||
|
|
||||||
|
- name: Verify build
|
||||||
|
run: |
|
||||||
|
echo "Verifying init binary..."
|
||||||
|
if [ ! -f init ]; then
|
||||||
|
echo "ERROR: init binary not found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
ls -lh init
|
||||||
|
file init
|
||||||
|
ldd init 2>&1 || echo "Static binary (no dependencies)"
|
||||||
|
echo "Verification complete!"
|
||||||
|
|
||||||
|
- name: Prepare release package
|
||||||
|
run: |
|
||||||
|
echo "Preparing release package..."
|
||||||
|
mkdir -p release/sparkos
|
||||||
|
|
||||||
|
# Copy compiled binary
|
||||||
|
cp init release/sparkos/
|
||||||
|
|
||||||
|
# Copy essential files
|
||||||
|
cp README.md release/sparkos/
|
||||||
|
cp LICENSE release/sparkos/
|
||||||
|
cp ARCHITECTURE.md release/sparkos/
|
||||||
|
cp CONTRIBUTING.md release/sparkos/
|
||||||
|
cp Makefile release/sparkos/
|
||||||
|
|
||||||
|
# Copy source for reference
|
||||||
|
cp -r src release/sparkos/
|
||||||
|
|
||||||
|
# Copy scripts
|
||||||
|
cp -r scripts release/sparkos/
|
||||||
|
|
||||||
|
# Copy config
|
||||||
|
cp -r config release/sparkos/
|
||||||
|
|
||||||
|
# Copy rootfs structure (without generated content)
|
||||||
|
mkdir -p release/sparkos/rootfs
|
||||||
|
cp -r rootfs/etc release/sparkos/rootfs/ 2>/dev/null || true
|
||||||
|
cp -r rootfs/root release/sparkos/rootfs/ 2>/dev/null || true
|
||||||
|
cp -r rootfs/home release/sparkos/rootfs/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# Create README for the release
|
||||||
|
cat > release/sparkos/RELEASE_README.md << 'EOF'
|
||||||
|
# SparkOS Release Package
|
||||||
|
|
||||||
|
This package contains the compiled SparkOS init system and all necessary files to run or build SparkOS.
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
- `init` - The compiled init binary (statically linked)
|
||||||
|
- `src/` - Source code for the init system
|
||||||
|
- `scripts/` - Build and setup scripts
|
||||||
|
- `config/` - Configuration files
|
||||||
|
- `rootfs/` - Root filesystem structure
|
||||||
|
- `Makefile` - Build system
|
||||||
|
- Documentation files (README.md, ARCHITECTURE.md, etc.)
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Using the Pre-built Binary
|
||||||
|
|
||||||
|
The `init` binary is already compiled and ready to use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copy to your rootfs
|
||||||
|
cp init /path/to/your/rootfs/sbin/init
|
||||||
|
chmod 755 /path/to/your/rootfs/sbin/init
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rebuilding from Source
|
||||||
|
|
||||||
|
If you need to rebuild:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build the init system
|
||||||
|
make init
|
||||||
|
|
||||||
|
# Install to rootfs
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a Bootable System
|
||||||
|
|
||||||
|
Follow the instructions in README.md to create a complete bootable system.
|
||||||
|
|
||||||
|
## System Requirements
|
||||||
|
|
||||||
|
- Linux system with kernel 3.x or later
|
||||||
|
- Busybox for shell and utilities
|
||||||
|
- For building: GCC compiler, Make
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
See README.md for complete documentation, including:
|
||||||
|
- Building instructions
|
||||||
|
- Creating bootable images
|
||||||
|
- Network configuration
|
||||||
|
- Development guidelines
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues and questions, visit: https://github.com/johndoe6345789/SparkOS
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Package prepared in release/sparkos/"
|
||||||
|
ls -la release/sparkos/
|
||||||
|
|
||||||
|
- name: Create release archive
|
||||||
|
run: |
|
||||||
|
echo "Creating release archive..."
|
||||||
|
cd release
|
||||||
|
zip -r ../sparkos-release.zip sparkos/
|
||||||
|
cd ..
|
||||||
|
echo "Archive created!"
|
||||||
|
ls -lh sparkos-release.zip
|
||||||
|
unzip -l sparkos-release.zip | head -30
|
||||||
|
|
||||||
|
- name: Upload release artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sparkos-release-${{ github.sha }}
|
||||||
|
path: sparkos-release.zip
|
||||||
|
retention-days: 90
|
||||||
|
|
||||||
|
- name: Create GitHub Release
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: sparkos-release.zip
|
||||||
|
body: |
|
||||||
|
# SparkOS Release ${{ github.ref_name }}
|
||||||
|
|
||||||
|
This release includes:
|
||||||
|
- Pre-compiled init binary (statically linked)
|
||||||
|
- Complete source code
|
||||||
|
- Build scripts and configuration
|
||||||
|
- Root filesystem structure
|
||||||
|
- Documentation
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
1. Download `sparkos-release.zip`
|
||||||
|
2. Extract the archive
|
||||||
|
3. Use the pre-built `init` binary or rebuild from source
|
||||||
|
4. Follow README.md for complete setup instructions
|
||||||
|
|
||||||
|
## Docker Image
|
||||||
|
|
||||||
|
A Docker image is also available:
|
||||||
|
```bash
|
||||||
|
docker pull ghcr.io/johndoe6345789/sparkos:${{ github.ref_name }}
|
||||||
|
```
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
See commit history for detailed changes.
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Output summary
|
||||||
|
run: |
|
||||||
|
echo "### Build and Release Summary 📦" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Status:** ✅ Success" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Init Binary:**" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
|
ls -lh init >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Release Archive:**" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
|
ls -lh sparkos-release.zip >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
|
||||||
|
echo "**Release:** Created GitHub release for ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
else
|
||||||
|
echo "**Artifact:** Uploaded as workflow artifact (available for 90 days)" >> $GITHUB_STEP_SUMMARY
|
||||||
|
fi
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Archive Contents (preview):**" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
|
unzip -l sparkos-release.zip | head -30 >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -45,6 +45,8 @@ build/
|
|||||||
init
|
init
|
||||||
*.img
|
*.img
|
||||||
*.iso
|
*.iso
|
||||||
|
*.zip
|
||||||
|
release/
|
||||||
|
|
||||||
# Temporary files
|
# Temporary files
|
||||||
/tmp/
|
/tmp/
|
||||||
|
|||||||
Reference in New Issue
Block a user