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: jobs:
build-and-package: build-and-package:
# --- NOWA SEKCJA: STRATEGY MATRIX ---
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 runs-on: ubuntu-latest
strategy:
matrix:
include:
- arch_name: arm32v7
platform: linux/arm/v7
- arch_name: arm32v6
platform: linux/arm/v6
steps: steps:
# --- NOWY KROK: Konfiguracja QEMU --- - name: Pobieranie kodu
# Ten krok instaluje emulator, który pozwoli budować dla różnych architektur uses: actions/checkout@v3
- name: Ustawienie QEMU - name: Ustawienie QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
- name: Dodaj klucz hosta Gitea do known_hosts - name: Zbuduj paczkę w emulowanym kontenerze
id: build-step
run: | run: |
mkdir -p ~/.ssh/ # Definiujemy nazwy, korzystając ze zmiennych z matrixa
echo "${{ secrets.HOST_KEY }}" >> ~/.ssh/known_hosts 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: Pobieranie kodu echo "Start budowania dla architektury: ${ARCH_NAME}"
uses: actions/checkout@v3 echo "Używany obraz Docker: ${IMAGE_NAME}"
with: echo "Flaga platformy: ${PLATFORM}"
ssh-key: ${{ secrets.RUNNER_SSH_KEY }}
- name: Ustawienie Pythona # --- ZMIANA 2: Dodajemy flagę --platform do docker run ---
uses: actions/setup-python@v4 echo "Uruchamiam kontener budujący: ${CONTAINER_NAME}"
with: docker run -d --name "${CONTAINER_NAME}" --platform "${PLATFORM}" "${IMAGE_NAME}" tail -f /dev/null
python-version: '3.10'
- name: Instalacja zależności # Reszta skryptu pozostaje bez zmian, bo korzysta z tych samych zmiennych
run: | echo "Tworzę katalog /opt/haiertest wewnątrz kontenera..."
# Przekazujemy platformę do Dockera, aby zależności były instalowane dla właściwej architektury docker exec "${CONTAINER_NAME}" mkdir -p /opt/haiertest
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"
# --- ZMODYFIKOWANY KROK --- echo "Kopiuję requirements.txt do kontenera..."
- name: Tworzenie paczki .tar.gz z wersją i architekturą docker cp requirements.txt "${CONTAINER_NAME}:/opt/haiertest/"
id: package-version
run: | echo "Instaluję zależności wewnątrz kontenera..."
VERSION="${{ gitea.ref_name }}" docker exec "${CONTAINER_NAME}" /bin/sh -c "cd /opt/haiertest && python -m venv env && source env/bin/activate && pip install -r requirements.txt"
# Dodajemy architekturę do nazwy pliku
FILENAME="moj-projekt-${VERSION}-${{ matrix.arch }}.tar.gz" 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/"
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
mkdir ../output
echo "Tworzenie archiwum: ${FILENAME}"
tar -czf ../output/"${FILENAME}" .
echo "filename=../output/${FILENAME}" >> $GITEA_OUTPUT
# --- ZMODYFIKOWANY KROK ---
- name: Publikacja paczki - name: Publikacja paczki
run: | run: |
# ... (reszta skryptu do budowania URL bez zmian) ...
REPO_SLUG="${{ gitea.repository }}" REPO_SLUG="${{ gitea.repository }}"
REPO_OWNER=$(echo $REPO_SLUG | cut -d'/' -f1) REPO_OWNER=$(echo $REPO_SLUG | cut -d'/' -f1)
REPO_NAME=$(echo $REPO_SLUG | cut -d'/' -f2) 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 }}" PACKAGE_VERSION="${{ gitea.ref_name }}"
API_URL=$(echo "${{ gitea.api_url }}" | sed 's|/api/v1|/api|') API_URL=$(echo "${{ gitea.api_url }}" | sed 's|/api/v1|/api|')