Files
MetalOS/.github/workflows/release.yml
2025-12-28 20:54:40 +00:00

255 lines
7.4 KiB
YAML

name: Build and Release
on:
push:
tags:
- 'v*' # Trigger on version tags like v1.0.0, v2.1.3, etc.
workflow_dispatch: # Allow manual triggering
jobs:
build-and-release:
runs-on: ubuntu-latest
permissions:
contents: write # Required for creating releases
actions: write # Required for uploading artifacts
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install build dependencies
run: |
set -e # Exit on any error
sudo apt-get update
sudo apt-get install -y \
build-essential \
cmake \
nasm \
qemu-system-x86 \
ovmf \
mtools \
xorriso
- name: Configure CMake
run: |
mkdir -p build
cd build
cmake ..
- name: Build bootloader and kernel
run: |
cd build
cmake --build .
- name: Create bootable image
run: |
cd build
cmake --build . --target image
- name: Prepare release directory
run: |
set -e # Exit on any error
mkdir -p release
# Copy the bootable disk image (required)
if [ -f build/build/metalos.img ]; then
cp build/build/metalos.img release/
echo "✓ Copied metalos.img"
else
echo "Error: build/build/metalos.img not found!"
exit 1
fi
# Copy bootloader if it exists (required)
if [ -f build/bootloader/bootx64.efi ]; then
cp build/bootloader/bootx64.efi release/
echo "✓ Copied bootx64.efi"
else
echo "Error: build/bootloader/bootx64.efi not found!"
exit 1
fi
# Copy kernel if it exists (required)
if [ -f build/kernel/metalos.bin ]; then
cp build/kernel/metalos.bin release/
echo "✓ Copied metalos.bin"
else
echo "Error: build/kernel/metalos.bin not found!"
exit 1
fi
# Copy QEMU instructions
cp QEMU_INSTRUCTIONS.md release/
echo "✓ Copied QEMU_INSTRUCTIONS.md"
# Create README for the release
cat > release/README.md << 'EOF'
# MetalOS Release Package
This package contains a compiled release of MetalOS.
## Contents
- **metalos.img** - Bootable disk image (use with QEMU or write to USB)
- **bootx64.efi** - UEFI bootloader (standalone)
- **metalos.bin** - Kernel binary
- **QEMU_INSTRUCTIONS.md** - Detailed instructions for testing with QEMU on Windows, macOS, and Linux
- **README.md** - This file
## Quick Start
### Testing with QEMU
The easiest way to test MetalOS is using QEMU. See **QEMU_INSTRUCTIONS.md** for detailed setup instructions for your operating system.
**Quick command (Linux/macOS with QEMU and OVMF installed):**
```bash
qemu-system-x86_64 \
-bios /usr/share/OVMF/OVMF_CODE.fd \
-drive format=raw,file=metalos.img \
-m 512M \
-serial stdio
```
**Quick command (Windows with QEMU installed):**
```cmd
"C:\Program Files\qemu\qemu-system-x86_64.exe" ^
-bios "C:\Program Files\qemu\share\edk2-x86_64-code.fd" ^
-drive format=raw,file=metalos.img ^
-m 512M ^
-serial stdio
```
### Creating a Bootable USB
⚠️ **WARNING**: This will erase all data on the USB drive!
```bash
# Linux/macOS (replace /dev/sdX with your USB device)
sudo dd if=metalos.img of=/dev/sdX bs=4M status=progress
sync
```
## System Requirements
- **Architecture**: AMD64 (x86-64)
- **Boot Mode**: UEFI
- **Minimum RAM**: 512MB
- **Target Hardware**: Radeon RX 6600 GPU (for full functionality)
## Development Status
MetalOS is currently under active development. See the repository for current status and roadmap.
## More Information
- Repository: https://github.com/johndoe6345789/MetalOS
- Documentation: See the docs/ directory in the repository
- Issues: https://github.com/johndoe6345789/MetalOS/issues
## License
See LICENSE file in the repository.
EOF
echo "✓ Created README.md"
# List contents
echo ""
echo "Release directory contents:"
ls -lh release/
- name: Create release archive
run: |
set -e # Exit on any error
cd release
zip -r ../metalos-release.zip .
cd ..
echo ""
echo "Release archive created:"
ls -lh metalos-release.zip
# Show archive contents
echo ""
echo "Archive contents:"
unzip -l metalos-release.zip
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: metalos-release
path: metalos-release.zip
retention-days: 90
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
files: |
metalos-release.zip
release/metalos.img
body: |
## MetalOS Release ${{ github.ref_name }}
This is an automated release of MetalOS.
### What's Included
- **metalos-release.zip** - Complete release package with bootable image and QEMU instructions
- **metalos.img** - Bootable disk image (standalone)
### Testing with QEMU
Download `metalos-release.zip`, extract it, and follow the instructions in `QEMU_INSTRUCTIONS.md` for your operating system (Windows, macOS, or Linux).
### Quick Start (Linux/macOS)
```bash
qemu-system-x86_64 \
-bios /usr/share/OVMF/OVMF_CODE.fd \
-drive format=raw,file=metalos.img \
-m 512M \
-serial stdio
```
### Quick Start (Windows)
```cmd
"C:\Program Files\qemu\qemu-system-x86_64.exe" ^
-bios "C:\Program Files\qemu\share\edk2-x86_64-code.fd" ^
-drive format=raw,file=metalos.img ^
-m 512M ^
-serial stdio
```
For detailed setup instructions, see `QEMU_INSTRUCTIONS.md` in the release package.
### System Requirements
- AMD64 (x86-64) architecture
- UEFI boot mode
- 512MB+ RAM
- QEMU with OVMF/EDK2 firmware for testing
See the [repository](https://github.com/johndoe6345789/MetalOS) for more information.
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload individual artifacts for inspection
uses: actions/upload-artifact@v4
with:
name: metalos-components
path: |
release/metalos.img
release/bootx64.efi
release/metalos.bin
release/QEMU_INSTRUCTIONS.md
release/README.md
retention-days: 30