Giter VIP home page Giter VIP logo

pi-gen-action's Introduction

unit-tests integration-tests codecov

pi-gen-action

This action wraps pi-gen to make it easily accessible in GitHub workflows. Generated images can subsequently be used in workflows, e.g. uploaded as build artifacts or further processed.

pi-gen is the official tool to generate Raspberry Pi OS images that can be flashed on SD cards. Refer to the pi-gen repository for detailed information on the scripts and its usage.

NOTE: This action requires a Debian-based distribution as runner (i.e. ubuntu-latest), since it invokes tools like sudo and apt-get and relies on QEMU and other Linux native components.

Default behavior

The minimum input to the action will be the image-name and the stage-list containing the list of pi-gen stages and/or custom stages. This will build all stages and export the last stage (including all previous changes) as an image.

If multiple images should be exported, disable the export-last-stage-only property and configure pi-gen's EXPORT_IMAGE in the respective stages accordingly. This will keep the default pi-gen export directives unchanged. If changes in the pi-gen internal stages are required, a custom stage at first position in the list could perform the changes in the other directories.

Outputs

image-path

If an image was built successfully, the action will set this property to point to the file. This will be located in ${{ inputs.pi-gen-dir }}/deploy.

image-noobs-path

If NOOBS build is enabled by setting ${{ inputs.enable-noobs }} to true, the property will point to the directory in pi-gen's output directory containing the build result.

How it works

The action exposes most of pi-gen's configuration properties as input variables and performs sanity checks on the given input (or assumes) default values as stated in pi-gen's README.

If user config seems valid, the action will check out the configured ref of pi-gen locally and install required host dependencies for the build.

Custom user stages (present as directories) are mounted to the build container and resolved in pi-gen's stage configuration. The custom stage should follow pi-gen's conventions to be executed properly. The action tries to make sure the stage is respected and its changes are included in the final image.

Usage

- uses: usimd/pi-gen-action@v1
  with:
    # Compression to apply on final image (either "none", "zip", "xz" or "gz").
    compression: zip

    # Compression level to be used. From 0 to 9 (refer to the tool man page for more 
    # information on this. Usually 0 is no compression but very fast, up to 9 with the 
    # best compression but very slow).
    compression-level: 6

    # Disable the renaming of the first user during the first boot. This make it so 
    # 'username' stays activated. 'username' must be set for this to work. Please be 
    # aware of the implied security risk of defining a default username and password 
    # for your devices.
    disable-first-boot-user-rename: 0

    # Additional options to include in PIGEN_DOCKER_OPTS
    docker-opts: ''

    # Set whether a NOOBS image should be built as well. If enabled, the output 
    # directory containing the NOOBS files will be saved as output variable 
    # 'image-noobs-path'.
    enable-noobs: false

    # Enable SSH access to Pi.
    enable-ssh: 0

    # If this feature is enabled, the action will configure pi-gen to not export any 
    # stage as image but the last one defined in property 'stage-list'. This is 
    # helpful when building a single image flavor (in contrast to building a 
    # lite/server and full-blown desktop image), since it speeds up the build process 
    # significantly.
    export-last-stage-only: true

    # Comma or whitespace separated list of additional packages to install on host 
    # before running pi-gen. Use this list to add any packages your custom stages may 
    # require. Note that this is not affecting the final image. In order to add 
    # additional packages, you need to add a respective 'XX-packages' file in your 
    # custom stage.
    extra-host-dependencies: ''

    # Comma or whitespace separated list of additional modules to load on host before 
    # running pi-gen. If your custom stage requires additional software or kernel 
    # modules to be loaded, add them here. Note that this is not meant to configure 
    # modules to be loaded in the target image.
    extra-host-modules: ''

    # Token to use for checking out pi-gen repo.
    github-token: ${{ github.token }}

    # Host name of the image.
    hostname: raspberrypi

    # Final image name.
    image-name: ''

    # Default keyboard keymap.
    keyboard-keymap: gb

    # Default keyboard layout.
    keyboard-layout: English (UK)

    # Default locale of the system image.
    locale: en_GB.UTF-8

    # Password of the intial user account, locked if empty.
    password: ''

    # Path where selected pi-gen ref will be checked out to. If the path does not yet 
    # exist, it will be created (including its parents).
    pi-gen-dir: pi-gen

    # The release name to use in `/etc/issue.txt`. The default should only be used for 
    # official Raspberry Pi builds.
    pi-gen-release: Raspberry Pi reference

    # GitHub repository to fetch pi-gen from, must be a fork from RPi-Distro/pi-gen.
    pi-gen-repository: RPi-Distro/pi-gen

    # Release version of pi-gen to use. This can both be a branch or tag name known in 
    # the pi-gen repository.
    pi-gen-version: arm64

    # Setting to `1` will disable password authentication for SSH and enable public 
    # key authentication. Note that if SSH is not enabled this will take effect when 
    # SSH becomes enabled.
    pubkey-only-ssh: 0

    # Setting this to a value will make that value the contents of the 
    # FIRST_USER_NAME's ~/.ssh/authorized_keys. Obviously the value should therefore 
    # be a valid authorized_keys file. Note that this does not automatically enable 
    # SSH.
    pubkey-ssh-first-user: ''

    # The release version to build images against. Valid values are jessie, stretch, 
    # buster, bullseye, bookworm, and testing.
    release: bookworm

    # Setting to `1` will prevent pi-gen from dropping the "capabilities" feature. 
    # Generating the root filesystem with capabilities enabled and running it from a 
    # filesystem that does not support capabilities (like NFS) can cause issues. Only 
    # enable this if you understand what it is.
    setfcap: ''

    # List of stage name to execute in given order. Relative and absolute paths to 
    # custom stage directories are allowed here. Note that by default pi-gen exports 
    # images in stage2 (lite), stage4 and stage5. You probably want to hook in custom 
    # stages before one of the exported stages. Otherwise, the action will make sure 
    # any custom stage will include an image export directive.
    stage-list: stage0 stage1 stage2

    # System timezone.
    timezone: Europe/London

    # Name of the initial user account.
    username: pi

    # Print all output from pi-gen.
    verbose-output: false

    # Wifi country code of default network to connect to.
    wpa-country: ''

    # SSID of a default wifi network to connect to.
    wpa-essid: ''

    # Password of default wifi network to connect to.
    wpa-password: ''

Scenarios

Install NodeJS from Nodesource in the target image

jobs:
  pi-gen-nodejs:
    runs-on: ubuntu-latest
    steps:
      # Create a stage 'test-stage' instructing to add Nodesource repo and install nodejs as dependency
      - run: |
          mkdir -p test-stage/package-test &&
          {
          cat > test-stage/package-test/00-run-chroot.sh <<-EOF
          #!/bin/bash
          apt-get install -y curl
          curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
          EOF
          } &&
          chmod +x test-stage/package-test/00-run-chroot.sh &&
          echo "nodejs" > test-stage/package-test/01-packages &&
          {
          cat > test-stage/prerun.sh <<-EOF
          #!/bin/bash -e
          if [ ! -d "\${ROOTFS_DIR}" ]; then
            copy_previous
          fi
          EOF
          } &&
          chmod +x test-stage/prerun.sh

      - uses: usimd/pi-gen-action@v1
        with:
          image-name: test
          stage-list: stage0 stage1 stage2 ./test-stage

Enable detailed output from pi-gen build

jobs:
  pi-gen-verbose:
    runs-on: ubuntu-latest
    steps:
      - uses: usimd/pi-gen-action@v1
        with:
          image-name: test
          verbose-output: true

Upload final image as artifact

jobs:
  pi-gen-upload-image:
    runs-on: ubuntu-latest
    steps:
      - uses: usimd/pi-gen-action@v1
        id: build
        with:
          image-name: test

      - uses: actions/upload-artifact@v3
        with:
          name: pi-gen-image
          path: ${{ steps.build.outputs.image-path }}

Modify pi-gen internal stages

In this scenario, a dummy preparation stage clean-stage is prepended to the list of stages which will remove export directives of stage4 and stage5 in the internally mounted stage volumes.

jobs:
  pi-gen-modified-stages:
    runs-on: ubuntu-latest
    steps:
      - run: |
          mkdir -p clean-stage &&
          {
          cat > clean-stage/prerun.sh <<-EOF
          #!/bin/bash
          rm -f ${{ github.workspace }}/${{ inputs.custom-pi-gen-dir }}/stage[45]/EXPORT*
          EOF
          } &&
          chmod +x clean-stage/prerun.sh

      - uses: usimd/pi-gen-action@v1
        with:
          image-name: test
          stage-list: clean-stage stage0 stage1 stage2 custom-stage stage3 stage4
          pi-gen-dir: ${{ inputs.custom-pi-gen-dir }}

License

The scripts and documentation in this project are released under the MIT License

pi-gen-action's People

Contributors

dtcooper avatar jhass avatar renovate[bot] avatar usimd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pi-gen-action's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Approval

These branches will be created by Renovate only once you click their checkbox below.

  • Update dependency eslint to v9
  • Update typescript-eslint monorepo to v8 (major) (@typescript-eslint/eslint-plugin, @typescript-eslint/parser, typescript-eslint)
  • ๐Ÿ” Create all pending approval PRs at once ๐Ÿ”

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • Update all non-major dependencies (@types/node, eslint-plugin-jest)

Detected dependencies

github-actions
.github/workflows/integration-test.yml
  • actions/checkout v4
  • actions/setup-node v4
  • actions-ecosystem/action-remove-labels v1
.github/workflows/pi-gen.yaml
  • actions/checkout v4
  • actions/upload-artifact v4
  • actions/upload-artifact v4
.github/workflows/publish-release.yml
  • actions/checkout v4
  • actions/setup-node v4
  • teunmooij/github-versioned-release v1
  • irongut/EditRelease v1.2.0
.github/workflows/release.yml
  • actions/checkout v4
  • EndBug/version-check v2
  • softprops/action-gh-release v2
.github/workflows/test.yml
  • actions/checkout v4
  • actions/setup-node v4
  • codecov/codecov-action v4
  • actions/checkout v4
