From 18a85021181b0cb1ff4aa71797d3bfb3852d8d3e Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 13 Jan 2026 17:59:59 +0000 Subject: [PATCH] =?UTF-8?q?.gitea/workflows/dotnet-deploy.yml=20hinzugef?= =?UTF-8?q?=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/dotnet-deploy.yml | 96 ++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 .gitea/workflows/dotnet-deploy.yml diff --git a/.gitea/workflows/dotnet-deploy.yml b/.gitea/workflows/dotnet-deploy.yml new file mode 100644 index 0000000..3376450 --- /dev/null +++ b/.gitea/workflows/dotnet-deploy.yml @@ -0,0 +1,96 @@ + +name: Build & Deploy .NET to 192.168.1.100 + +on: + push: + branches: [ "main" ] # ggf. anpassen (z. B. "master" oder Release-Branch) + workflow_dispatch: # manueller Start + +env: + DOTNET_VERSION: '8.0.x' # oder 7.0.x – je nach Projekt + PROJECT_PATH: 'src/MyApp/MyApp.csproj' + RUNTIME: 'linux-x64' + PUBLISH_DIR: 'artifacts/publish' + +jobs: + build-and-deploy: + # Variante 1: Mit Image-Label (siehe Runner-Konfiguration oben) + runs-on: ubuntu-latest + # Variante 2: Falls du keine Mapping-Labels hast, nutze: + # runs-on: [self-hosted, linux] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Restore + run: dotnet restore "${{ env.PROJECT_PATH }}" + + - name: Build + run: dotnet build "${{ env.PROJECT_PATH }}" -c Release --no-restore + + # --- Publish: self-contained (empfohlen) --- + - name: Publish (self-contained) + run: | + dotnet publish "${{ env.PROJECT_PATH }}" \ + -c Release \ + -r "${{ env.RUNTIME }}" \ + --self-contained true \ + -o "${{ env.PUBLISH_DIR }}" + # --- Alternative (framework-dependent) --- + # - name: Publish (framework-dependent) + # run: | + # dotnet publish "${{ env.PROJECT_PATH }}" \ + # -c Release \ + # -o "${{ env.PUBLISH_DIR }}" + + - name: Prepare SSH key & known_hosts + env: + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + install -m 700 -d ~/.ssh + echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_deploy + chmod 600 ~/.ssh/id_deploy + # Host-Key hinzufügen (sicherer als StrictHostKeyChecking=no) + PORT="${SSH_PORT:-22}" + ssh-keyscan -p "${PORT}" -H "${SSH_HOST}" >> ~/.ssh/known_hosts + + - name: Create remote directory + env: + SSH_USER: ${{ secrets.SSH_USER }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + REMOTE_DIR: ${{ secrets.REMOTE_DIR }} + run: | + ssh -i ~/.ssh/id_deploy -p "${SSH_PORT:-22}" "${SSH_USER}@${SSH_HOST}" "mkdir -p '${REMOTE_DIR}'" + + - name: Deploy via SCP + env: + SSH_USER: ${{ secrets.SSH_USER }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + REMOTE_DIR: ${{ secrets.REMOTE_DIR }} + run: | + scp -i ~/.ssh/id_deploy -P "${SSH_PORT:-22}" -r "${{ env.PUBLISH_DIR }}/"* "${SSH_USER}@${SSH_HOST}:${REMOTE_DIR}/" + + # -------- Option A: Neustart per systemd (empfohlen) -------- + # Benötigt: secrets.SERVICE_NAME (z. B. "myapp.service") + - name: Restart service (systemd) + if: ${{ secrets.SERVICE_NAME != '' }} + env: + SSH_USER: ${{ secrets.SSH_USER }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + SERVICE_NAME: ${{ secrets.SERVICE_NAME }} + run: | + ssh -i ~/.ssh/id_deploy -p "${SSH_PORT:-22}" "${SSH_USER}@${SSH_HOST}" \ + "sudo systemctl daemon-reload && sudo systemctl restart '${SERVICE_NAME}' && sudo systemctl status --no-pager '${SERVICE_NAME}'" + + EOF