commit: e86db47b6ee40d68e26866dd15e8637f64d6d778
parent 724c6cca134300ae8f28c90cca047995c1346eb2
Author: fosslinux <fosslinux@aussies.space>
Date: Wed, 10 May 2023 07:30:52 +0000
Merge pull request #286 from fosslinux/ci-length
split CI into three (as a temporary solution)
Diffstat:
4 files changed, 118 insertions(+), 38 deletions(-)
diff --git a/.github/workflows/bwrap.yml b/.github/workflows/bwrap.yml
@@ -12,8 +12,8 @@ on:
- master
jobs:
- run:
- name: Run under bubblewrap
+ sysa:
+ name: Run sysa under bubblewrap
runs-on: ubuntu-latest
steps:
- name: Install bubblewrap
@@ -45,8 +45,78 @@ jobs:
sysc/distfiles
key: cache-${{ hashFiles('sys*/*/sources') }}
- name: Run bootstrap
- id: bootstrap
- run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2
+ run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass1
+ - name: Archive created packages
+ if: failure() # archive failed builds progress
+ uses: actions/upload-artifact@v3
+ with:
+ name: packages
+ path: tmp/sysa/usr/src/repo/**
+ - name: Tar sysc_image
+ run: tar -cf sysc_image.tar tmp/sysa/sysc_image/
+ - name: Archive sysc_image
+ uses: actions/upload-artifact@v3
+ with:
+ name: internal_sysc_image
+ path: sysc_image.tar
+
+ sysc1:
+ name: Run sysc (part 1) under bubblewrap
+ needs: sysa
+ runs-on: ubuntu-latest
+ steps:
+ - name: Install bubblewrap
+ run: sudo apt install bubblewrap
+ - name: Checkout repo
+ uses: actions/checkout@v3
+ with:
+ submodules: recursive
+ # There is a strange bug(?) in nongnu, when you clone a git repository
+ # against a commit != HEAD with depth=1, it errors out.
+ fetch-depth: 0
+ - name: Get sysc_image
+ uses: actions/download-artifact@v3
+ with:
+ name: internal_sysc_image
+ - name: Extract sysc_image
+ run: tar -xf sysc_image.tar
+ - name: Run bootstrap
+ run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass2
+ - name: Archive created packages
+ if: always() # archive failed builds progress
+ uses: actions/upload-artifact@v3
+ with:
+ name: internal_packages_sysc1
+ path: tmp/sysa/sysc_image/usr/src/repo/**
+
+ sysc2:
+ name: Run sysc (part 2) under bubblewrap
+ needs: sysc1
+ runs-on: ubuntu-latest
+ steps:
+ - name: Install bubblewrap
+ run: sudo apt install bubblewrap
+ - name: Checkout repo
+ uses: actions/checkout@v3
+ with:
+ submodules: recursive
+ # There is a strange bug(?) in nongnu, when you clone a git repository
+ # against a commit != HEAD with depth=1, it errors out.
+ fetch-depth: 0
+ - name: Get sysc_image
+ uses: actions/download-artifact@v3
+ with:
+ name: internal_sysc_image
+ - name: Extract sysc_image
+ run: tar -xf sysc_image.tar
+ # By doing this, all packages that have already been compiled will come from the preseed.
+ - name: Get packages repo progress
+ uses: actions/download-artifact@v3
+ with:
+ name: internal_packages_sysc1
+ path: tmp/sysa/sysc_image/usr/src/repo-preseeded/
+ - name: Run bootstrap
+ run: ./rootfs.py --bwrap --external-sources --build-kernels --preserve --cores 2 --internal-ci pass3
- name: Archive created packages
if: always() # archive failed builds
uses: actions/upload-artifact@v3
diff --git a/rootfs.py b/rootfs.py
@@ -15,6 +15,7 @@ you can run bootstap inside chroot.
import argparse
import os
+import shutil
from sysa import SysA
from sysc import SysC
@@ -35,6 +36,7 @@ def create_configuration_file(args):
config.write(f"UPDATE_CHECKSUMS={args.update_checksums}\n")
config.write(f"JOBS={args.cores}\n")
config.write("DISK=sda1\n")
+ config.write(f"INTERNAL_CI={args.internal_ci}\n")
if (args.bare_metal or args.qemu) and not args.kernel:
config.write("KERNEL_BOOTSTRAP=True\n")
else:
@@ -84,6 +86,7 @@ def main():
help="Path to prebuilt binary packages.", nargs=None)
parser.add_argument("--early-preseed",
help="Skip early stages of live-bootstrap.", nargs=None)
+ parser.add_argument("--internal-ci", help="INTERNAL for github CI")
# QEMU arguments
parser.add_argument("-q", "--qemu", help="Use QEMU",
@@ -177,42 +180,46 @@ print(shutil.which('chroot'))
run('sudo', 'env', '-i', 'PATH=/bin', chroot_binary, system_a.tmp_dir, init)
elif args.bwrap:
- system_c.prepare(create_disk_image=False)
- system_a.prepare(create_initramfs=False)
+ if not args.internal_ci or args.internal_ci == "pass1":
+ system_c.prepare(create_disk_image=False)
+ system_a.prepare(create_initramfs=False)
- arch = stage0_arch_map.get(args.arch, args.arch)
- init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', arch, 'kaem-optional-seed')
- run('bwrap', '--unshare-user',
- '--uid', '0',
- '--gid', '0',
- '--unshare-net',
- '--clearenv',
- '--setenv', 'PATH', '/usr/bin',
- '--bind', system_a.tmp_dir, '/',
- '--dir', '/dev',
- '--dev-bind', '/dev/null', '/dev/null',
- '--dev-bind', '/dev/zero', '/dev/zero',
- '--dev-bind', '/dev/random', '/dev/random',
- '--dev-bind', '/dev/urandom', '/dev/urandom',
- init)
+ arch = stage0_arch_map.get(args.arch, args.arch)
+ init = os.path.join(os.sep, 'bootstrap-seeds', 'POSIX', arch, 'kaem-optional-seed')
+ run('bwrap', '--unshare-user',
+ '--uid', '0',
+ '--gid', '0',
+ '--unshare-net',
+ '--clearenv',
+ '--setenv', 'PATH', '/usr/bin',
+ '--bind', system_a.tmp_dir, '/',
+ '--dir', '/dev',
+ '--dev-bind', '/dev/null', '/dev/null',
+ '--dev-bind', '/dev/zero', '/dev/zero',
+ '--dev-bind', '/dev/random', '/dev/random',
+ '--dev-bind', '/dev/urandom', '/dev/urandom',
+ init)
- run('bwrap', '--unshare-user',
- '--uid', '0',
- '--gid', '0',
- '--unshare-net' if args.external_sources else None,
- '--clearenv',
- '--setenv', 'PATH', '/usr/bin',
- '--bind', system_a.tmp_dir + "/sysc_image", '/',
- '--dir', '/dev',
- '--dev-bind', '/dev/null', '/dev/null',
- '--dev-bind', '/dev/zero', '/dev/zero',
- '--dev-bind', '/dev/random', '/dev/random',
- '--dev-bind', '/dev/urandom', '/dev/urandom',
- '--tmpfs', '/dev/shm',
- '--proc', '/proc',
- '--bind', '/sys', '/sys',
- '--tmpfs', '/tmp',
- '/init')
+ if not args.internal_ci or args.internal_ci == "pass2" or args.internal_ci == "pass3":
+ shutil.copy2(os.path.join('sysa', 'bootstrap.cfg'),
+ os.path.join('tmp', 'sysa', 'sysc_image', 'usr', 'src', 'bootstrap.cfg'))
+ run('bwrap', '--unshare-user',
+ '--uid', '0',
+ '--gid', '0',
+ '--unshare-net' if args.external_sources else None,
+ '--clearenv',
+ '--setenv', 'PATH', '/usr/bin',
+ '--bind', system_a.tmp_dir + "/sysc_image", '/',
+ '--dir', '/dev',
+ '--dev-bind', '/dev/null', '/dev/null',
+ '--dev-bind', '/dev/zero', '/dev/zero',
+ '--dev-bind', '/dev/random', '/dev/random',
+ '--dev-bind', '/dev/urandom', '/dev/urandom',
+ '--tmpfs', '/dev/shm',
+ '--proc', '/proc',
+ '--bind', '/sys', '/sys',
+ '--tmpfs', '/tmp',
+ '/init')
elif args.bare_metal:
if args.kernel:
diff --git a/sysc/init b/sysc/init
@@ -78,6 +78,7 @@ DESTDIR=${DESTDIR}
DISTFILES=${DISTFILES}
SRCDIR=${SRCDIR}
MAKEJOBS=${MAKEJOBS}
+INTERNAL_CI=${INTERNAL_CI}
EOF
exec ./run.sh
diff --git a/sysc/run2.sh b/sysc/run2.sh
@@ -120,6 +120,8 @@ build python-3.8.16
build python-3.11.1
+[ "${INTERNAL_CI}" = "pass2" ] && exit 0
+
build gcc-10.4.0
build binutils-2.38 pass2.sh