npm
package.json
  • @actions/core ^1.10.1
  • @actions/exec 1.1.1
  • @actions/github ^6.0.0
  • @actions/glob ^0.4.0
  • @actions/io ^1.1.3
  • ansi-colors ^4.1.3
  • json-colorizer ^3.0.1
  • tmp 0.2.3
  • @types/jest 29.5.12
  • @types/js-yaml 4.0.9
  • @types/node 20.14.13
  • @types/semver 7.5.8
  • @types/tmp 0.2.6
  • @typescript-eslint/eslint-plugin 7.18.0
  • @typescript-eslint/parser 7.18.0
  • @vercel/ncc 0.38.1
  • eslint 8.57.0
  • eslint-import-resolver-typescript 3.6.1
  • eslint-plugin-jest 28.6.0
  • eslint-plugin-prettier ^5.1.3
  • eslint-plugin-workspaces 0.10.1
  • jest 29.7.0
  • jest-mock-extended 3.0.7
  • js-yaml 4.1.0
  • markdown-replace-section 0.4.0
  • prettier 3.3.3
  • semver 7.6.3
  • ts-jest 29.2.4
  • ts-node 10.9.2
  • typescript 5.5.4
  • typescript-eslint ^7.0.2
  • word-wrap 1.2.5

  • Check this box to trigger a request for Renovate to run again on this repository

Buster crashes

Describe the bug
I cant run this action for a buster image (no problems at all with bookworm and bullseye)

To Reproduce
Steps to reproduce the behavior:

  • workflow configuration
name: minimal-example
run-name: This is my minimal example
on:
  push:
    branches:
      - buster
jobs:
  pi-gen-upload-image:
    runs-on: ubuntu-latest
    steps:
      - uses: usimd/pi-gen-action@v1
        with:
          image-name: minimal-example
          stage-list: stage0 stage1 stage2
          release: buster
          pi-gen-version: 2023-05-03-raspios-buster
          verbose-output: true

Expected behavior
With this configuration I expect a "buster lite" image. With same configuration for bookworm or bullseye (different attributes: release, pi-gen-version) I see no problems.

Logs

