Build #105
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
user: | |
description: "Username" | |
required: true | |
default: pi | |
password: | |
description: "Password" | |
required: true | |
default: raspberrypi | |
wifi_cc: | |
description: "WiFi Country Code" | |
required: true | |
default: "US" | |
type: choice | |
options: | |
- US | |
- GB | |
- DE | |
- FR | |
- IT | |
- ES | |
- CA | |
- AU | |
- JP | |
- CN | |
- KR | |
- TW | |
- SG | |
- IN | |
- BR | |
- RU | |
- ZA | |
- SA | |
- AE | |
- EG | |
- IL | |
- TR | |
- ID | |
- TH | |
- VN | |
- PH | |
- MY | |
- MX | |
- AR | |
- CL | |
- CO | |
- PE | |
- UY | |
- EC | |
- BO | |
- PY | |
- CR | |
- PA | |
- GT | |
- HN | |
- SV | |
- NI | |
- DO | |
- JM | |
- HT | |
- CU | |
- VE | |
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 | |
PASSWORD="${{ github.event.inputs.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 [[ ${#PASSWORD} -lt 8 ]]; then | |
echo "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 }}" | |
USER="${{ github.event.inputs.user }}" | |
USERPASSWORD="${{ github.event.inputs.password }}" | |
ENTNETWORK_SSID="${{ secrets.ENTNETWORK_SSID }}" | |
ENTNETWORK_PRIORITY="${{ secrets.ENTNETWORK_PRIORITY }}" | |
ENTNETWORK_IDENTITY="${{ secrets.ENTNETWORK_IDENTITY }}" | |
ENTNETWORK_PASSWORD="${{ secrets.ENTNETWORK_PASSWORD }}" | |
WIFI_CC="${{ github.event.inputs.wifi_cc }}" | |
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 | |