auto
This commit is contained in:
@@ -7,62 +7,83 @@ on:
|
||||
|
||||
jobs:
|
||||
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
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
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
|
||||
# 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: Pobieranie kodu
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ssh-key: ${{ secrets.RUNNER_SSH_KEY }}
|
||||
echo "Start budowania dla architektury: ${ARCH_NAME}"
|
||||
echo "Używany obraz Docker: ${IMAGE_NAME}"
|
||||
echo "Flaga platformy: ${PLATFORM}"
|
||||
|
||||
- name: Ustawienie Pythona
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
# --- 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
|
||||
|
||||
- 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"
|
||||
# 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
|
||||
|
||||
# --- 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"
|
||||
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/"
|
||||
|
||||
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
|
||||
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|')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user