2024-06-06T14:41:58.8550386Z Current runner version: '2.317.0'
2024-06-06T14:41:58.8576696Z ##[group]Operating System
2024-06-06T14:41:58.8577366Z Ubuntu
2024-06-06T14:41:58.8577697Z 22.04.4
2024-06-06T14:41:58.8578109Z LTS
2024-06-06T14:41:58.8578448Z ##[endgroup]
2024-06-06T14:41:58.8578806Z ##[group]Runner Image
2024-06-06T14:41:58.8579316Z Image: ubuntu-22.04
2024-06-06T14:41:58.8579716Z Version: 20240603.1.0
2024-06-06T14:41:58.8580694Z Included Software: https://github.com/actions/runner-images/blob/ubuntu22/20240603.1/images/ubuntu/Ubuntu2204-Readme.md
2024-06-06T14:41:58.8582205Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu22%2F20240603.1
2024-06-06T14:41:58.8583079Z ##[endgroup]
2024-06-06T14:41:58.8583438Z ##[group]Runner Image Provisioner
2024-06-06T14:41:58.8583989Z 2.0.370.1
2024-06-06T14:41:58.8584344Z ##[endgroup]
2024-06-06T14:41:58.8586623Z ##[group]GITHUB_TOKEN Permissions
2024-06-06T14:41:58.8588424Z Actions: write
2024-06-06T14:41:58.8589007Z Attestations: write
2024-06-06T14:41:58.8589651Z Checks: write
2024-06-06T14:41:58.8589989Z Contents: write
2024-06-06T14:41:58.8590446Z Deployments: write
2024-06-06T14:41:58.8590873Z Discussions: write
2024-06-06T14:41:58.8591223Z Issues: write
2024-06-06T14:41:58.8591643Z Metadata: read
2024-06-06T14:41:58.8592032Z Packages: write
2024-06-06T14:41:58.8592690Z Pages: write
2024-06-06T14:41:58.8593266Z PullRequests: write
2024-06-06T14:41:58.8593709Z RepositoryProjects: write
2024-06-06T14:41:58.8594128Z SecurityEvents: write
2024-06-06T14:41:58.8594636Z Statuses: write
2024-06-06T14:41:58.8595025Z ##[endgroup]
2024-06-06T14:41:58.8598131Z Secret source: Actions
2024-06-06T14:41:58.8598885Z Prepare workflow directory
2024-06-06T14:41:58.9229128Z Prepare all required actions
2024-06-06T14:41:58.9389096Z Getting action download info
2024-06-06T14:41:59.1242194Z Download action repository 'usimd/pi-gen-action@v1' (SHA:bf082dedce15e8eb4b2f74b0817a808e00f9494d)
2024-06-06T14:41:59.7981273Z Complete job name: pi-gen-upload-image
2024-06-06T14:41:59.9265486Z ##[group]Run usimd/pi-gen-action@v1
2024-06-06T14:41:59.9266166Z with:
2024-06-06T14:41:59.9266692Z   image-name: minimal-example
2024-06-06T14:41:59.9267203Z   stage-list: stage0 stage1 stage2
2024-06-06T14:41:59.9267675Z   release: buster
2024-06-06T14:41:59.9268210Z   pi-gen-version: 2023-05-03-raspios-buster
2024-06-06T14:41:59.9268786Z   verbose-output: true
2024-06-06T14:41:59.9269247Z   pi-gen-release: Raspberry Pi reference
2024-06-06T14:41:59.9269866Z   compression: zip
2024-06-06T14:41:59.9270290Z   compression-level: 6
2024-06-06T14:41:59.9270679Z   locale: en_GB.UTF-8
2024-06-06T14:41:59.9271176Z   hostname: raspberrypi
2024-06-06T14:41:59.9271630Z   keyboard-keymap: gb
2024-06-06T14:41:59.9272046Z   keyboard-layout: English (UK)
2024-06-06T14:41:59.9272999Z   timezone: Europe/London
2024-06-06T14:41:59.9273463Z   username: pi
2024-06-06T14:41:59.9273842Z   disable-first-boot-user-rename: 0
2024-06-06T14:41:59.9274445Z   enable-ssh: 0
2024-06-06T14:41:59.9274915Z   pubkey-only-ssh: 0
2024-06-06T14:41:59.9275446Z   pi-gen-repository: RPi-Distro/pi-gen
2024-06-06T14:41:59.9276019Z   export-last-stage-only: true
2024-06-06T14:41:59.9276463Z   enable-noobs: false
2024-06-06T14:41:59.9276947Z   pi-gen-dir: pi-gen
2024-06-06T14:41:59.9277673Z   github-token: ***
2024-06-06T14:41:59.9278126Z ##[endgroup]
2024-06-06T14:42:00.0859922Z ##[group]Validating input and generating pi-gen config
2024-06-06T14:42:00.2484922Z ๏ฟฝ[35m{๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2487699Z   ๏ฟฝ[0m๏ฟฝ[96m"imgName"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"minimal-example"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2489152Z   ๏ฟฝ[0m๏ฟฝ[96m"piGenRelease"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"Raspberry Pi reference"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2490338Z   ๏ฟฝ[0m๏ฟฝ[96m"release"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"buster"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2491305Z   ๏ฟฝ[0m๏ฟฝ[96m"deployCompression"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"zip"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2492473Z   ๏ฟฝ[0m๏ฟฝ[96m"compressionLevel"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"6"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2494116Z   ๏ฟฝ[0m๏ฟฝ[96m"localeDefault"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"en_GB.UTF-8"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2495148Z   ๏ฟฝ[0m๏ฟฝ[96m"targetHostname"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"raspberrypi"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2496293Z   ๏ฟฝ[0m๏ฟฝ[96m"keyboardKeymap"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"gb"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2497287Z   ๏ฟฝ[0m๏ฟฝ[96m"keyboardLayout"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"English (UK)"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2498174Z   ๏ฟฝ[0m๏ฟฝ[96m"timezoneDefault"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"Europe/London"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2499023Z   ๏ฟฝ[0m๏ฟฝ[96m"firstUserName"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"pi"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2499862Z   ๏ฟฝ[0m๏ฟฝ[96m"enableSsh"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"0"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2500621Z   ๏ฟฝ[0m๏ฟฝ[96m"pubkeyOnlySsh"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"0"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2501387Z   ๏ฟฝ[0m๏ฟฝ[96m"stageList"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[35m[๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2501984Z     ๏ฟฝ[0m๏ฟฝ[31m"stage0"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2502505Z     ๏ฟฝ[0m๏ฟฝ[31m"stage1"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2503013Z     ๏ฟฝ[0m๏ฟฝ[31m"stage2"๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2503463Z   ๏ฟฝ[0m๏ฟฝ[35m]๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2504091Z   ๏ฟฝ[0m๏ฟฝ[96m"enableNoobs"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"false"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2504948Z   ๏ฟฝ[0m๏ฟฝ[96m"exportLastStageOnly"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"true"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2505762Z   ๏ฟฝ[0m๏ฟฝ[96m"firstUserPass"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"***"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2506596Z   ๏ฟฝ[0m๏ฟฝ[96m"disableFirstBootUserRename"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"0"๏ฟฝ[39m๏ฟฝ[37m,๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2507437Z   ๏ฟฝ[0m๏ฟฝ[96m"wpaPassword"๏ฟฝ[39m๏ฟฝ[37m:๏ฟฝ[39m๏ฟฝ[0m ๏ฟฝ[0m๏ฟฝ[31m"***"๏ฟฝ[39m๏ฟฝ[0m
2024-06-06T14:42:00.2507959Z ๏ฟฝ[0m๏ฟฝ[35m}๏ฟฝ[39m
2024-06-06T14:42:00.2508841Z ##[endgroup]
2024-06-06T14:42:00.2509690Z ##[group]Cloning pi-gen repository
2024-06-06T14:42:00.6112646Z [command]/usr/bin/git remote add origin https://github.com/RPi-Distro/pi-gen
2024-06-06T14:42:00.6158245Z [command]/usr/bin/git fetch --progress --prune --no-tags --no-recurse-submodules --depth=1 origin +refs/heads/2023-05-03-raspios-buster*:refs/remotes/origin/2023-05-03-raspios-buster* +refs/tags/2023-05-03-raspios-buster*:refs/tags/2023-05-03-raspios-buster*
2024-06-06T14:42:01.1587569Z remote: Enumerating objects: 149, done.        
2024-06-06T14:42:01.1589071Z remote: Counting objects:   0% (1/149)        
2024-06-06T14:42:01.1589990Z remote: Counting objects:   1% (2/149)        
2024-06-06T14:42:01.1590802Z remote: Counting objects:   2% (3/149)        
2024-06-06T14:42:01.1591414Z remote: Counting objects:   3% (5/149)        
2024-06-06T14:42:01.1591912Z remote: Counting objects:   4% (6/149)        
2024-06-06T14:42:01.1592700Z remote: Counting objects:   5% (8/149)        
2024-06-06T14:42:01.1593299Z remote: Counting objects:   6% (9/149)        
2024-06-06T14:42:01.1593867Z remote: Counting objects:   7% (11/149)        
2024-06-06T14:42:01.1594331Z remote: Counting objects:   8% (12/149)        
2024-06-06T14:42:01.1594884Z remote: Counting objects:   9% (14/149)        
2024-06-06T14:42:01.1595353Z remote: Counting objects:  10% (15/149)        
2024-06-06T14:42:01.1595775Z remote: Counting objects:  11% (17/149)        
2024-06-06T14:42:01.1596313Z remote: Counting objects:  12% (18/149)        
2024-06-06T14:42:01.1596766Z remote: Counting objects:  13% (20/149)        
2024-06-06T14:42:01.1597180Z remote: Counting objects:  14% (21/149)        
2024-06-06T14:42:01.1597718Z remote: Counting objects:  15% (23/149)        
2024-06-06T14:42:01.1598166Z remote: Counting objects:  16% (24/149)        
2024-06-06T14:42:01.1598578Z remote: Counting objects:  17% (26/149)        
2024-06-06T14:42:01.1599121Z remote: Counting objects:  18% (27/149)        
2024-06-06T14:42:01.1599569Z remote: Counting objects:  19% (29/149)        
2024-06-06T14:42:01.1599984Z remote: Counting objects:  20% (30/149)        
2024-06-06T14:42:01.1600536Z remote: Counting objects:  21% (32/149)        
2024-06-06T14:42:01.1601295Z remote: Counting objects:  22% (33/149)        
2024-06-06T14:42:01.1601726Z remote: Counting objects:  23% (35/149)        
2024-06-06T14:42:01.1602250Z remote: Counting objects:  24% (36/149)        
2024-06-06T14:42:01.1602708Z remote: Counting objects:  25% (38/149)        
2024-06-06T14:42:01.1603166Z remote: Counting objects:  26% (39/149)        
2024-06-06T14:42:01.1603646Z remote: Counting objects:  27% (41/149)        
2024-06-06T14:42:01.1604087Z remote: Counting objects:  28% (42/149)        
2024-06-06T14:42:01.1604564Z remote: Counting objects:  29% (44/149)        
2024-06-06T14:42:01.1605038Z remote: Counting objects:  30% (45/149)        
2024-06-06T14:42:01.1605496Z remote: Counting objects:  31% (47/149)        
2024-06-06T14:42:01.1605937Z remote: Counting objects:  32% (48/149)        
2024-06-06T14:42:01.1606408Z remote: Counting objects:  33% (50/149)        
2024-06-06T14:42:01.1606875Z remote: Counting objects:  34% (51/149)        
2024-06-06T14:42:01.1607327Z remote: Counting objects:  35% (53/149)        
2024-06-06T14:42:01.1607798Z remote: Counting objects:  36% (54/149)        
2024-06-06T14:42:01.1608262Z remote: Counting objects:  37% (56/149)        
2024-06-06T14:42:01.1608704Z remote: Counting objects:  38% (57/149)        
2024-06-06T14:42:01.1609180Z remote: Counting objects:  39% (59/149)        
2024-06-06T14:42:01.1609641Z remote: Counting objects:  40% (60/149)        
2024-06-06T14:42:01.1610080Z remote: Counting objects:  41% (62/149)        
2024-06-06T14:42:01.1610549Z remote: Counting objects:  42% (63/149)        
2024-06-06T14:42:01.1611007Z remote: Counting objects:  43% (65/149)        
2024-06-06T14:42:01.1611449Z remote: Counting objects:  44% (66/149)        
2024-06-06T14:42:01.1611926Z remote: Counting objects:  45% (68/149)        
2024-06-06T14:42:01.1612389Z remote: Counting objects:  46% (69/149)        
2024-06-06T14:42:01.1613056Z remote: Counting objects:  47% (71/149)        
2024-06-06T14:42:01.1613624Z remote: Counting objects:  48% (72/149)        
2024-06-06T14:42:01.1614034Z remote: Counting objects:  49% (74/149)        
2024-06-06T14:42:01.1614477Z remote: Counting objects:  50% (75/149)        
2024-06-06T14:42:01.1615003Z remote: Counting objects:  51% (76/149)        
2024-06-06T14:42:01.1615411Z remote: Counting objects:  52% (78/149)        
2024-06-06T14:42:01.1615868Z remote: Counting objects:  53% (79/149)        
2024-06-06T14:42:01.1616375Z remote: Counting objects:  54% (81/149)        
2024-06-06T14:42:01.1616781Z remote: Counting objects:  55% (82/149)        
2024-06-06T14:42:01.1617239Z remote: Counting objects:  56% (84/149)        
2024-06-06T14:42:01.1617751Z remote: Counting objects:  57% (85/149)        
2024-06-06T14:42:01.1618160Z remote: Counting objects:  58% (87/149)        
2024-06-06T14:42:01.1618626Z remote: Counting objects:  59% (88/149)        
2024-06-06T14:42:01.1619161Z remote: Counting objects:  60% (90/149)        
2024-06-06T14:42:01.1619581Z remote: Counting objects:  61% (91/149)        
2024-06-06T14:42:01.1620048Z remote: Counting objects:  62% (93/149)        
2024-06-06T14:42:01.1620552Z remote: Counting objects:  63% (94/149)        
2024-06-06T14:42:01.1621027Z remote: Counting objects:  64% (96/149)        
2024-06-06T14:42:01.1621435Z remote: Counting objects:  65% (97/149)        
2024-06-06T14:42:01.1621941Z remote: Counting objects:  66% (99/149)        
2024-06-06T14:42:01.1622410Z remote: Counting objects:  67% (100/149)        
2024-06-06T14:42:01.1622843Z remote: Counting objects:  68% (102/149)        
2024-06-06T14:42:01.1623384Z remote: Counting objects:  69% (103/149)        
2024-06-06T14:42:01.1623878Z remote: Counting objects:  70% (105/149)        
2024-06-06T14:42:01.1624304Z remote: Counting objects:  71% (106/149)        
2024-06-06T14:42:01.1624833Z remote: Counting objects:  72% (108/149)        
2024-06-06T14:42:01.1625304Z remote: Counting objects:  73% (109/149)        
2024-06-06T14:42:01.1625728Z remote: Counting objects:  74% (111/149)        
2024-06-06T14:42:01.1626425Z remote: Counting objects:  75% (112/149)        
2024-06-06T14:42:01.1626885Z remote: Counting objects:  76% (114/149)        
2024-06-06T14:42:01.1627304Z remote: Counting objects:  77% (115/149)        
2024-06-06T14:42:01.1627841Z remote: Counting objects:  78% (117/149)        
2024-06-06T14:42:01.1628292Z remote: Counting objects:  79% (118/149)        
2024-06-06T14:42:01.1628707Z remote: Counting objects:  80% (120/149)        
2024-06-06T14:42:01.1629235Z remote: Counting objects:  81% (121/149)        
2024-06-06T14:42:01.1629688Z remote: Counting objects:  82% (123/149)        
2024-06-06T14:42:01.1630200Z remote: Counting objects:  83% (124/149)        
2024-06-06T14:42:01.1630636Z remote: Counting objects:  84% (126/149)        
2024-06-06T14:42:01.1631085Z remote: Counting objects:  85% (127/149)        
2024-06-06T14:42:01.1631629Z remote: Counting objects:  86% (129/149)        
2024-06-06T14:42:01.1632053Z remote: Counting objects:  87% (130/149)        
2024-06-06T14:42:01.1632749Z remote: Counting objects:  88% (132/149)        
2024-06-06T14:42:01.1633302Z remote: Counting objects:  89% (133/149)        
2024-06-06T14:42:01.1633721Z remote: Counting objects:  90% (135/149)        
2024-06-06T14:42:01.1634177Z remote: Counting objects:  91% (136/149)        
2024-06-06T14:42:01.1634715Z remote: Counting objects:  92% (138/149)        
2024-06-06T14:42:01.1635139Z remote: Counting objects:  93% (139/149)        
2024-06-06T14:42:01.1635597Z remote: Counting objects:  94% (141/149)        
2024-06-06T14:42:01.1636120Z remote: Counting objects:  95% (142/149)        
2024-06-06T14:42:01.1636534Z remote: Counting objects:  96% (144/149)        
2024-06-06T14:42:01.1636980Z remote: Counting objects:  97% (145/149)        
2024-06-06T14:42:01.1637504Z remote: Counting objects:  98% (147/149)        
2024-06-06T14:42:01.1637917Z remote: Counting objects:  99% (148/149)        
2024-06-06T14:42:01.1638551Z remote: Counting objects: 100% (149/149)        
2024-06-06T14:42:01.1639138Z remote: Counting objects: 100% (149/149), done.        
2024-06-06T14:42:01.1639614Z remote: Compressing objects:   0% (1/118)        
2024-06-06T14:42:01.1660296Z remote: Compressing objects:   1% (2/118)        
2024-06-06T14:42:01.1661258Z remote: Compressing objects:   2% (3/118)        
2024-06-06T14:42:01.1662102Z remote: Compressing objects:   3% (4/118)        
2024-06-06T14:42:01.1663032Z remote: Compressing objects:   4% (5/118)        
2024-06-06T14:42:01.1663890Z remote: Compressing objects:   5% (6/118)        
2024-06-06T14:42:01.1664696Z remote: Compressing objects:   6% (8/118)        
2024-06-06T14:42:01.1665561Z remote: Compressing objects:   7% (9/118)        
2024-06-06T14:42:01.1666301Z remote: Compressing objects:   8% (10/118)        
2024-06-06T14:42:01.1667167Z remote: Compressing objects:   9% (11/118)        
2024-06-06T14:42:01.1668076Z remote: Compressing objects:  10% (12/118)        
2024-06-06T14:42:01.1668888Z remote: Compressing objects:  11% (13/118)        
2024-06-06T14:42:01.1669666Z remote: Compressing objects:  12% (15/118)        
2024-06-06T14:42:01.1670546Z remote: Compressing objects:  13% (16/118)        
2024-06-06T14:42:01.1671356Z remote: Compressing objects:  14% (17/118)        
2024-06-06T14:42:01.1672090Z remote: Compressing objects:  15% (18/118)        
2024-06-06T14:42:01.1673197Z remote: Compressing objects:  16% (19/118)        
2024-06-06T14:42:01.1674002Z remote: Compressing objects:  17% (21/118)        
2024-06-06T14:42:01.1674733Z remote: Compressing objects:  18% (22/118)        
2024-06-06T14:42:01.1675610Z remote: Compressing objects:  19% (23/118)        
2024-06-06T14:42:01.1676416Z remote: Compressing objects:  20% (24/118)        
2024-06-06T14:42:01.1677164Z remote: Compressing objects:  21% (25/118)        
2024-06-06T14:42:01.1678049Z remote: Compressing objects:  22% (26/118)        
2024-06-06T14:42:01.1678849Z remote: Compressing objects:  23% (28/118)        
2024-06-06T14:42:01.1679588Z remote: Compressing objects:  24% (29/118)        
2024-06-06T14:42:01.1680798Z remote: Compressing objects:  25% (30/118)        
2024-06-06T14:42:01.1681592Z remote: Compressing objects:  26% (31/118)        
2024-06-06T14:42:01.1682353Z remote: Compressing objects:  27% (32/118)        
2024-06-06T14:42:01.1683271Z remote: Compressing objects:  28% (34/118)        
2024-06-06T14:42:01.1684010Z remote: Compressing objects:  29% (35/118)        
2024-06-06T14:42:01.1684752Z remote: Compressing objects:  30% (36/118)        
2024-06-06T14:42:01.1685595Z remote: Compressing objects:  31% (37/118)        
2024-06-06T14:42:01.1686404Z remote: Compressing objects:  32% (38/118)        
2024-06-06T14:42:01.1687416Z remote: Compressing objects:  33% (39/118)        
2024-06-06T14:42:01.1688206Z remote: Compressing objects:  34% (41/118)        
2024-06-06T14:42:01.1688999Z remote: Compressing objects:  35% (42/118)        
2024-06-06T14:42:01.1689906Z remote: Compressing objects:  36% (43/118)        
2024-06-06T14:42:01.1690710Z remote: Compressing objects:  37% (44/118)        
2024-06-06T14:42:01.1691548Z remote: Compressing objects:  38% (45/118)        
2024-06-06T14:42:01.1692518Z remote: Compressing objects:  39% (47/118)        
2024-06-06T14:42:01.1693324Z remote: Compressing objects:  40% (48/118)        
2024-06-06T14:42:01.1694076Z remote: Compressing objects:  41% (49/118)        
2024-06-06T14:42:01.1694966Z remote: Compressing objects:  42% (50/118)        
2024-06-06T14:42:01.1695694Z remote: Compressing objects:  43% (51/118)        
2024-06-06T14:42:01.1696489Z remote: Compressing objects:  44% (52/118)        
2024-06-06T14:42:01.1697369Z remote: Compressing objects:  45% (54/118)        
2024-06-06T14:42:01.1698097Z remote: Compressing objects:  46% (55/118)        
2024-06-06T14:42:01.1698896Z remote: Compressing objects:  47% (56/118)        
2024-06-06T14:42:01.1699815Z remote: Compressing objects:  48% (57/118)        
2024-06-06T14:42:01.1700908Z remote: Compressing objects:  49% (58/118)        
2024-06-06T14:42:01.1701720Z remote: Compressing objects:  50% (59/118)        
2024-06-06T14:42:01.1702675Z remote: Compressing objects:  51% (61/118)        
2024-06-06T14:42:01.1703422Z remote: Compressing objects:  52% (62/118)        
2024-06-06T14:42:01.1704193Z remote: Compressing objects:  53% (63/118)        
2024-06-06T14:42:01.1705084Z remote: Compressing objects:  54% (64/118)        
2024-06-06T14:42:01.1705840Z remote: Compressing objects:  55% (65/118)        
2024-06-06T14:42:01.1706741Z remote: Compressing objects:  56% (67/118)        
2024-06-06T14:42:01.1707535Z remote: Compressing objects:  57% (68/118)        
2024-06-06T14:42:01.1708267Z remote: Compressing objects:  58% (69/118)        
2024-06-06T14:42:01.1709252Z remote: Compressing objects:  59% (70/118)        
2024-06-06T14:42:01.1710123Z remote: Compressing objects:  60% (71/118)        
2024-06-06T14:42:01.1711012Z remote: Compressing objects:  61% (72/118)        
2024-06-06T14:42:01.1712026Z remote: Compressing objects:  62% (74/118)        
2024-06-06T14:42:01.1713131Z remote: Compressing objects:  63% (75/118)        
2024-06-06T14:42:01.1714047Z remote: Compressing objects:  64% (76/118)        
2024-06-06T14:42:01.1715137Z remote: Compressing objects:  65% (77/118)        
2024-06-06T14:42:01.1716017Z remote: Compressing objects:  66% (78/118)        
2024-06-06T14:42:01.1716926Z remote: Compressing objects:  67% (80/118)        
2024-06-06T14:42:01.1717921Z remote: Compressing objects:  68% (81/118)        
2024-06-06T14:42:01.1718727Z remote: Compressing objects:  69% (82/118)        
2024-06-06T14:42:01.1719637Z remote: Compressing objects:  70% (83/118)        
2024-06-06T14:42:01.1720591Z remote: Compressing objects:  71% (84/118)        
2024-06-06T14:42:01.1721488Z remote: Compressing objects:  72% (85/118)        
2024-06-06T14:42:01.1722355Z remote: Compressing objects:  73% (87/118)        
2024-06-06T14:42:01.1723375Z remote: Compressing objects:  74% (88/118)        
2024-06-06T14:42:01.1724202Z remote: Compressing objects:  75% (89/118)        
2024-06-06T14:42:01.1725430Z remote: Compressing objects:  76% (90/118)        
2024-06-06T14:42:01.1726504Z remote: Compressing objects:  77% (91/118)        
2024-06-06T14:42:01.1727395Z remote: Compressing objects:  78% (93/118)        
2024-06-06T14:42:01.1728347Z remote: Compressing objects:  79% (94/118)        
2024-06-06T14:42:01.1729343Z remote: Compressing objects:  80% (95/118)        
2024-06-06T14:42:01.1730203Z remote: Compressing objects:  81% (96/118)        
2024-06-06T14:42:01.1731021Z remote: Compressing objects:  82% (97/118)        
2024-06-06T14:42:01.1732106Z remote: Compressing objects:  83% (98/118)        
2024-06-06T14:42:01.1732951Z remote: Compressing objects:  84% (100/118)        
2024-06-06T14:42:01.1733844Z remote: Compressing objects:  85% (101/118)        
2024-06-06T14:42:01.1734954Z remote: Compressing objects:  86% (102/118)        
2024-06-06T14:42:01.1735855Z remote: Compressing objects:  87% (103/118)        
2024-06-06T14:42:01.1736725Z remote: Compressing objects:  88% (104/118)        
2024-06-06T14:42:01.1737873Z remote: Compressing objects:  89% (106/118)        
2024-06-06T14:42:01.1738799Z remote: Compressing objects:  90% (107/118)        
2024-06-06T14:42:01.1739731Z remote: Compressing objects:  91% (108/118)        
2024-06-06T14:42:01.1740776Z remote: Compressing objects:  92% (109/118)        
2024-06-06T14:42:01.1741510Z remote: Compressing objects:  93% (110/118)        
2024-06-06T14:42:01.1742022Z remote: Compressing objects:  94% (111/118)        
2024-06-06T14:42:01.1742578Z remote: Compressing objects:  95% (113/118)        
2024-06-06T14:42:01.1743089Z remote: Compressing objects:  96% (114/118)        
2024-06-06T14:42:01.1743597Z remote: Compressing objects:  97% (115/118)        
2024-06-06T14:42:01.1744162Z remote: Compressing objects:  98% (116/118)        
2024-06-06T14:42:01.1744610Z remote: Compressing objects:  99% (117/118)        
2024-06-06T14:42:01.1745318Z remote: Compressing objects: 100% (118/118)        
2024-06-06T14:42:01.1745967Z remote: Compressing objects: 100% (118/118), done.        
2024-06-06T14:42:01.1790838Z Receiving objects:   0% (1/149)
2024-06-06T14:42:01.1792020Z Receiving objects:   1% (2/149)
2024-06-06T14:42:01.1795840Z Receiving objects:   2% (3/149)
2024-06-06T14:42:01.1796453Z Receiving objects:   3% (5/149)
2024-06-06T14:42:01.1796978Z Receiving objects:   4% (6/149)
2024-06-06T14:42:01.1797383Z Receiving objects:   5% (8/149)
2024-06-06T14:42:01.1797916Z Receiving objects:   6% (9/149)
2024-06-06T14:42:01.1798869Z Receiving objects:   7% (11/149)
2024-06-06T14:42:01.1799563Z Receiving objects:   8% (12/149)
2024-06-06T14:42:01.1800070Z Receiving objects:   9% (14/149)
2024-06-06T14:42:01.1800551Z Receiving objects:  10% (15/149)
2024-06-06T14:42:01.1800975Z Receiving objects:  11% (17/149)
2024-06-06T14:42:01.1801401Z Receiving objects:  12% (18/149)
2024-06-06T14:42:01.1801957Z Receiving objects:  13% (20/149)
2024-06-06T14:42:01.1802414Z Receiving objects:  14% (21/149)
2024-06-06T14:42:01.1802768Z Receiving objects:  15% (23/149)
2024-06-06T14:42:01.1803213Z Receiving objects:  16% (24/149)
2024-06-06T14:42:01.1803605Z Receiving objects:  17% (26/149)
2024-06-06T14:42:01.1803960Z Receiving objects:  18% (27/149)
2024-06-06T14:42:01.1804412Z Receiving objects:  19% (29/149)
2024-06-06T14:42:01.1804811Z Receiving objects:  20% (30/149)
2024-06-06T14:42:01.1805152Z Receiving objects:  21% (32/149)
2024-06-06T14:42:01.1805604Z Receiving objects:  22% (33/149)
2024-06-06T14:42:01.1805983Z Receiving objects:  23% (35/149)
2024-06-06T14:42:01.1806322Z Receiving objects:  24% (36/149)
2024-06-06T14:42:01.1806777Z Receiving objects:  25% (38/149)
2024-06-06T14:42:01.1807173Z Receiving objects:  26% (39/149)
2024-06-06T14:42:01.1807523Z Receiving objects:  27% (41/149)
2024-06-06T14:42:01.1807985Z Receiving objects:  28% (42/149)
2024-06-06T14:42:01.1808370Z Receiving objects:  29% (44/149)
2024-06-06T14:42:01.1808715Z Receiving objects:  30% (45/149)
2024-06-06T14:42:01.1809167Z Receiving objects:  31% (47/149)
2024-06-06T14:42:01.1809793Z Receiving objects:  32% (48/149)
2024-06-06T14:42:01.1810157Z Receiving objects:  33% (50/149)
2024-06-06T14:42:01.1810610Z Receiving objects:  34% (51/149)
2024-06-06T14:42:01.1810986Z Receiving objects:  35% (53/149)
2024-06-06T14:42:01.1873507Z Receiving objects:  36% (54/149)
2024-06-06T14:42:01.1874766Z Receiving objects:  37% (56/149)
2024-06-06T14:42:01.1876896Z Receiving objects:  38% (57/149)
2024-06-06T14:42:01.1877490Z Receiving objects:  39% (59/149)
2024-06-06T14:42:01.1878094Z Receiving objects:  40% (60/149)
2024-06-06T14:42:01.1878503Z Receiving objects:  41% (62/149)
2024-06-06T14:42:01.1878854Z Receiving objects:  42% (63/149)
2024-06-06T14:42:01.1879306Z Receiving objects:  43% (65/149)
2024-06-06T14:42:01.2057687Z Receiving objects:  44% (66/149)
2024-06-06T14:42:01.2136891Z Receiving objects:  45% (68/149)
2024-06-06T14:42:01.2402098Z Receiving objects:  46% (69/149)
2024-06-06T14:42:01.2501931Z Receiving objects:  47% (71/149)
2024-06-06T14:42:01.2527414Z Receiving objects:  48% (72/149)
2024-06-06T14:42:01.2528717Z Receiving objects:  49% (74/149)
2024-06-06T14:42:01.2529616Z Receiving objects:  50% (75/149)
2024-06-06T14:42:01.2531199Z Receiving objects:  51% (76/149)
2024-06-06T14:42:01.2532296Z Receiving objects:  52% (78/149)
2024-06-06T14:42:01.2533463Z Receiving objects:  53% (79/149)
2024-06-06T14:42:01.2534212Z Receiving objects:  54% (81/149)
2024-06-06T14:42:01.2535759Z Receiving objects:  55% (82/149)
2024-06-06T14:42:01.2536377Z Receiving objects:  56% (84/149)
2024-06-06T14:42:01.2537068Z Receiving objects:  57% (85/149)
2024-06-06T14:42:01.2537871Z Receiving objects:  58% (87/149)
2024-06-06T14:42:01.2580273Z Receiving objects:  59% (88/149)
2024-06-06T14:42:01.2581502Z Receiving objects:  60% (90/149)
2024-06-06T14:42:01.2582851Z Receiving objects:  61% (91/149)
2024-06-06T14:42:01.2583995Z Receiving objects:  62% (93/149)
2024-06-06T14:42:01.2584793Z Receiving objects:  63% (94/149)
2024-06-06T14:42:01.2586374Z Receiving objects:  64% (96/149)
2024-06-06T14:42:01.2587500Z Receiving objects:  65% (97/149)
2024-06-06T14:42:01.2588548Z Receiving objects:  66% (99/149)
2024-06-06T14:42:01.2589465Z Receiving objects:  67% (100/149)
2024-06-06T14:42:01.2590542Z Receiving objects:  68% (102/149)
2024-06-06T14:42:01.2591547Z Receiving objects:  69% (103/149)
2024-06-06T14:42:01.2592715Z Receiving objects:  70% (105/149)
2024-06-06T14:42:01.2593840Z Receiving objects:  71% (106/149)
2024-06-06T14:42:01.2594981Z Receiving objects:  72% (108/149)
2024-06-06T14:42:01.2596648Z remote: Total 149 (delta 0), reused 102 (delta 0), pack-reused 0        
2024-06-06T14:42:01.2597887Z Receiving objects:  73% (109/149)
2024-06-06T14:42:01.2598929Z Receiving objects:  74% (111/149)
2024-06-06T14:42:01.2600068Z Receiving objects:  75% (112/149)
2024-06-06T14:42:01.2600961Z Receiving objects:  76% (114/149)
2024-06-06T14:42:01.2601975Z Receiving objects:  77% (115/149)
2024-06-06T14:42:01.2603140Z Receiving objects:  78% (117/149)
2024-06-06T14:42:01.2605909Z Receiving objects:  79% (118/149)
2024-06-06T14:42:01.2606791Z Receiving objects:  80% (120/149)
2024-06-06T14:42:01.2607531Z Receiving objects:  81% (121/149)
2024-06-06T14:42:01.2608545Z Receiving objects:  82% (123/149)
2024-06-06T14:42:01.2609274Z Receiving objects:  83% (124/149)
2024-06-06T14:42:01.2610006Z Receiving objects:  84% (126/149)
2024-06-06T14:42:01.2610902Z Receiving objects:  85% (127/149)
2024-06-06T14:42:01.2611613Z Receiving objects:  86% (129/149)
2024-06-06T14:42:01.2612373Z Receiving objects:  87% (130/149)
2024-06-06T14:42:01.2613561Z Receiving objects:  88% (132/149)
2024-06-06T14:42:01.2614260Z Receiving objects:  89% (133/149)
2024-06-06T14:42:01.2614967Z Receiving objects:  90% (135/149)
2024-06-06T14:42:01.2615754Z Receiving objects:  91% (136/149)
2024-06-06T14:42:01.2616591Z Receiving objects:  92% (138/149)
2024-06-06T14:42:01.2617350Z Receiving objects:  93% (139/149)
2024-06-06T14:42:01.2618098Z Receiving objects:  94% (141/149)
2024-06-06T14:42:01.2618511Z Receiving objects:  95% (142/149)
2024-06-06T14:42:01.2619503Z Receiving objects:  96% (144/149)
2024-06-06T14:42:01.2620281Z Receiving objects:  97% (145/149)
2024-06-06T14:42:01.2620914Z Receiving objects:  98% (147/149)
2024-06-06T14:42:01.2621547Z Receiving objects:  99% (148/149)
2024-06-06T14:42:01.2622251Z Receiving objects: 100% (149/149)
2024-06-06T14:42:01.2623019Z Receiving objects: 100% (149/149), 592.08 KiB | 7.05 MiB/s, done.
2024-06-06T14:42:01.2702620Z From https://github.com/RPi-Distro/pi-gen
2024-06-06T14:42:01.2703923Z  * [new tag]         2023-05-03-raspios-buster -> 2023-05-03-raspios-buster
2024-06-06T14:42:01.2732939Z [command]/usr/bin/git tag --list 2023-05-03-raspios-buster
2024-06-06T14:42:01.2772989Z 2023-05-03-raspios-buster
2024-06-06T14:42:01.2781152Z [command]/usr/bin/git checkout --force --progress 2023-05-03-raspios-buster
2024-06-06T14:42:01.2902036Z Note: switching to '2023-05-03-raspios-buster'.
2024-06-06T14:42:01.2902593Z 
2024-06-06T14:42:01.2903330Z You are in 'detached HEAD' state. You can look around, make experimental
2024-06-06T14:42:01.2904283Z changes and commit them, and you can discard any commits you make in this
2024-06-06T14:42:01.2905565Z state without impacting any branches by switching back to a branch.
2024-06-06T14:42:01.2906469Z 
2024-06-06T14:42:01.2907152Z If you want to create a new branch to retain commits you create, you may
2024-06-06T14:42:01.2908545Z do so (now or later) by using -c with the switch command. Example:
2024-06-06T14:42:01.2909237Z 
2024-06-06T14:42:01.2909643Z   git switch -c <new-branch-name>
2024-06-06T14:42:01.2910085Z 
2024-06-06T14:42:01.2910511Z Or undo this operation with:
2024-06-06T14:42:01.2910967Z 
2024-06-06T14:42:01.2911198Z   git switch -
2024-06-06T14:42:01.2911500Z 
2024-06-06T14:42:01.2912025Z Turn off this advice by setting config variable advice.detachedHead to false
2024-06-06T14:42:01.2913125Z 
2024-06-06T14:42:01.2913476Z HEAD is now at 638c752 Update release notes
2024-06-06T14:42:01.2915419Z ##[endgroup]
2024-06-06T14:42:01.2916816Z ##[group]Installing build dependencies on host
2024-06-06T14:42:01.2946202Z [command]/usr/bin/sudo -E apt-get -qq -o Dpkg::Use-Pty=0 update
2024-06-06T14:42:07.8817136Z [command]/usr/bin/sudo -E apt-get -qq -o Dpkg::Use-Pty=0 --no-install-recommends --no-install-suggests install -y binfmt-support qemu-user-static qemu-utils nbd-server nbd-client openssh-client quilt parted coreutils debootstrap zerofree zip dosfstools libcap2-bin libarchive-tools grep rsync xz-utils curl xxd file git kmod bc kpartx pigz
2024-06-06T14:42:10.0220707Z Preconfiguring packages ...
2024-06-06T14:42:10.3599278Z (Reading database ... 269491 files and directories currently installed.)
2024-06-06T14:42:10.3656992Z Preparing to unpack .../00-xxd_2%3a8.2.3995-1ubuntu2.17_amd64.deb ...
2024-06-06T14:42:10.3704522Z Unpacking xxd (2:8.2.3995-1ubuntu2.17) over (2:8.2.3995-1ubuntu2.16) ...
2024-06-06T14:42:10.4050241Z Selecting previously unselected package diffstat.
2024-06-06T14:42:10.4212727Z Preparing to unpack .../01-diffstat_1.64-1build2_amd64.deb ...
2024-06-06T14:42:10.4255327Z Unpacking diffstat (1.64-1build2) ...
2024-06-06T14:42:10.4498068Z Selecting previously unselected package gettext.
2024-06-06T14:42:10.4658129Z Preparing to unpack .../02-gettext_0.21-4ubuntu4_amd64.deb ...
2024-06-06T14:42:10.4674386Z Unpacking gettext (0.21-4ubuntu4) ...
2024-06-06T14:42:10.5384201Z Preparing to unpack .../03-libarchive13_3.6.0-1ubuntu1.1_amd64.deb ...
2024-06-06T14:42:10.5626113Z Unpacking libarchive13:amd64 (3.6.0-1ubuntu1.1) over (3.6.0-1ubuntu1) ...
2024-06-06T14:42:10.5963352Z Selecting previously unselected package libarchive-tools.
2024-06-06T14:42:10.6123674Z Preparing to unpack .../04-libarchive-tools_3.6.0-1ubuntu1.1_amd64.deb ...
2024-06-06T14:42:10.6130730Z Unpacking libarchive-tools (3.6.0-1ubuntu1.1) ...
2024-06-06T14:42:10.6396088Z Selecting previously unselected package liburing2:amd64.
2024-06-06T14:42:10.6562261Z Preparing to unpack .../05-liburing2_2.1-2build1_amd64.deb ...
2024-06-06T14:42:10.6572288Z Unpacking liburing2:amd64 (2.1-2build1) ...
2024-06-06T14:42:10.6834851Z Selecting previously unselected package nbd-client.
2024-06-06T14:42:10.7002686Z Preparing to unpack .../06-nbd-client_1%3a3.23-3ubuntu1.22.04.1_amd64.deb ...
2024-06-06T14:42:10.7067463Z Unpacking nbd-client (1:3.23-3ubuntu1.22.04.1) ...
2024-06-06T14:42:10.7354580Z Selecting previously unselected package nbd-server.
2024-06-06T14:42:10.7521925Z Preparing to unpack .../07-nbd-server_1%3a3.23-3ubuntu1.22.04.1_amd64.deb ...
2024-06-06T14:42:10.7531118Z Unpacking nbd-server (1:3.23-3ubuntu1.22.04.1) ...
2024-06-06T14:42:10.7801582Z Selecting previously unselected package qemu-user-static.
2024-06-06T14:42:10.7964378Z Preparing to unpack .../08-qemu-user-static_1%3a6.2+dfsg-2ubuntu6.21_amd64.deb ...
2024-06-06T14:42:10.7998677Z Unpacking qemu-user-static (1:6.2+dfsg-2ubuntu6.21) ...
2024-06-06T14:42:11.2655822Z Selecting previously unselected package qemu-utils.
2024-06-06T14:42:11.2817234Z Preparing to unpack .../09-qemu-utils_1%3a6.2+dfsg-2ubuntu6.21_amd64.deb ...
2024-06-06T14:42:11.2824349Z Unpacking qemu-utils (1:6.2+dfsg-2ubuntu6.21) ...
2024-06-06T14:42:11.3357236Z Selecting previously unselected package quilt.
2024-06-06T14:42:11.3517476Z Preparing to unpack .../10-quilt_0.66-2.1_all.deb ...
2024-06-06T14:42:11.3592915Z Unpacking quilt (0.66-2.1) ...
2024-06-06T14:42:11.4110814Z Selecting previously unselected package debootstrap.
2024-06-06T14:42:11.4276116Z Preparing to unpack .../11-debootstrap_1.0.126+nmu1ubuntu0.7_all.deb ...
2024-06-06T14:42:11.4283744Z Unpacking debootstrap (1.0.126+nmu1ubuntu0.7) ...
2024-06-06T14:42:11.4844453Z Setting up debootstrap (1.0.126+nmu1ubuntu0.7) ...
2024-06-06T14:42:11.4868074Z Setting up gettext (0.21-4ubuntu4) ...
2024-06-06T14:42:11.4891931Z Setting up libarchive13:amd64 (3.6.0-1ubuntu1.1) ...
2024-06-06T14:42:11.4913477Z Setting up qemu-user-static (1:6.2+dfsg-2ubuntu6.21) ...
2024-06-06T14:42:11.5282940Z Setting up xxd (2:8.2.3995-1ubuntu2.17) ...
2024-06-06T14:42:11.5304082Z Setting up nbd-server (1:3.23-3ubuntu1.22.04.1) ...
2024-06-06T14:42:11.6667992Z 
2024-06-06T14:42:11.6669377Z Creating config file /etc/nbd-server/config with new version
2024-06-06T14:42:11.7327041Z Adding system user `nbd' (UID 118) ...
2024-06-06T14:42:11.7327845Z Adding new group `nbd' (GID 128) ...
2024-06-06T14:42:11.7420444Z Adding new user `nbd' (UID 118) with group `nbd' ...
2024-06-06T14:42:11.7663380Z Not creating home directory `/etc/nbd-server'.
2024-06-06T14:42:12.0737281Z Setting up diffstat (1.64-1build2) ...
2024-06-06T14:42:12.0762568Z Setting up nbd-client (1:3.23-3ubuntu1.22.04.1) ...
2024-06-06T14:42:12.2007923Z update-initramfs: deferring update (trigger activated)
2024-06-06T14:42:12.2070513Z update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
2024-06-06T14:42:12.4662540Z Setting up liburing2:amd64 (2.1-2build1) ...
2024-06-06T14:42:12.4685145Z Setting up libarchive-tools (3.6.0-1ubuntu1.1) ...
2024-06-06T14:42:12.4704878Z Setting up quilt (0.66-2.1) ...
2024-06-06T14:42:12.4792091Z Setting up qemu-utils (1:6.2+dfsg-2ubuntu6.21) ...
2024-06-06T14:42:12.4819182Z Processing triggers for initramfs-tools (0.140ubuntu13.4) ...
2024-06-06T14:42:12.5468370Z update-initramfs: Generating /boot/initrd.img-6.5.0-1021-azure
2024-06-06T14:42:21.3326773Z Processing triggers for libc-bin (2.35-0ubuntu3.7) ...
2024-06-06T14:42:21.3579825Z Processing triggers for mandb (2.10.2-1) ...
2024-06-06T14:42:21.7813952Z Processing triggers for install-info (6.8-4build1) ...
2024-06-06T14:42:22.1233939Z NEEDRESTART-VER: 3.5
2024-06-06T14:42:22.3926698Z NEEDRESTART-KCUR: 6.5.0-1021-azure
2024-06-06T14:42:22.3927239Z NEEDRESTART-KEXP: 6.5.0-1021-azure
2024-06-06T14:42:22.3927671Z NEEDRESTART-KSTA: 1
2024-06-06T14:42:24.4980170Z [command]/usr/bin/sudo modprobe -a binfmt_misc nbd
2024-06-06T14:42:24.5197391Z Installed packages on host: binfmt-support qemu-user-static qemu-utils nbd-server nbd-client openssh-client quilt parted coreutils debootstrap zerofree zip dosfstools libcap2-bin libarchive-tools grep rsync xz-utils curl xxd file git kmod bc kpartx pigz
2024-06-06T14:42:24.5200560Z Loaded modules on host: binfmt_misc nbd
2024-06-06T14:42:24.5202441Z ##[endgroup]
2024-06-06T14:42:24.5203677Z ##[group]Running pi-gen build
2024-06-06T14:42:24.5210301Z ##[endgroup]
2024-06-06T14:42:24.5244720Z ##[error]pi-gen directory at pi-gen is invalid
undefined
2024-06-06T14:42:24.5751742Z Post job cleanup.
2024-06-06T14:42:24.6554523Z ##[group]Removing pi-gen build container
2024-06-06T14:42:24.6598394Z [command]/usr/bin/docker rm -v pigen_work
2024-06-06T14:42:24.7008894Z Error response from daemon: No such container: pigen_work
2024-06-06T14:42:24.7038105Z ##[endgroup]
2024-06-06T14:42:24.7290222Z Cleaning up orphan processes

Additional context
Add any other context about the problem here.

add "archive_filename" variable

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

When an image is built, pi-gen automatically adds a date to the 'image_name' variable
image_name: my_image
results in an image named
image_2023-03-23-my_image.img

Describe the solution you'd like
A clear and concise description of what you want to happen.

I would like to have another variable available in this action that is available in the pi-gen config file.
the ARCHIVE_FILENAME variable shown here lets one set the final image name with what ever prefix/suffix that the user wants.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

An alternative would be to fork the RPi-Distro/pi-gen repository and maintain a fork just to get a custom image name.

Additional context
Add any other context or screenshots about the feature request here.

I would fork this and do a PR, but I am not familiar with how all of these work exactly. If a change is made, I can compare the changes and learn how to fix/add and PR upstream

Add example for exporting multiple image stages

Thank you for such a helpful action!

I'm building an image that just adds one main package (and its dependencies) and then the package's config, as well as updating /boot/firmware/config.txt.

I would like to export the Lite and Full images, but I'm not sure what the best approach is without repeating the whole job.

Is there a better way to do it than something like the following:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: usimd/pi-gen-action@v1
        id: base
        with:
          stage-list: stage0 stage1 ./custom-stage

    - uses: usimd/pi-gen-action@v1
        id: stage2
        with:
          stage-list: stage2
              - uses: usimd/pi-gen-action@v1

    - uses: actions/upload-artifact@v4
      with:
        name: lite-image
        path: ${{ steps.stage2.outputs.image-path }}

    - uses: usimd/pi-gen-action@v1
        id: stage3
        with:
          stage-list: stage3

    - uses: actions/upload-artifact@v4
      with:
        name: full-image
        path: ${{ steps.stage3.outputs.image-path }}

docker: command not found

Describe the bug
As part of my build process I need to use docker commands. When I try to use docker or /usr/bin/docker its not available. I explicitly install it in a previous step as part of my github action, and it works fine everywhere except in 00-run.sh scripts.

To Reproduce
Steps to reproduce the behavior:

- run: curl -fsSL https://get.docker.com | sh
- uses: usimd/pi-gen-action@v1
   id: build
   with:
     pi-gen-dir: pi-gen
     pi-gen-version: arm64
     export-last-stage-only: true
     stage-list: clean-stage stage0 stage1 stage2 ./my-stage
     github-token: ${{ github.token }}
     image-name: foo

My custom stage has this in 00-run.sh

#!/bin/bash -e

on_chroot << EOF
    curl -fsSL https://get.docker.com | sh
    usermod -aG docker ${FIRST_USER_NAME}
EOF

docker info # <- this line works fine in pi-gen, but fails in the action

Expected behavior
docker should be available to use

Logs

./00-run.sh: line 20: docker: command not found

Additional context
Add any other context about the problem here.

bookworm not working?

I am trying to upgrade an image using bookworm instead of bullseye

To Reproduce
Steps to reproduce the behavior:

  • workflow configuration
  • action configuration of failed job
  • used action runner

workflow config

name: Build raspbian-ovos
on:
  workflow_dispatch:

jobs:
  pi-gen-ovos:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.
      - uses: usimd/[email protected]
        id: build
        with:
          # Final image name.
          image-name: raspbian-ovos-dev

          # List of stage name to execute in given order. Relative and absolute paths to
          # custom stage directories are allowed here. Note that by default pi-gen exports
          # images in stage2 (lite), stage4 and stage5. You probably want to hook in custom
          # stages before one of the exported stages. Otherwise, the action will make sure
          # any custom stage will include an image export directive.
          stage-list: stage0 stage1 stage2 ./stage-prep ./stage-core ./stage-phal ./stage-audio ./stage-skills ./stage-hivemind ./stage-finalize

          # Host name of the image.
          hostname: raspOvos

          # Default keyboard keymap.
          keyboard-keymap: us

          # Default keyboard layout.
          keyboard-layout: English (US)

          # Default locale of the system image.
          locale: en_US.UTF-8

          # Default wifi country
          wpa-country: US

          # Default timezone
          timezone: America/Denver

          # Name of the initial user account.
          username: ovos

          # Password of the intial user account, locked if empty.
          password: 'ovos'

          # Compression to apply on final image (either "none", "zip", "xz" or "gz").
          compression: zip

          # Compression level to be used. From 0 to 9 (refer to the tool man page for more
          # information on this. Usually 0 is no compression but very fast, up to 9 with the
          # best compression but very slow).
          compression-level: 6

          # Disable the renaming of the first user during the first boot. This make it so
          # 'username' stays activated. 'username' must be set for this to work. Please be
          # aware of the implied security risk of defining a default username and password
          # for your devices.
          disable-first-boot-user-rename: 1

          # Additional options to include in PIGEN_DOCKER_OPTS
          docker-opts: ''

          # Set whether a NOOBS image should be built as well. If enabled, the output
          # directory containing the NOOBS files will be saved as output variable
          # 'image-noobs-path'.
          enable-noobs: false

          # Enable SSH access to Pi.
          enable-ssh: 1

          # If this feature is enabled, the action will configure pi-gen to not export any
          # stage as image but the last one defined in property 'stage-list'. This is
          # helpful when building a single image flavor (in contrast to building a
          # lite/server and full-blown desktop image), since it speeds up the build process
          # significantly.
          export-last-stage-only: true

          # Comma or whitespace separated list of additional packages to install on host
          # before running pi-gen. Use this list to add any packages your custom stages may
          # require. Note that this is not affecting the final image. In order to add
          # additional packages, you need to add a respective 'XX-packages' file in your
          # custom stage.
          extra-host-dependencies: ''

          # Comma or whitespace separated list of additional modules to load on host before
          # running pi-gen. If your custom stage requires additional software or kernel
          # modules to be loaded, add them here. Note that this is not meant to configure
          # modules to be loaded in the target image.
          extra-host-modules: ''

          # Token to use for checking out pi-gen repo.
          github-token: ${{ github.token }}

          # Path where selected pi-gen ref will be checked out to. If the path does not yet
          # exist, it will be created (including its parents).
          pi-gen-dir: pi-gen

          # GitHub repository to fetch pi-gen from, must be a fork from RPi-Distro/pi-gen.

          pi-gen-repository: RPi-Distro/pi-gen

          # Release version of pi-gen to use. This can both be a branch or tag name known in
          # the pi-gen repository.
          pi-gen-version: arm64

          # The release version to build images against. Valid values are jessie, stretch,
          # buster, bullseye, and testing.
          release: bookworm

          # Setting to `1` will prevent pi-gen from dropping the "capabilities" feature.
          # Generating the root filesystem with capabilities enabled and running it from a
          # filesystem that does not support capabilities (like NFS) can cause issues. Only
          # enable this if you understand what it is.
          setfcap: ''

          # Use qcow2 images to reduce space and runtime requirements.
          use-qcow2: 1

          # Print all output from pi-gen.
          verbose-output: true

      - name: copy file via ssh password
        uses: appleboy/scp-action@master
        with:
          host: ovosimages.ziggyai.online
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: ${{ secrets.SSH_PORT }}
          source: "${{ steps.build.outputs.image-path }}"
          target: "raspbian/development"
          strip_components: 4

error


Run usimd/[email protected]
  with:
    image-name: raspbian-ovos-dev
    stage-list: stage0 stage1 stage2 ./stage-prep ./stage-core ./stage-phal ./stage-audio ./stage-skills ./stage-hivemind ./stage-finalize
    hostname: raspOvos
    keyboard-keymap: us
    keyboard-layout: English (US)
    locale: en_US.UTF-8
    wpa-country: US
    timezone: America/Denver
    username: ovos
    password: ovos
    compression: zip
    compression-level: 6
    disable-first-boot-user-rename: 1
    enable-noobs: false
    enable-ssh: 1
    export-last-stage-only: true
    github-token: ***
    pi-gen-dir: pi-gen
    pi-gen-repository: RPi-Distro/pi-gen
    pi-gen-version: arm64
    release: bookworm
    use-qcow2: 1
    verbose-output: true
Warning: The `save-state` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
Validating input and generating pi-gen config
Error: release must be one of ["bullseye", "jessie", "stretch", "buster", "testing"]

Expected behavior
A clear and concise description of what you expected to happen.

Logs
If possible, share (verbose/debug) logs of your failed workflow job.

Additional context
Add any other context about the problem here.

`testing` unsupported

Describe the bug

Raspberry Pi does not have a testing distribution setup, so if you choose testing, it will fail trying to find the repository

E: The repository 'http://archive.raspberrypi.org/debian testing Release' does not have a Release file.

To Reproduce

# .github/workflow/build-image.yaml
name: build solar pi image

on: ['pull_request', 'workflow_dispatch']

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v3

      - id: get_version
        uses: battila7/get-version-action@v2

      # create 'solar-pi-stage' stage 
      - run: |
          mkdir -p solar-pi-stage/00-install-podman &&
          {
          cat > solar-pi-stage/00-install-podman/00-packages <<-EOF
          python3
          python3-pip
          podman
          EOF
          } &&
          {
          cat > solar-pi-stage/00-install-podman/01-install-podman-compose.sh <<-EOF
          #!/bin/bash
          python -m pip install https://github.com/containers/podman-compose/archive/devel.tar.gz
          EOF
          } &&
          chmod +x solar-pi-stage/00-install-podman/01-install-podman-compose.sh &&
          {
          cat > solar-pi-stage/prerun.sh <<-EOF
          #!/bin/bash -e
          if [ ! -d "\${ROOTFS_DIR}" ]; then
            copy_previous
          fi
          EOF
          } &&
          chmod +x solar-pi-stage/prerun.sh

      - name: build image
        uses: usimd/pi-gen-action@v1
        id: build
        with:
          ## USER SETTINGS
          enable-ssh: 1
          hostname: solar-pi
          username: solar
          password: 'solar-power-for-artists'

          keyboard-keymap: us
          keyboard-layout: English (US)
          locale: en_US.UTF-8
          timezone: America/New_York

          # FIXME: add as user input
          wpa-country: 'US'
          #wpa-essid: ''
          #wpa-password: ''

          ## BUILD + OUTPUT SETTINGS
          compression: xz
          enable-noobs: false
          github-token: ${{ github.token }}
          image-name: 'solar-pi'
          pi-gen-version: arm64
          use-qcow2: 1

          release: testing
          stage-list: stage0 stage1 stage2 ./solar-pi-stage


      - uses: actions/upload-artifact@v3
        with:
          name: pi-gen-image
          path: ${{ steps.build.outputs.image-path }}

      - name: release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          name: solar-pi image ${{ steps.get_version.outputs.version-without-v }}
          files: ${{ steps.build.outputs.image-path }}

Expected behavior
Testing should work - I think this would require grabbing testing from the Debian repositories, but I am not sure if we can mix-and-match.

Logs

Logs available https://github.com/jedahan/solar-protocol/actions/runs/3777785088/jobs/6421788136#step:5:70

Adding a custom stage `stage4a` fails

Describe the bug
I would like to add a custom stage stage4a after the default stage4.

To Reproduce

stage-list: stage0 stage1 stage2 stage3 stage4 ./stage4a

https://github.com/probonopd/custom-raspberry-pi-os/blob/cd0ee0734602d6b910976373c57ae3ed308ec67d/.github/workflows/pi-gen.yml#L21

or

stage-list: stage0 stage1 stage2 stage3 stage4 stage4a

https://github.com/probonopd/custom-raspberry-pi-os/blob/65a99d75c62a424ab3a626e4a3d3c7e1e5b07cfb/.github/workflows/pi-gen.yml#L21

Expected behavior
stage0 stage1 stage2 stage3 stage4 run from the default pi-gen, then my custom stage4a runs from my repository

Logs

Run usimd/pi-gen-action@v1
Validating input and generating pi-gen config
Error: stage-list must contain valid pi-gen stage names "stage[0-5]" and/or valid directories

Additional context
Please document a simple example where a custom stage is run after the default stages.

Should the IMG_DATE config variable be supported ?

With the IMG_DATE config variable set, the image name could be fixed so that it doesn't change with each build, making it easier for further steps to leverage the image.

ie

-rw-r--r--  1 runner docker  92K Nov 13 04:22 Raspbian-Homebridge-bookworm-64-bit.info
[5731](https://github.com/NorthernMan54/homebridge-raspbian-image/actions/runs/6857431955/job/18646515236#step:3:5735)
  -rw-r--r--  1 runner docker 381K Nov 13 04:24 build-docker.log
[5732](https://github.com/NorthernMan54/homebridge-raspbian-image/actions/runs/6857431955/job/18646515236#step:3:5736)
  -rw-r--r--  1 runner docker  15K Nov 13 04:24 build.log
[5733](https://github.com/NorthernMan54/homebridge-raspbian-image/actions/runs/6857431955/job/18646515236#step:3:5737)
  -rw-r--r--  1 runner docker 874M Nov 13 04:24 image_Raspbian-Homebridge-bookworm-64-bit.zip

VS

-rw-r--r-- 1 runner docker 92K Nov 12 23:56 2023-11-12-Homebridge-64bit.info
6054
-rw-r--r-- 1 runner docker 416K Nov 12 23:58 build-docker.log
6055
-rw-r--r-- 1 runner docker 15K Nov 12 23:58 build.log
6056
-rw-r--r-- 1 runner docker 874M Nov 12 23:58 image_2023-11-12-Homebridge-64bit.zip

FYI - This was built by setting docker-opts: '--env IMG_DATE=Raspbian' as a kludge

Verbose pi-gen stage logs?

Is your feature request related to a problem? Please describe.
I am trying to figure out why my build is failing, and debug logs only show Begin and End, but not what happens in between

Describe the solution you'd like
When enabling debug logging with the github action, it would be nice to see each command that is being run, especially what fails

Describe alternatives you've considered
Trying to run locally, but its difficult on macOS. Maybe there is a way to download verbose logs?

Additional context
Add any other context or screenshots about the feature request here.

git not found

Not sure if this goes here or in the actual pi-gen repo, but I will start here.

Describe the bug
While building an image, it abruptly stops and says that git is not installed on this system.

To Reproduce
Steps to reproduce the behavior:
Work flow file

name: Build raspOVOS-headless
on:
  workflow_dispatch:

jobs:
  pi-gen-ovos:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.
      - uses: usimd/pi-gen-action@v1
        id: build
        with:
          # Final image name.
          image-name: raspOVOS-headless-dev

          # List of stage name to execute in given order. Relative and absolute paths to
          # custom stage directories are allowed here. Note that by default pi-gen exports
          # images in stage2 (lite), stage4 and stage5. You probably want to hook in custom
          # stages before one of the exported stages. Otherwise, the action will make sure
          # any custom stage will include an image export directive.
          stage-list: stage0 stage1 stage2 ./stage-prep ./stage-splash ./stage-core ./stage-hivemind ./stage-skills ./stage-audio ./stage-speech ./stage-listener ./stage-ggwave ./stage-phal ./stage-finalize

          # Host name of the image.
          hostname: raspOvos

          # Default keyboard keymap.
          keyboard-keymap: us

          # Default keyboard layout.
          keyboard-layout: English (US)

          # Default locale of the system image.
          locale: en_US.UTF-8

          # Default wifi country
          wpa-country: US

          # Default timezone
          timezone: America/Denver

          # Name of the initial user account.
          username: ovos

          # Password of the intial user account, locked if empty.
          password: 'ovos'

          # Compression to apply on final image (either "none", "zip", "xz" or "gz").
          compression: zip

          # Compression level to be used. From 0 to 9 (refer to the tool man page for more
          # information on this. Usually 0 is no compression but very fast, up to 9 with the
          # best compression but very slow).
          compression-level: 6

          # Disable the renaming of the first user during the first boot. This make it so
          # 'username' stays activated. 'username' must be set for this to work. Please be
          # aware of the implied security risk of defining a default username and password
          # for your devices.
          disable-first-boot-user-rename: 1

          # Additional options to include in PIGEN_DOCKER_OPTS
          docker-opts: 'ARCHIVE_FILENAME="raspOVOS-headless-dev"'

          # Set whether a NOOBS image should be built as well. If enabled, the output
          # directory containing the NOOBS files will be saved as output variable
          # 'image-noobs-path'.
          enable-noobs: false

          # Enable SSH access to Pi.
          enable-ssh: 1

          # If this feature is enabled, the action will configure pi-gen to not export any
          # stage as image but the last one defined in property 'stage-list'. This is
          # helpful when building a single image flavor (in contrast to building a
          # lite/server and full-blown desktop image), since it speeds up the build process
          # significantly.
          export-last-stage-only: true

          # Comma or whitespace separated list of additional packages to install on host
          # before running pi-gen. Use this list to add any packages your custom stages may
          # require. Note that this is not affecting the final image. In order to add
          # additional packages, you need to add a respective 'XX-packages' file in your
          # custom stage.
          extra-host-dependencies: ''

          # Comma or whitespace separated list of additional modules to load on host before
          # running pi-gen. If your custom stage requires additional software or kernel
          # modules to be loaded, add them here. Note that this is not meant to configure
          # modules to be loaded in the target image.
          extra-host-modules: ''

          # Token to use for checking out pi-gen repo.
          github-token: ${{ github.token }}

          # Path where selected pi-gen ref will be checked out to. If the path does not yet
          # exist, it will be created (including its parents).
          pi-gen-dir: pi-gen

          # GitHub repository to fetch pi-gen from, must be a fork from RPi-Distro/pi-gen.

          pi-gen-repository: RPi-Distro/pi-gen

          # Release version of pi-gen to use. This can both be a branch or tag name known in
          # the pi-gen repository.
          pi-gen-version: arm64

          # The release version to build images against. Valid values are jessie, stretch,
          # buster, bullseye, and testing.
          release: bookworm

          # Setting to `1` will prevent pi-gen from dropping the "capabilities" feature.
          # Generating the root filesystem with capabilities enabled and running it from a
          # filesystem that does not support capabilities (like NFS) can cause issues. Only
          # enable this if you understand what it is.
          setfcap: ''

          # Use qcow2 images to reduce space and runtime requirements.
          use-qcow2: 1

          # Print all output from pi-gen.
          verbose-output: true

      - name: copy file via ssh password
        uses: appleboy/scp-action@master
        with:
          host: ovosimages.ziggyai.online
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: ${{ secrets.SSH_PORT }}
          source: "${{ steps.build.outputs.image-path }}"
          target: "raspbian/development"
          strip_components: 4

Expected behavior
finish the build

Logs

  Warning: #9 writing image sha256:58779c163a82aca0867c81f3ad89dae9f4a29c40fe38e2429c3edcde803f6a14 done
  Warning: #9 naming to docker.io/library/pi-gen done
  Warning: #9 DONE 2.6s
  Warning: WARNING: buildx: git was not found in the system. Current commit information was not captured by the build
  Registering qemu-aarch64 for binfmt_misc...
  Warning: docker: invalid reference format: repository name must be lowercase.
  Warning: See 'docker run --help'.
  Warning: real	0m0.011s
  Warning: user	0m0.007s
  Warning: sys	0m0.007s
Error: pi-gen build failed with exit code 125
#9 naming to docker.io/library/pi-gen done
#9 DONE 2.6s
WARNING: buildx: git was not found in the system. Current commit information was not captured by the build
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.

tee: /pi-gen/work/<repo>/build.log: No such file or directory

Thanks for the GitHub Action - this is very handy. But every time I run it on abevoelker/pi-scan I seem to be getting this error:

Describe the bug

Error: pi-gen build failed with exit code 1
tee: /pi-gen/work/pi-scan/build.log: No such file or directory

To Reproduce
Steps to reproduce the behavior:

This is my GitHub Action config:

name: Build Pi Scan image
on: workflow_dispatch

jobs:
  build_image:
    strategy:
      matrix:
        build_input: [mouse, touch]
        build_arch: [arm32, arm64]
    name: Build Pi Scan image
    runs-on: ubuntu-latest
    env:
      BUILD_INPUT: ${{ matrix.build_input }}
    steps:
      - uses: actions/checkout@v2
      - run: |
          cp -a "config/${BUILD_INPUT}.ini" "build-image/stage-piscan/04-install-setup/files/config.ini"
      - uses: usimd/pi-gen-action@v1
        id: build
        with:
          disable-first-boot-user-rename: 1
          export-last-stage-only: true
          hostname: raspberrypi
          image-name: 'pi-scan'
          keyboard-keymap: us
          keyboard-layout: English (US)
          locale: en_US.UTF-8
          timezone: America/Chicago
          password: ' '
          stage-list: stage0 stage1 stage2 ./build-image/stage-piscan
          pi-gen-version: ${{ matrix.build_arch == 'arm32' && 'master' || 'arm64' }}
          # these two options are just for debugging the GitHub Action failure:
          verbose-output: true
          pi-gen-dir: ${{ github.workspace }}/pi-gennnn
      - uses: actions/upload-artifact@v3
        with:
          name: pi-scan-${{ matrix.build_input }}-${{ matrix.build_arch }}
          path: ${{ steps.build.outputs.image-path }}

I've tried disabling verbose-output as well as setting pi-gen-dir to a different directory, but it still seems to error out with the same path error referencing /pi-gen/work/pi-scan/build.log

Expected behavior
Build runs to completion

Logs

...
  Setting up libperl5.32:amd64 (5.32.1-4+deb11u2) ...
  Setting up gpgconf (2.2.27-2+deb11u2) ...
  Setting up libcurl4:amd64 (7.74.0-1.3+deb11u3) ...
  Setting up curl (7.74.0-1.3+deb11u3) ...
  Setting up qemu-utils (1:5.2+dfsg-11+deb11u2) ...
  Setting up gpg (2.2.27-2+deb11u2) ...
  Setting up rsync (3.2.3-4+deb11u1) ...
  invoke-rc.d: could not determine current runlevel
  invoke-rc.d: policy-rc.d denied execution of start.
  Setting up libarchive-tools (3.4.3-2+deb11u1) ...
  Setting up perl (5.32.1-4+deb11u2) ...
  Setting up quilt (0.66-2.1) ...
  Setting up liberror-perl (0.17029-1) ...
  Setting up git (1:2.30.2-1) ...
  Setting up libdevmapper1.02.1:amd64 (2:1.02.175-2.1) ...
  Setting up libparted2:amd64 (3.4-1) ...
  Setting up dmsetup (2:1.02.175-2.1) ...
  Setting up kpartx (0.8.5-2) ...
  Setting up parted (3.4-1) ...
  Processing triggers for libc-bin (2.31-13+deb11u4) ...
  Processing triggers for ca-certificates (20210119) ...
  Updating certificates in /etc/ssl/certs...
  0 added, 0 removed; done.
  Running hooks in /etc/ca-certificates/update.d...
  done.
  Removing intermediate container 58d8d6a8ae38
   ---> 7c3085149188
  Step 5/6 : COPY . /pi-gen/
   ---> 6bd157955697
  Step 6/6 : VOLUME [ "/pi-gen/work", "/pi-gen/deploy"]
   ---> Running in b3b8368661d0
  Removing intermediate container b3b8368661d0
   ---> c4fa810dceda
  Successfully built c4fa810dceda
  Successfully tagged pi-gen:latest
  To disable user rename on first boot, FIRST_USER_PASS needs to be set
  Not setting FIRST_USER_PASS makes your system vulnerable and open to cyberattacks
  Warning: tee: /pi-gen/work/pi-scan/build.log: No such file or directory
  [18:50:57] Unloading image
  Warning: real	0m0.600s
  Warning: user	0m0.034s
  Warning: sys	0m0.006s
Error: pi-gen build failed with exit code 1
tee: /pi-gen/work/pi-scan/build.log: No such file or directory

real	0m0.600s
user	0m0.034s
sys	0m0.006s

Additional context
N/A

Any idea what I'm doing wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.