From 858193dff5c7c6f95f89d76c615285408dda4a5b Mon Sep 17 00:00:00 2001 From: trent Date: Thu, 15 Jan 2026 20:45:40 +0000 Subject: [PATCH] Update .woodpecker.yml --- .woodpecker.yml | 106 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 86 insertions(+), 20 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 37dfdde..af5e18d 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,9 +1,4 @@ skip_clone: true -when: - event: pull_request - action: - - merge - branch: master steps: debug-location: image: alpine @@ -14,8 +9,8 @@ steps: clone-manual: image: woodpeckerci/plugin-git settings: - remote: http://gitea:3000/FA/FA_WEB.git - branch: master + remote: http://gitea:3000/${CI_REPO}.git + branch: ${CI_COMMIT_BRANCH} depth: 1 restore: image: mcr.microsoft.com/dotnet/sdk:latest @@ -78,6 +73,42 @@ steps: echo "=== Spakowane pakiety ===" ls -la nupkg/ || echo "Brak spakowanych pakietów!" depends_on: [test] + + # NOWY KROK: Publish LinuxLocal apps + publish-linux-local: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + cd "${CI_WORKSPACE}" + mkdir -p linux-apps + + echo "=== Publikacja aplikacji LinuxLocal ===" + find . -name "*.csproj" -type f | while read csproj; do + PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown") + + if [ "$PROJECT_TYPE" = "LinuxLocal" ]; then + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Publishing $PROJECT_NAME" + + dotnet publish "$csproj" \ + --configuration Release \ + --output "./linux-apps/$PROJECT_NAME" \ + --runtime linux-x64 \ + --self-contained false \ + --no-restore + fi + done + + echo "" + if [ -d "./linux-apps" ] && [ "$(ls -A ./linux-apps)" ]; then + echo "Opublikowane aplikacje:" + ls -la linux-apps/ + else + echo "Brak aplikacji LinuxLocal do publikacji" + fi + depends_on: [restore] + publish-datamodels-to-baget: image: mcr.microsoft.com/dotnet/sdk:latest environment: @@ -108,6 +139,7 @@ steps: --skip-duplicate done depends_on: [pack-datamodels] + select-projects-for-container: image: mcr.microsoft.com/dotnet/sdk:latest commands: @@ -121,7 +153,7 @@ steps: PROJECT_NAME=$(basename "$csproj" .csproj) PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown") - if [ "$PROJECT_TYPE" = "Linux" ] || [ "$PROJECT_TYPE" = "Api" ] || [ "$PROJECT_TYPE" = "ServerProcess" ] || [ "$PROJECT_TYPE" = "Blazor" ]; then + if [ "$PROJECT_TYPE" = "Linux" ] || [ "$PROJECT_TYPE" = "Api" ] || [ "$PROJECT_TYPE" = "ServerProcess" ] || [ "$PROJECT_TYPE" = "Blazor" ] || [ "$PROJECT_TYPE" = "LinuxLocal" ]; then PROJECT_DIR=$(dirname "$csproj") echo "→ Dodaję $PROJECT_NAME (typ: $PROJECT_TYPE)" echo "$PROJECT_DIR|$PROJECT_NAME" >> projects-to-build.txt @@ -139,6 +171,7 @@ steps: echo "BRAK PROJEKTÓW DO BUDOWY!" fi depends_on: [publish-datamodels-to-baget] + containerize-apps: image: docker:27-cli environment: @@ -146,11 +179,15 @@ steps: from_secret: gitea_registry_user GITEA_TOKEN: from_secret: gitea_registry_token + CI_REPO_OWNER: + from_secret: ci_repo_owner commands: - | set -euf cd "${CI_WORKSPACE}" + REGISTRY_ORG=$(echo "${CI_REPO_OWNER:-fa}" | tr 'A-Z' 'a-z') + echo "$GITEA_TOKEN" | docker login git.modwad.pl -u "$GITEA_USER" --password-stdin if [ ! -s projects-to-build.txt ]; then @@ -178,7 +215,7 @@ steps: test -z "$PNAME" && continue test ! -d "$PDIR" && continue - echo -n "git.modwad.pl/fa/" > /tmp/tag.txt + echo -n "git.modwad.pl/${REGISTRY_ORG}/" > /tmp/tag.txt echo "$PNAME" | tr 'A-Z' 'a-z' | tr -d '\n' >> /tmp/tag.txt echo "$PNAME" > /tmp/pname.txt @@ -225,6 +262,39 @@ steps: echo "=== WSZYSTKIE PROJEKTY ZAKONCZONE ===" depends_on: [select-projects-for-container] + + # NOWY KROK: Deploy LinuxLocal na serwer + deploy-linux-local: + image: alpine:latest + commands: + - | + set -euf + cd "${CI_WORKSPACE}" + + if [ ! -d "./linux-apps" ] || [ ! "$(ls -A ./linux-apps)" ]; then + echo "Brak aplikacji LinuxLocal do wdrożenia" + exit 0 + fi + + echo "=== Wdrażanie aplikacji LinuxLocal do /opt/fa-apps/ ===" + mkdir -p /opt/fa-apps + + for app in ./linux-apps/*; do + APP_NAME=$(basename "$app") + echo "→ Kopiuję $APP_NAME" + + rm -rf "/opt/fa-apps/$APP_NAME" + cp -r "$app" "/opt/fa-apps/$APP_NAME" + + # Nadaj uprawnienia wykonywania + chmod +x "/opt/fa-apps/$APP_NAME/$APP_NAME" + done + + echo "" + echo "=== Wdrożone aplikacje ===" + ls -la /opt/fa-apps/ + depends_on: [publish-linux-local, containerize-apps] + cleanup-docker: image: docker:27-cli commands: @@ -233,31 +303,27 @@ steps: docker system df echo "" - echo "=== Usuwanie dangling images (intermediate layers) ===" + echo "=== Usuwanie dangling images ===" docker image prune -f echo "" - echo "=== Usuwanie starych wersji aplikacji (zachowaj :latest i obecny SHA) ===" - docker images --format "{{.Repository}}:{{.Tag}}" | grep "git.modwad.pl/fa/" | grep -v ":latest" | grep -v ":${CI_COMMIT_SHA}" | while read img; do + echo "=== Usuwanie starych wersji aplikacji ===" + docker images --format "{{.Repository}}:{{.Tag}}" | grep "git.modwad.pl/" | grep -v ":latest" | grep -v ":${CI_COMMIT_SHA}" | while read img; do echo "Usuwam: $img" docker rmi "$img" || true done echo "" - echo "=== Usuwanie zatrzymanych kontenerów ===" + echo "=== Usuwanie kontenerów ===" docker container prune -f echo "" - echo "=== Usuwanie całego build cache ===" + echo "=== Usuwanie build cache ===" docker builder prune -af echo "" echo "=== Status po czyszczeniu ===" docker system df - - echo "" - echo "=== Lista pozostałych obrazów ===" - docker images | head -20 - depends_on: [containerize-apps] + depends_on: [deploy-linux-local] when: - status: [success, failure] \ No newline at end of file + status: [success, failure]