This commit is contained in:
2025-09-20 00:36:05 +02:00
parent c26c025764
commit d4474814b6

View File

@@ -7,62 +7,83 @@ on:
jobs:
build-and-package:
# --- NOWA SEKCJA: STRATEGY MATRIX ---
runs-on: ubuntu-latest
strategy:
matrix:
# Definiujemy listę architektur, dla których chcemy budować
arch: [armv7, arm64]
# Używamy zmiennej z matrixa do określenia runnera
runs-on: ubuntu-latest
include:
- arch_name: arm32v7
platform: linux/arm/v7
- arch_name: arm32v6
platform: linux/arm/v6
steps:
# --- NOWY KROK: Konfiguracja QEMU ---
# Ten krok instaluje emulator, który pozwoli budować dla różnych architektur
- name: Pobieranie kodu
uses: actions/checkout@v3
- name: Ustawienie QEMU
uses: docker/setup-qemu-action@v3
- name: Dodaj klucz hosta Gitea do known_hosts
- name: Zbuduj paczkę w emulowanym kontenerze
id: build-step
run: |
mkdir -p ~/.ssh/
echo "${{ secrets.HOST_KEY }}" >> ~/.ssh/known_hosts
- name: Pobieranie kodu
uses: actions/checkout@v3
with:
ssh-key: ${{ secrets.RUNNER_SSH_KEY }}
# Definiujemy nazwy, korzystając ze zmiennych z matrixa
VERSION="${{ github.event.inputs.version }}"
ARCH_NAME="${{ matrix.arch_name }}"
PLATFORM="${{ matrix.platform }}"
CONTAINER_NAME="builder-${ARCH_NAME//\//-}"
FILENAME="HAIERPI-${VERSION}-${ARCH_NAME//\//-}.tar.gz"
IMAGE_NAME="${ARCH_NAME}/python:3.9-alpine"
- name: Ustawienie Pythona
uses: actions/setup-python@v4
with:
python-version: '3.10'
echo "Start budowania dla architektury: ${ARCH_NAME}"
echo "Używany obraz Docker: ${IMAGE_NAME}"
echo "Flaga platformy: ${PLATFORM}"
- name: Instalacja zależności
run: |
# Przekazujemy platformę do Dockera, aby zależności były instalowane dla właściwej architektury
docker run --rm --platform linux/${{ matrix.arch }} -v ${{ github.workspace }}:/ws -w /ws python:3.10-slim-bullseye /bin/bash -c "python -m venv venv && source venv/bin/activate && pip install -r requirements.txt"
# --- ZMIANA 2: Dodajemy flagę --platform do docker run ---
echo "Uruchamiam kontener budujący: ${CONTAINER_NAME}"
docker run -d --name "${CONTAINER_NAME}" --platform "${PLATFORM}" "${IMAGE_NAME}" tail -f /dev/null
# --- ZMODYFIKOWANY KROK ---
- name: Tworzenie paczki .tar.gz z wersją i architekturą
id: package-version
run: |
VERSION="${{ gitea.ref_name }}"
# Dodajemy architekturę do nazwy pliku
FILENAME="moj-projekt-${VERSION}-${{ matrix.arch }}.tar.gz"
# Reszta skryptu pozostaje bez zmian, bo korzysta z tych samych zmiennych
echo "Tworzę katalog /opt/haiertest wewnątrz kontenera..."
docker exec "${CONTAINER_NAME}" mkdir -p /opt/haiertest
echo "Kopiuję requirements.txt do kontenera..."
docker cp requirements.txt "${CONTAINER_NAME}:/opt/haiertest/"
echo "Instaluję zależności wewnątrz kontenera..."
docker exec "${CONTAINER_NAME}" /bin/sh -c "cd /opt/haiertest && python -m venv env && source env/bin/activate && pip install -r requirements.txt"
echo "Naprawiam ścieżki w środowisku venv, aby było przenośne..."
docker exec "${CONTAINER_NAME}" /bin/sh -c ' \
TARGET_PYTHON_PATH="/usr/bin/python3"; \
VENV_PATH="/opt/haiertest/env"; \
echo "Poprawiam główny link symboliczny do interpretera..."; \
PY_VERSION_LINK=$(basename $(readlink ${VENV_PATH}/bin/python3)); \
rm "${VENV_PATH}/bin/${PY_VERSION_LINK}"; \
ln -s "${TARGET_PYTHON_PATH}" "${VENV_PATH}/bin/${PY_VERSION_LINK}"; \
'
echo "Kopiuję kod aplikacji do kontenera..."
docker cp . "${CONTAINER_NAME}:/opt/haiertest/"
mkdir ../output
echo "Tworzenie archiwum: ${FILENAME}"
tar -czf ../output/"${FILENAME}" .
echo "filename=../output/${FILENAME}" >> $GITEA_OUTPUT
echo "Tworzę archiwum ${FILENAME} wewnątrz kontenera..."
docker exec "${CONTAINER_NAME}" tar --transform "s|^opt/haiertest|haiertest|" -czf "/${FILENAME}" /opt/haiertest
echo "Kopiuję gotową paczkę z kontenera..."
docker cp "${CONTAINER_NAME}:/${FILENAME}" .
echo "Sprzątam po procesie budowania..."
docker stop "${CONTAINER_NAME}"
docker rm "${CONTAINER_NAME}"
echo "filename=${FILENAME}" >> $GITEA_OUTPUT
# --- ZMODYFIKOWANY KROK ---
- name: Publikacja paczki
run: |
# ... (reszta skryptu do budowania URL bez zmian) ...
REPO_SLUG="${{ gitea.repository }}"
REPO_OWNER=$(echo $REPO_SLUG | cut -d'/' -f1)
REPO_NAME=$(echo $REPO_SLUG | cut -d'/' -f2)
PACKAGE_FILE="${{ steps.package-version.outputs.filename }}"
PACKAGE_FILE="${{ steps.build-step.outputs.filename }}"
PACKAGE_VERSION="${{ gitea.ref_name }}"
API_URL=$(echo "${{ gitea.api_url }}" | sed 's|/api/v1|/api|')