name: Release on: push: tags: - 'v*' jobs: test: name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.22' - name: Test cloud-init run: cd cloud-init && go test ./... -count=1 - name: Test update agent run: cd update && go test ./... -count=1 build-binaries: name: Build Binaries runs-on: ubuntu-latest needs: test strategy: matrix: include: - goos: linux goarch: amd64 suffix: linux-amd64 - goos: linux goarch: arm64 suffix: linux-arm64 steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.22' - name: Get version id: version run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - name: Build cloud-init run: | CGO_ENABLED=0 GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} \ go build -ldflags="-s -w -X main.version=${{ steps.version.outputs.version }}" \ -o kubesolo-cloudinit-${{ matrix.suffix }} ./cmd/ working-directory: cloud-init - name: Build update agent run: | CGO_ENABLED=0 GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} \ go build -ldflags="-s -w -X main.version=${{ steps.version.outputs.version }}" \ -o kubesolo-update-${{ matrix.suffix }} . working-directory: update - name: Upload binaries uses: actions/upload-artifact@v4 with: name: binaries-${{ matrix.suffix }} path: | cloud-init/kubesolo-cloudinit-${{ matrix.suffix }} update/kubesolo-update-${{ matrix.suffix }} build-iso: name: Build ISO (amd64) runs-on: ubuntu-latest needs: build-binaries steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.22' - name: Install build deps run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ cpio gzip genisoimage isolinux syslinux syslinux-common \ syslinux-utils xorriso xz-utils wget squashfs-tools \ dosfstools e2fsprogs fdisk parted bsdtar - name: Build ISO run: make iso - name: Build disk image run: make disk-image - name: Get version id: version run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT - name: Upload ISO uses: actions/upload-artifact@v4 with: name: iso-amd64 path: output/*.iso - name: Upload disk image uses: actions/upload-artifact@v4 with: name: disk-image-amd64 path: output/*.img release: name: Create Release runs-on: ubuntu-latest needs: [build-binaries, build-iso] steps: - uses: actions/checkout@v4 - name: Get version id: version run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Compute checksums run: | cd artifacts find . -type f \( -name "*.iso" -o -name "*.img" -o -name "kubesolo-*" \) \ -exec sha256sum {} \; | sort > ../SHA256SUMS cd .. - name: Create release uses: softprops/action-gh-release@v2 with: name: KubeSolo OS v${{ steps.version.outputs.version }} body: | ## KubeSolo OS v${{ steps.version.outputs.version }} ### Downloads - **ISO** — Boot from CD/USB, ideal for testing - **Disk Image** — Raw disk with A/B partitions + GRUB - **Binaries** — Standalone cloud-init and update agent ### Verify ``` sha256sum -c SHA256SUMS ``` ### Quick Start ```bash # Boot in QEMU qemu-system-x86_64 -m 1024 -smp 2 -enable-kvm \ -cdrom kubesolo-os-${{ steps.version.outputs.version }}.iso \ -nographic ``` files: | artifacts/**/*.iso artifacts/**/*.img artifacts/**/kubesolo-* SHA256SUMS draft: false prerelease: false