# .woodpecker.yml – deploy via SSH (bez volumes i bez Trusted) skip_clone: true when: event: [push, tag, manual] branch: [master] steps: clone-manual: image: woodpeckerci/plugin-git settings: remote: http://gitea:3000/FA/FA_WEB.git branch: master depth: 1 restore: image: mcr.microsoft.com/dotnet/sdk:latest commands: - dotnet restore test: image: mcr.microsoft.com/dotnet/sdk:latest commands: - dotnet test --no-restore --configuration Release --logger "trx" --results-directory /tmp/test-results build: image: mcr.microsoft.com/dotnet/sdk:latest commands: - dotnet build --no-restore --configuration Release deploy: image: mcr.microsoft.com/dotnet/sdk:latest environment: BAGET_API_KEY: from_secret: baget_api_key BAGET_URL: from_secret: baget_url DEPLOY_SSH_KEY: from_secret: deploy_ssh_key commands: - | set -euo pipefail echo "=== Informacje o projekcie ===" echo "Repo: ${CI_REPO_NAME}" echo "Commit: ${CI_COMMIT_SHA:0:8}" echo "Branch/Tag: ${CI_COMMIT_REF}" echo "SDK version: $(dotnet --version)" PROJECT_TYPE=$(dotnet msbuild -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown") DEPLOY_TO_CENTRAL=$(dotnet msbuild -getProperty:DeployToCentral -noLogo 2>/dev/null || echo "false") echo "ProjectType: $PROJECT_TYPE" echo "DeployToCentral: $DEPLOY_TO_CENTRAL" case "$PROJECT_TYPE" in DataModel) echo "→ Pakowanie i publikacja do BaGet" dotnet pack --no-build --configuration Release -o /tmp/nupkg for pkg in /tmp/nupkg/*.nupkg; do dotnet nuget push "$pkg" \ --api-key "${BAGET_API_KEY}" \ --source "${BAGET_URL}" \ --skip-duplicate done echo "Publikacja NuGet zakończona." ;; ConsoleApp|Api|Blazor) if [[ "$DEPLOY_TO_CENTRAL" != "true" ]]; then echo "DeployToCentral=false – pomijam deploy." exit 0 fi echo "→ Publikacja $PROJECT_TYPE" PUBLISH_ARGS="--no-build -c Release -o /tmp/publish" if [[ "$PROJECT_TYPE" == "ConsoleApp" ]]; then RID=$(dotnet msbuild -getProperty:RuntimeIdentifier -noLogo 2>/dev/null || echo "linux-x64") SELF_CONTAINED=$(dotnet msbuild -getProperty:SelfContained -noLogo 2>/dev/null || echo "true") SINGLE_FILE=$(dotnet msbuild -getProperty:PublishSingleFile -noLogo 2>/dev/null || echo "true") PUBLISH_ARGS="$PUBLISH_ARGS --self-contained $SELF_CONTAINED -r $RID -p:PublishSingleFile=$SINGLE_FILE" else TRIMMED=$(dotnet msbuild -getProperty:PublishTrimmed -noLogo 2>/dev/null || echo "true") PUBLISH_ARGS="$PUBLISH_ARGS -p:PublishTrimmed=$TRIMMED" fi dotnet publish $PUBLISH_ARGS echo "Przygotowanie SSH do deployu na localhost" mkdir -p ~/.ssh echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H localhost >> ~/.ssh/known_hosts 2>/dev/null TARGET_DIR="/opt/deployment/$PROJECT_TYPE/${CI_REPO_NAME}" echo "Deploy via rsync do $TARGET_DIR" rsync -avz --delete /tmp/publish/ "$(whoami)@localhost:$TARGET_DIR/" ssh "$(whoami)@localhost" "find '$TARGET_DIR' -type f \\( -name '*.dll' -o -name '*.exe' -o -perm /111 \\) -exec chmod +x {} \\; 2>/dev/null || true" echo "Deploy $PROJECT_TYPE zakończony pomyślnie → $TARGET_DIR" ;; *) echo "Nieznany ProjectType – brak akcji." ;; esac