diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..0122f49 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,33 @@ +name: Build & Deploy + +on: + push: + branches: [main, preprod] + workflow_dispatch: {} + +env: + IMAGE: git.nfteam.ovh/neckfire/the-cycle + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build & push image + run: | + set -e + echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.nfteam.ovh -u "${{ secrets.REGISTRY_USER }}" --password-stdin + SHA="${GITHUB_SHA::12}" + BRANCH="${GITHUB_REF_NAME}" + if [ "$BRANCH" = "main" ]; then TAGS="-t ${IMAGE}:latest -t ${IMAGE}:${SHA}"; else TAGS="-t ${IMAGE}:${BRANCH} -t ${IMAGE}:${BRANCH}-${SHA}"; fi + docker build $TAGS -f Dockerfile . + docker push --all-tags "${IMAGE}" + - name: Notify ntfy + if: always() + run: | + if [ "${{ job.status }}" = "success" ]; then EMOJI="white_check_mark"; PRIO="default"; else EMOJI="rotating_light"; PRIO="high"; fi + curl -s -H "Authorization: Bearer ${{ secrets.NTFY_TOKEN }}" -H "Title: ${GITHUB_REPOSITORY} — ${{ job.status }}" \ + -H "Priority: ${PRIO}" -H "Tags: ${EMOJI}" -H "Click: ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions" \ + -d "${GITHUB_WORKFLOW} (${GITHUB_REF_NAME} #${GITHUB_RUN_NUMBER}) : ${{ job.status }}" \ + "${{ secrets.NTFY_URL }}/${{ secrets.NTFY_TOPIC }}" || true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b86fc63 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# The Cycle: Frontier — serveur API (émulateur Prospect), build depuis les sources. +# Multi-stage : SDK .NET 8 pour publier le projet API → runtime aspnet 8. +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src +COPY src/ ./src/ +RUN dotnet restore src/Prospect.Server.Api/Prospect.Server.Api.csproj \ + && dotnet publish src/Prospect.Server.Api/Prospect.Server.Api.csproj \ + -c Release -o /app --no-restore + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 +WORKDIR /app +COPY --from=build /app ./ +EXPOSE 8443 8000 +ENTRYPOINT ["dotnet", "Prospect.Server.Api.dll"]