name: Build & Deploy PLDpro.Web Test to 192.168.1.100 on: push: branches: [ "main" ] # ggf. anpassen (z. B. "master" oder Release-Branch) workflow_dispatch: # manueller Start env: DOTNET_VERSION: '10.0.x' # oder 7.0.x – je nach Projekt PROJECT_PATH: 'Pldpro.Web.csproj' RUNTIME: 'linux-x64' PUBLISH_DIR: 'artifacts/publish' jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Host override setzen run: | echo "192.168.1.200 gitea.pldpro.at" >> /etc/hosts - 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 }}" - name: Prepare SSH key & known_hosts env: SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.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: Remove previous installed version env: SSH_USER: ${{ vars.SSH_USER }} SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.SSH_PORT }} REMOTE_DIR: ${{ vars.REMOTE_DIR }} run: | ssh -i ~/.ssh/id_deploy -p "${SSH_PORT:-22}" "${SSH_USER}@${SSH_HOST}" "rm -rf '${REMOTE_DIR}'" - name: Create remote directory env: SSH_USER: ${{ vars.SSH_USER }} SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.SSH_PORT }} REMOTE_DIR: ${{ vars.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: ${{ vars.SSH_USER }} SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.SSH_PORT }} REMOTE_DIR: ${{ vars.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: Systemd daemon-reload run: | ssh -tt -i ~/.ssh/id_deploy -p "${{ vars.SSH_PORT || 22 }}" "${{ vars.SSH_USER }}@${{ vars.SSH_HOST }}" \ "/usr/bin/sudo -n /usr/bin/systemctl daemon-reload" - name: Restart service env: SERVICE_NAME: ${{ vars.SERVICE_NAME }} run: | ssh -tt -i ~/.ssh/id_deploy -p "${{ vars.SSH_PORT || 22 }}" "${{ vars.SSH_USER }}@${{ vars.SSH_HOST }}" \ "/usr/bin/sudo -n /usr/bin/systemctl restart '${SERVICE_NAME}'" - name: Status (no pager) env: SERVICE_NAME: ${{ vars.SERVICE_NAME }} run: | ssh -tt -i ~/.ssh/id_deploy -p "${{ vars.SSH_PORT || 22 }}" "${{ vars.SSH_USER }}@${{ vars.SSH_HOST }}" \ "/usr/bin/systemctl status --no-pager '${SERVICE_NAME}'"