103 lines
3.6 KiB
YAML
103 lines
3.6 KiB
YAML
# .woodpecker.yml – deploy via SSH (bez volumes i bez Trusted)
|
||
|
||
when:
|
||
event: [push, tag]
|
||
branch: [main]
|
||
|
||
steps:
|
||
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 |