Create USB setup file #154
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: Create USB setup file | |
on: | |
schedule: | |
# Run every thursday at midnight | |
- cron: '0 0 * * THU' | |
pull_request: | |
push: | |
paths: | |
- download-packages.sh | |
- .github/workflows/download-packages.yml | |
branches: | |
- master | |
workflow_dispatch: | |
env: | |
MOUNT_POINT: "/tmp/pi-top-os" | |
jobs: | |
download-packages: | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- DISTRO: "bullseye" | |
PI_TOP_OS_URL: "https://storage.googleapis.com/pt-os-release/pi-topOS-bullseye/pi-topOS_bullseye_release_armhf_2024-08-28_B66.zip" | |
PACKAGES_FOLDER_NAME: "updates" | |
COMPRESSED_UPDATES_FILENAME: "updates.tar.gz" | |
- DISTRO: "bookworm" | |
PI_TOP_OS_URL: "https://storage.googleapis.com/pt-os-release/pi-topOS-bookworm/pi-topOS_bookworm_release_armhf_2024-08-06_B62.zip" | |
PACKAGES_FOLDER_NAME: "updates_bookworm" | |
COMPRESSED_UPDATES_FILENAME: "updates_bookworm.tar.gz" | |
permissions: | |
contents: "read" | |
id-token: "write" | |
steps: | |
- name: Free disk space | |
uses: jlumbroso/free-disk-space@v1.3.1 | |
with: | |
tool-cache: false | |
android: true | |
dotnet: true | |
haskell: true | |
large-packages: false | |
docker-images: false | |
swap-storage: false | |
- name: GitHub Environment Variables Action | |
uses: FranzDiebold/github-env-vars-action@v2.7.0 | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y \ | |
systemd-container \ | |
qemu-user-static | |
- name: Get pi-topOS image filename | |
run: | | |
echo "IMAGE_FILE=$(basename ${{ matrix.PI_TOP_OS_URL }} | cut -d'.' -f1).img" >> $GITHUB_ENV | |
- name: Download pi-topOS image | |
run: | | |
wget "${{ matrix.PI_TOP_OS_URL }}" -O pi-topOS.zip | |
unzip pi-topOS.zip | |
- name: Mount OS Image root partition | |
uses: jcapona/mount-image-partition-action@v1.0 | |
with: | |
imagePath: ${{ env.IMAGE_FILE }} | |
mountPoint: ${{ env.MOUNT_POINT }} | |
partitionIndex: 4 | |
extraDiskSpace: 1024 | |
- name: Update pi-topOS container and download packages | |
run: | | |
sudo systemd-nspawn --pipe --bind "$PWD":/packages -D "${{ env.MOUNT_POINT }}" /bin/bash << EOF | |
# Update system and download packages | |
apt update | |
DEBIAN_FRONTEND=noninteractive apt dist-upgrade -y | |
cd /packages | |
ls -lh | |
bash ./download-packages.sh "${{ matrix.PACKAGES_FOLDER_NAME }}" "${{ matrix.COMPRESSED_UPDATES_FILENAME }}" | |
# Cleanup | |
apt-get clean | |
EOF | |
- name: Delete OS image to save space | |
run: | | |
sudo umount "${{ env.MOUNT_POINT }}" || true | |
rm -f "${{ env.IMAGE_FILE }}" | |
- name: List downloaded packages | |
run: | | |
ls -lh "${{ matrix.PACKAGES_FOLDER_NAME }}" | |
- name: Compress downloaded packages | |
run: | | |
mkdir -p pi-top-usb-setup | |
sudo mv ${{ matrix.PACKAGES_FOLDER_NAME }} pi-top-usb-setup/ | |
sudo chown -R $USER:$USER pi-top-usb-setup | |
sudo chmod -R 755 pi-top-usb-setup | |
tar -czvf pi-top-usb-setup-${{ matrix.DISTRO }}.tar.gz pi-top-usb-setup | |
sudo rm -rf pi-top-usb-setup | |
ls -lhR | |
- name: Upload as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: files-${{ matrix.DISTRO }} | |
path: | | |
*.list | |
pi-top-usb-setup*.tar.gz | |
- name: Authenticate with GCP | |
uses: "google-github-actions/auth@v1.1.1" | |
if: github.ref == 'refs/heads/master' | |
with: | |
credentials_json: ${{ secrets.WEB_GCR_UPLOAD_KEY }} | |
- name: Upload to GCS | |
uses: google-github-actions/upload-cloud-storage@v1.0.3 | |
if: github.ref == 'refs/heads/master' | |
with: | |
path: "." | |
glob: "pi-top-usb-setup-${{ matrix.DISTRO }}.tar.gz" | |
parent: false | |
destination: "${{ secrets.GCS_PACKAGES_UPLOAD_BUCKET }}/" | |
- name: Report to slack | |
if: github.ref == 'refs/heads/master' && always() | |
uses: slackapi/slack-github-action@v1.25.0 | |
with: | |
channel-id: 'C02UEAAHK3R' | |
slack-message: "pi-top-Offline-Updates: create-usb-setup-file workflow run for ${{ matrix.DISTRO }}.\nStatus: ${{ job.status }}\nUrl: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_PACKAGE_PROMOTER_TOKEN }} | |
create-combined-bundle-file: | |
runs-on: ubuntu-20.04 | |
needs: [download-packages] | |
steps: | |
- name: Download artifacts from previous job | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: files-* | |
- name: Extract files and combine them | |
run: | | |
mkdir -p pi-top-usb-setup | |
tar -xvf files-bullseye/pi-top-usb-setup-bullseye.tar.gz | |
tar -xvf files-bookworm/pi-top-usb-setup-bookworm.tar.gz | |
rm -rf files-* | |
tar -czvf pi-top-usb-setup.tar.gz pi-top-usb-setup | |
ls -lhR | |
rm -rf pi-top-usb-setup | |
- name: Upload as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: files-all | |
path: | | |
pi-top-usb-setup.tar.gz | |
- name: Authenticate with GCP | |
uses: "google-github-actions/auth@v1.1.1" | |
if: github.ref == 'refs/heads/master' | |
with: | |
credentials_json: ${{ secrets.WEB_GCR_UPLOAD_KEY }} | |
- name: Upload to GCS | |
uses: google-github-actions/upload-cloud-storage@v1.0.3 | |
if: github.ref == 'refs/heads/master' | |
with: | |
path: "." | |
glob: "pi-top-usb-setup.tar.gz" | |
parent: false | |
destination: "${{ secrets.GCS_PACKAGES_UPLOAD_BUCKET }}/" | |
- name: Report to slack | |
if: github.ref == 'refs/heads/master' && always() | |
uses: slackapi/slack-github-action@v1.25.0 | |
with: | |
channel-id: 'C02UEAAHK3R' | |
slack-message: "pi-top-Offline-Updates: create-usb-setup-file workflow run for combined bundle.\nStatus: ${{ job.status }}\nUrl: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_PACKAGE_PROMOTER_TOKEN }} |