Skip to content

Build

Build #120

Workflow file for this run

name: Build
on:
workflow_dispatch:
inputs:
device:
description: "Device"
required: true
default: Raspberry-Pi-5:64-bit
type: choice
options:
- Raspberry-Pi-5:64-bit
- Raspberry-Pi-5:32-bit
- Raspberry-Pi-4:64-bit
- Raspberry-Pi-4:32-bit
distribution:
description: "Distribution"
required: true
default: raspbian
type: choice
options:
- raspbian
- ubuntu
host_name:
description: "Hostname"
default: raspberrypi
required: true
admin_password:
description: "Admin Password"
required: true
default: raspberrypi
user_password:
description: "Default User Password"
required: true
default: raspberrypi
wifi_ssid:
description: "Additional Network SSID"
required: false
wifi_password:
description: "Additional Network Password"
required: false
wpa_ssid:
description: "Access Point SSID"
required: true
default: RPiAccessPoint
wpa_password:
description: "Access Point Password"
required: true
default: raspberrypi
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check secrets and inputs
run: |
# Assign inputs to variables
ADMINPASSWORD="${{ github.event.inputs.admin_password }}"
USERPASSWORD="${{ github.event.inputs.user_password }}"
WPA_PASSWORD="${{ github.event.inputs.wpa_password }}"
WIFI_SSID="${{ github.event.inputs.wifi_ssid }}"
WIFI_PASSWORD="${{ github.event.inputs.wifi_password }}"
EMAIL_ADDRESS="${{ secrets.EMAIL_ADDRESS }}"
ENTNETWORK_SSID="${{ secrets.ENTNETWORK_SSID }}"
ENTNETWORK_IDENTITY="${{ secrets.ENTNETWORK_IDENTITY }}"
ENTNETWORK_PRIORITY="${{ secrets.ENTNETWORK_PRIORITY }}"
ENTNETWORK_PASSWORD="${{ secrets.ENTNETWORK_PASSWORD }}"
SMTP_SERVER="${{ secrets.SMTP_SERVER }}"
SMTP_USERNAME="${{ secrets.SMTP_USERNAME }}"
SMTP_PASSWORD="${{ secrets.SMTP_PASSWORD }}"
# Check if EMAIL_ADDRESS secret is set
if [[ -z "$EMAIL_ADDRESS" ]]; then
echo "EMAIL_ADDRESS secret is not set, please refer to the README.md for more information. Exiting."
exit 1
fi
# Check if SMTP_SERVER, SMTP_USERNAME, and SMTP_PASSWORD secrets are set
if [[ -z "$SMTP_SERVER" || -z "$SMTP_USERNAME" || -z "$SMTP_PASSWORD" ]]; then
echo "SMTP_SERVER, SMTP_USERNAME, and SMTP_PASSWORD secrets are not set, please refer to the README.md for more information. Exiting."
exit 1
fi
# Check required inputs and secrets
if [[ (-z "$WIFI_SSID" || -z "$WIFI_PASSWORD") && ( -z "$ENTNETWORK_SSID" || -z "$ENTNETWORK_IDENTITY" || -z "$ENTNETWORK_PASSWORD" ) ]]; then
echo "Please ensure that all required secrets (ENTNETWORK_SSID, ENTNETWORK_IDENTITY, and ENTNETWORK_PASSWORD) are set for the enterprise network. If you do not want to connect to an enterprise network, please provide information for the home network. Exiting."
exit 1
fi
# Correctly validate password length
if [[ ${#ADMINPASSWORD} -lt 8 ]]; then
echo "Admin password must be at least 8 characters long. Exiting."
exit 1
fi
if [[ ${#USERPASSWORD} -lt 8 ]]; then
echo "User password must be at least 8 characters long. Exiting."
exit 1
fi
if [[ ${#WPA_PASSWORD} -lt 8 ]]; then
echo "Access Point password must be at least 8 characters long. Exiting."
exit 1
fi
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Write env variables
run: |
cat <<EOF > $(dirname main.Pifile)/.env
DEVICE="${{ github.event.inputs.device }}"
DISTRIBUTION="${{ github.event.inputs.distribution }}"
HOSTNAME="${{ github.event.inputs.host_name }}"
ADMINPASSWORD="${{ github.event.inputs.admin_password }}"
USERPASSWORD="${{ github.event.inputs.user_password }}"
ENTNETWORK_SSID="${{ secrets.ENTNETWORK_SSID }}"
ENTNETWORK_PRIORITY="${{ secrets.ENTNETWORK_PRIORITY }}"
ENTNETWORK_IDENTITY="${{ secrets.ENTNETWORK_IDENTITY }}"
ENTNETWORK_PASSWORD="${{ secrets.ENTNETWORK_PASSWORD }}"
TIMEZONE="${{ secrets.TIMEZONE }}"
KEYBOARD_LAYOUT="${{ secrets.KEYBOARD_LAYOUT }}"
KEYBOARD_MODEL="${{ secrets.KEYBOARD_MODEL }}"
HOMENETWORK_SSID="${{ github.event.inputs.wifi_ssid }}"
HOMENETWORK_PASSWORD="${{ github.event.inputs.wifi_password }}"
AP_SSID="${{ github.event.inputs.wpa_ssid }}"
AP_PASSWORD="${{ github.event.inputs.wpa_password }}"
EMAIL_ADDRESS="${{ secrets.EMAIL_ADDRESS }}"
SMTP_SERVER="${{ secrets.SMTP_SERVER }}"
SMTP_USERNAME="${{ secrets.SMTP_USERNAME }}"
SMTP_PASSWORD="${{ secrets.SMTP_PASSWORD }}"
EOF
- name: Build image
uses: Nature40/pimod@master
with:
pifile: main.Pifile
- name: Set Timestamp
id: timestamp
run: echo "timestamp=$(date +%Y-%m-%d-%H-%M-%S)" >> $GITHUB_OUTPUT
- name: Set Artifact Name
id: artifact_name
run: |
echo "name=$(echo '${{ github.event.inputs.device }}-${{ steps.timestamp.outputs.timestamp }}' | sed 's/[:"<>|*?\r\n\\\/]/-/g')" >> $GITHUB_OUTPUT
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ steps.artifact_name.outputs.name }}
path: main.img
compression-level: 9
retention-days: 5