diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 436e9de30..6f8b55bd2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,6 +55,8 @@ jobs: build: name: Build ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }} ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }} runs-on: [ self-hosted, latest ] + env: + PARALLEL: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.parallel == 'true' || github.event_name != 'workflow_dispatch' && inputs.parallel == true }} strategy: fail-fast: false outputs: @@ -126,7 +128,7 @@ jobs: id: parallel run: | - if [ "${{ ((github.event.inputs.parallel == 'true' && github.event_name == 'workflow_dispatch') || (github.ref_name != 'main' && github.event_name != 'workflow_dispatch')) }}" == "true" ]; then + if [ "$PARALLEL" == "true" ]; then echo "BR2_PER_PACKAGE_DIRECTORIES=y" >> output/.config MAKE="make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))" echo "Building in parallel with -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))" diff --git a/.github/workflows/generic-x86-build.yml b/.github/workflows/generic-x86-build.yml new file mode 100644 index 000000000..424ad3723 --- /dev/null +++ b/.github/workflows/generic-x86-build.yml @@ -0,0 +1,79 @@ +name: Generic X86 GitHub Build + +on: + push: + pull_request: + +jobs: + build: + if: github.repository == 'kernelkit/infix' + name: Infix x86_64 + runs-on: ubuntu-latest + + steps: + - name: Install build dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + bc binutils build-essential bzip2 cpio \ + diffutils file findutils git gzip \ + libncurses-dev libssl-dev perl patch \ + python3 rsync sed tar unzip wget \ + autopoint bison flex autoconf automake \ + mtools + + - name: Checkout infix repo + uses: actions/checkout@v4 + with: + repository: ${{ github.repository }} + ref: ${{ github.ref }} + fetch-depth: 0 + submodules: recursive + + - name: Set Build Variables + id: vars + run: | + echo "INFIX_BUILD_ID=${{ github.run_id }}" >> $GITHUB_OUTPUT + echo "dir=Infix-x86_64" >> $GITHUB_OUTPUT + echo "tgz=Infix-x86_64.tar.gz" >> $GITHUB_OUTPUT + echo "flv=_minimal" >> $GITHUB_OUTPUT + + - name: Configure x86_64_minimal + run: | + make x86_64_minimal_defconfig + + - name: Unit Test x86_64 + run: | + make test-unit + + - name: Build x86_64_minimal + run: | + make + + - name: Check SBOM + run: | + make legal-info + + - name: Build test spec + run: | + make test-spec + + - name: Report Build Size + run: | + du -sh . + du -sh output + du -sh dl || true + ls -l output/images/ + + - name: Prepare Artifact + run: | + cd output/ + mv images Infix-x86_64 + ln -s Infix-x86_64 images + tar cfz Infix-x86_64.tar.gz Infix-x86_64 + + - uses: actions/upload-artifact@v4 + with: + path: output/Infix-x86_64.tar.gz + name: artifact-x86_64 + diff --git a/.github/workflows/trigger.yml b/.github/workflows/trigger.yml index 125a6162f..8fe5d0ba7 100644 --- a/.github/workflows/trigger.yml +++ b/.github/workflows/trigger.yml @@ -1,4 +1,4 @@ -name: Self Trigger +name: Kernelkit Trigger on: pull_request: @@ -11,6 +11,7 @@ on: jobs: build-x86_64: + if: startsWith(github.repository, 'kernelkit/') uses: ./.github/workflows/build.yml with: target: "x86_64" @@ -18,6 +19,7 @@ jobs: flavor: "_minimal" build-aarch64: + if: startsWith(github.repository, 'kernelkit/') uses: ./.github/workflows/build.yml with: target: "aarch64" @@ -25,6 +27,7 @@ jobs: flavor: "_minimal" test-run-x86_64: + if: startsWith(github.repository, 'kernelkit/') needs: build-x86_64 uses: ./.github/workflows/test.yml with: @@ -32,6 +35,7 @@ jobs: name: "infix" test-publish-x86_64: + if: startsWith(github.repository, 'kernelkit/') needs: test-run-x86_64 uses: ./.github/workflows/publish.yml diff --git a/src/statd/python/yanger/host.py b/src/statd/python/yanger/host.py index 1fcceb905..3ce272574 100644 --- a/src/statd/python/yanger/host.py +++ b/src/statd/python/yanger/host.py @@ -159,6 +159,18 @@ def run(self, cmd, default=None, log=True): return out + def exists(self, path): + if not self._run(("ls", path), default="", log=False): + return False + + if self.capdir: + dirname = os.path.join(self.capdir, "rootfs", os.path.dirname(path[1:])) + filname = os.path.join(self.capdir, "rootfs", path[1:]) + os.makedirs(dirname, exist_ok=True) + open(filname, "w", encoding='utf-8').close() # Create empty file + + return True + def read(self, path): out = self._run(("cat", path), default="", log=False) @@ -199,6 +211,10 @@ def run(self, cmd, default=None, log=True): common.LOG.error(f"No recording found for run \"{path}\"") raise + def exists(self, path): + path = os.path.join(self.replaydir, "rootfs", path[1:]) + return os.path.isfile(path) + def read(self, path): path = os.path.join(self.replaydir, "rootfs", path[1:]) try: diff --git a/src/statd/python/yanger/ietf_hardware.py b/src/statd/python/yanger/ietf_hardware.py index 70a4aa297..94a74f658 100644 --- a/src/statd/python/yanger/ietf_hardware.py +++ b/src/statd/python/yanger/ietf_hardware.py @@ -61,18 +61,16 @@ def usb_port_components(systemjson): path = usb_port["path"] if os.path.basename(path) == "authorized_default": - # TODO: Untestable. Should be done via the host API - if os.path.exists(path): - with open(path, "r") as f: - names.append(usb_port["name"]) - data = int(f.readline().strip()) - enabled = "unlocked" if data == 1 else "locked" - port["state"] = {} - port["state"]["admin-state"] = enabled - port["name"] = usb_port["name"] - port["class"] = "infix-hardware:usb" - port["state"]["oper-state"] = "enabled" - ports.append(port) + if HOST.exists(path): + names.append(usb_port["name"]) + data = int(HOST.read(path)) + enabled = "unlocked" if data == 1 else "locked" + port["state"] = {} + port["state"]["admin-state"] = enabled + port["name"] = usb_port["name"] + port["class"] = "infix-hardware:usb" + port["state"]["oper-state"] = "enabled" + ports.append(port) return ports diff --git a/test/case/statd/system/cli/show-hardware b/test/case/statd/system/cli/show-hardware index 29460a6cb..a598d096e 100644 --- a/test/case/statd/system/cli/show-hardware +++ b/test/case/statd/system/cli/show-hardware @@ -1,4 +1,4 @@ USB PORTS  NAME STATE  -USB unlocked -USB2 unlocked +USB locked +USB2 locked diff --git a/test/case/statd/system/ietf-hardware.json b/test/case/statd/system/ietf-hardware.json index c8153af63..cea9cbe95 100644 --- a/test/case/statd/system/ietf-hardware.json +++ b/test/case/statd/system/ietf-hardware.json @@ -7,7 +7,7 @@ }, { "state": { - "admin-state": "unlocked", + "admin-state": "locked", "oper-state": "enabled" }, "name": "USB", @@ -15,7 +15,7 @@ }, { "state": { - "admin-state": "unlocked", + "admin-state": "locked", "oper-state": "enabled" }, "name": "USB2", diff --git a/test/case/statd/system/ietf-system.json b/test/case/statd/system/ietf-system.json index 70cefb81c..6dd30ea5d 100644 --- a/test/case/statd/system/ietf-system.json +++ b/test/case/statd/system/ietf-system.json @@ -120,13 +120,13 @@ "search": [] }, "clock": { - "boot-datetime": "2025-04-30T09:47:32+00:00", - "current-datetime": "2025-04-30T09:48:01+00:00" + "boot-datetime": "2025-08-05T12:38:12+00:00", + "current-datetime": "2025-08-05T13:35:53+00:00" }, "platform": { "os-name": "Infix", - "os-version": "v25.04.0-rc1-3-g8daf1571-dirty", - "os-release": "v25.04.0-rc1-3-g8daf1571-dirty", + "os-version": "v25.06.0", + "os-release": "v25.06.0", "machine": "x86_64" } } diff --git a/test/case/statd/system/operational.json b/test/case/statd/system/operational.json index 31826b87d..0f042ec8a 100644 --- a/test/case/statd/system/operational.json +++ b/test/case/statd/system/operational.json @@ -9,7 +9,7 @@ "class": "infix-hardware:usb", "name": "USB", "state": { - "admin-state": "unlocked", + "admin-state": "locked", "oper-state": "enabled" } }, @@ -17,7 +17,7 @@ "class": "infix-hardware:usb", "name": "USB2", "state": { - "admin-state": "unlocked", + "admin-state": "locked", "oper-state": "enabled" } } @@ -39,8 +39,8 @@ }, "ietf-system:system-state": { "clock": { - "boot-datetime": "2025-04-30T09:47:32+00:00", - "current-datetime": "2025-04-30T09:48:01+00:00" + "boot-datetime": "2025-08-05T12:38:12+00:00", + "current-datetime": "2025-08-05T13:35:53+00:00" }, "infix-system:dns-resolver": { "options": {}, @@ -150,8 +150,8 @@ "platform": { "machine": "x86_64", "os-name": "Infix", - "os-release": "v25.04.0-rc1-3-g8daf1571-dirty", - "os-version": "v25.04.0-rc1-3-g8daf1571-dirty" + "os-release": "v25.06.0", + "os-version": "v25.06.0" } } } diff --git a/test/case/statd/system/system/rootfs/etc/os-release b/test/case/statd/system/system/rootfs/etc/os-release index 59326afca..cc60ddf60 100644 --- a/test/case/statd/system/system/rootfs/etc/os-release +++ b/test/case/statd/system/system/rootfs/etc/os-release @@ -1,11 +1,11 @@ NAME="Infix" ID=infix -PRETTY_NAME="Infix OS — Immutable.Friendly.Secure v25.04.0-rc1-3-g8daf1571-dirty" +PRETTY_NAME="Infix OS — Immutable.Friendly.Secure v25.06.0" ID_LIKE="buildroot" DEFAULT_HOSTNAME=ix -VERSION="v25.04.0-rc1-3-g8daf1571-dirty" -VERSION_ID=v25.04.0-rc1-3-g8daf1571-dirty -BUILD_ID="v25.04.0-rc1-3-g8daf1571-dirty" +VERSION="v25.06.0" +VERSION_ID=v25.06.0 +BUILD_ID="v25.06.0" IMAGE_ID="infix-x86_64" ARCHITECTURE="x86_64" HOME_URL=https://github.com/kernelkit/infix/ diff --git a/test/case/statd/system/system/rootfs/proc/uptime b/test/case/statd/system/system/rootfs/proc/uptime index a6ecc59c4..898b2a3d8 100644 --- a/test/case/statd/system/system/rootfs/proc/uptime +++ b/test/case/statd/system/system/rootfs/proc/uptime @@ -1 +1 @@ -28.16 15.60 +3460.54 3350.38 diff --git a/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb1/authorized_default b/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb1/authorized_default new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb1/authorized_default @@ -0,0 +1 @@ +0 diff --git a/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb2/authorized_default b/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb2/authorized_default new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/test/case/statd/system/system/rootfs/sys/bus/usb/devices/usb2/authorized_default @@ -0,0 +1 @@ +0 diff --git a/test/case/statd/system/system/timestamp b/test/case/statd/system/system/timestamp index 7dc8a78de..2d0bf957a 100644 --- a/test/case/statd/system/system/timestamp +++ b/test/case/statd/system/system/timestamp @@ -1,2 +1,2 @@ -1746006481 +1754400953