diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml
index 4aaab38..d9648c1 100644
--- a/.gitea/workflows/docker.yml
+++ b/.gitea/workflows/docker.yml
@@ -1,31 +1,97 @@
-name: Build and Push Docker
+name: Build and Deploy
on:
push:
- branches: [main]
- tags:
- - "v*"
+ branches:
+ - main
+ - master
+ pull_request:
+ branches:
+ - main
+ - master
env:
REGISTRY: gitea.shtao1.cn
- IMAGE_NAME: fengling/fengling-gateway
+ IMAGE_NAME: ${{ gitea.repository }}
+ DOTNET_VERSION: '10.0'
jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
-
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
+
+ - name: Configure NuGet
+ run: |
+ cat > NuGet.Config << 'NUGET'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NUGET
+
+ - name: Restore dependencies
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build --configuration Release --no-restore
+
+ - name: Publish
+ run: dotnet publish --configuration Release --no-build --output ./publish
+
+ docker:
+ needs: build
+ runs-on: ubuntu-latest
+ if: gitea.event_name == 'push'
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Configure NuGet for Docker
+ run: |
+ cat > NuGet.Config << 'NUGET'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NUGET
+
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
- - name: Login to Gitea
+
+ - name: Login to Gitea Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
- username: fengling
+ username: ${{ gitea.actor }}
password: ${{ secrets.GITEATOKEN }}
-
+
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
@@ -33,13 +99,43 @@ jobs:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
- type=sha
+ type=sha,prefix=
type=raw,value=latest,enable={{is_default_branch}}
-
- - name: Build and push
+
+ - name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
\ No newline at end of file
+ labels: ${{ steps.meta.outputs.labels }}
+
+ deploy:
+ needs: docker
+ runs-on: ubuntu-latest
+ if: gitea.event_name == 'push' && (gitea.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/master')
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set up kubectl
+ uses: azure/setup-kubectl@v3
+
+ - name: Configure kubectl
+ run: |
+ mkdir -p ~/.kube
+ echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config
+ chmod 600 ~/.kube/config
+
+ - name: Deploy to Kubernetes
+ run: |
+ TAG=$(echo ${{ gitea.sha }} | cut -c1-7)
+ sed -i "s|image:.*fengling-gateway.*|image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${TAG}|g" k8s/deployment.yaml
+ kubectl apply -f k8s/deployment.yaml -n fengling
+ kubectl apply -f k8s/service.yaml -n fengling
+ kubectl rollout status deployment/fengling-gateway -n fengling --timeout=300s
+
+ - name: Verify deployment
+ run: |
+ kubectl get pods -n fengling -l app=fengling-gateway
+ kubectl get services -n fengling fengling-gateway
diff --git a/Directory.Build.props b/Directory.Build.props
index 8afc290..7106f5c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,5 +1,6 @@
+ true
enable
enable
diff --git a/Directory.Packages.props b/Directory.Packages.props
new file mode 100644
index 0000000..ee290df
--- /dev/null
+++ b/Directory.Packages.props
@@ -0,0 +1,27 @@
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NuGet.Config b/NuGet.Config
new file mode 100644
index 0000000..62a0353
--- /dev/null
+++ b/NuGet.Config
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/YarpGateway.csproj b/YarpGateway.csproj
index a8c1728..576fbc5 100644
--- a/YarpGateway.csproj
+++ b/YarpGateway.csproj
@@ -21,11 +21,11 @@
-
-
-
-
-
+
+
+
+
+