Rudy Hariyanto commited on
Commit
dddebd0
·
1 Parent(s): 5c5e2cc

Setting Deploy To HF

Browse files
.github/workflows/deploy-hf.yml CHANGED
@@ -3,34 +3,21 @@ name: Deploy to Hugging Face Spaces
3
  on:
4
  push:
5
  branches:
6
- - master
7
 
8
  jobs:
9
  deploy:
10
  runs-on: ubuntu-latest
11
-
12
  steps:
13
  - name: Checkout repo
14
  uses: actions/checkout@v4
15
-
16
- - name: Setup Git
17
- run: |
18
- git config --global user.name "GitHub Actions"
19
- git config --global user.email "actions@github.com"
20
 
21
  - name: Push to HuggingFace
22
  env:
23
  HF_TOKEN: ${{ secrets.HF_TOKEN }}
24
  run: |
25
- git clone https://Rudy-16:$HF_TOKEN@huggingface.co/spaces/Rudy-16/UserManagement hf
26
-
27
- rsync -av --delete \
28
- --exclude='.git' \
29
- --exclude='.github' \
30
- ./ hf/
31
-
32
- cd hf
33
-
34
- git add .
35
- git commit -m "Auto deploy from GitHub" || echo "No changes"
36
- git push
 
3
  on:
4
  push:
5
  branches:
6
+ - main
7
 
8
  jobs:
9
  deploy:
10
  runs-on: ubuntu-latest
 
11
  steps:
12
  - name: Checkout repo
13
  uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+ lfs: true
 
 
17
 
18
  - name: Push to HuggingFace
19
  env:
20
  HF_TOKEN: ${{ secrets.HF_TOKEN }}
21
  run: |
22
+ git remote add hf https://Rudy-16:$HF_TOKEN@huggingface.co/spaces/Rudy-16/UserManagement
23
+ git push --force hf master:main
 
 
 
 
 
 
 
 
 
 
Dockerfile ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Tahap 1: Build
2
+ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
3
+ WORKDIR /src
4
+
5
+ # Salin file proyek
6
+ COPY ["UserManagement.sln", "./"]
7
+ COPY ["UserManagement.Api/UserManagement.Api.csproj", "UserManagement.Api/"]
8
+ RUN dotnet restore
9
+
10
+ # Build aplikasi
11
+ COPY . .
12
+ WORKDIR "/src/UserManagement.Api"
13
+ RUN dotnet build -c Release -o /app/build
14
+
15
+ # Tahap 2: Publish
16
+ FROM build AS publish
17
+ RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false
18
+
19
+ # Tahap 3: Final
20
+ FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
21
+ WORKDIR /app
22
+ COPY --from=publish /app/publish .
23
+
24
+ # Konfigurasi Environment & Port
25
+ ENV ASPNETCORE_URLS=http://+:7860
26
+ EXPOSE 7860
27
+
28
+ # Healthcheck menggunakan sistem internal .NET (tanpa perlu install curl)
29
+ HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
30
+ CMD dotnet --info || exit 1
31
+
32
+ ENTRYPOINT ["dotnet", "UserManagement.Api.dll"]
README.md CHANGED
@@ -1,6 +1,34 @@
1
- ---
2
- title: UserManagement
 
 
 
3
  sdk: docker
 
 
 
4
  ---
5
 
6
- # User Management
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: User Management API
3
+ emoji: 🏢
4
+ colorFrom: blue
5
+ colorTo: indigo
6
  sdk: docker
7
+ app_port: 7860
8
+ pinned: false
9
+ license: mit
10
  ---
11
 
12
+ # User Management System (.NET 8)
13
+
14
+ Ini adalah API Manajemen Pengguna yang dibangun menggunakan **.NET 8 Web API** dan dideploy secara otomatis menggunakan GitHub Actions.
15
+
16
+ ## Fitur Utama
17
+ * **Swagger UI**: Dokumentasi API interaktif (langsung terbuka di halaman utama).
18
+ * **Dockerized**: Berjalan di atas container Linux yang ringan.
19
+ * **Health Checks**: Pemantauan status aplikasi secara real-time.
20
+
21
+ ## Cara Menggunakan API
22
+ Karena Swagger telah dikonfigurasi sebagai halaman utama, Anda bisa langsung mencoba endpoint API melalui antarmuka di atas.
23
+
24
+ 1. Tunggu status Space menjadi **Running**.
25
+ 2. Gunakan panel Swagger untuk melakukan pengujian `GET`, `POST`, `PUT`, atau `DELETE`.
26
+
27
+ ## Deployment
28
+ Project ini menggunakan CI/CD dari GitHub ke Hugging Face:
29
+ 1. Kode di-push ke GitHub.
30
+ 2. GitHub Actions memicu build Docker.
31
+ 3. Image di-push dan dijalankan di Hugging Face Spaces pada port `7860`.
32
+
33
+ ---
34
+ *Dibuat dengan ❤️ menggunakan .NET dan Docker.*
UserManagement.Api/Program.cs CHANGED
@@ -1,25 +1,32 @@
1
  var builder = WebApplication.CreateBuilder(args);
2
 
3
- // Add services to the container.
 
4
 
5
  builder.Services.AddControllers();
6
- // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
7
  builder.Services.AddEndpointsApiExplorer();
8
  builder.Services.AddSwaggerGen();
9
 
10
  var app = builder.Build();
11
 
12
- // Configure the HTTP request pipeline.
13
- if (app.Environment.IsDevelopment())
 
 
14
  {
15
- app.UseSwagger();
16
- app.UseSwaggerUI();
17
- }
18
 
19
- app.UseHttpsRedirection();
 
 
 
20
 
21
- app.UseAuthorization();
 
22
 
 
23
  app.MapControllers();
24
 
25
- app.Run();
 
1
  var builder = WebApplication.CreateBuilder(args);
2
 
3
+ // 1. Tambahkan Layanan Health Check
4
+ builder.Services.AddHealthChecks();
5
 
6
  builder.Services.AddControllers();
 
7
  builder.Services.AddEndpointsApiExplorer();
8
  builder.Services.AddSwaggerGen();
9
 
10
  var app = builder.Build();
11
 
12
+ // 2. Aktifkan Swagger untuk SEMUA environment di HF
13
+ // Secara default app.Environment.IsDevelopment() akan bernilai false di Docker
14
+ app.UseSwagger();
15
+ app.UseSwaggerUI(c =>
16
  {
17
+ c.SwaggerEndpoint("/swagger/v1/swagger.json", "UserManagement API V1");
18
+ c.RoutePrefix = string.Empty; // Membuat Swagger muncul di halaman utama Space
19
+ });
20
 
21
+ // 3. Matikan HttpsRedirection (PENTING!)
22
+ // Hugging Face menangani SSL di layer proxy mereka.
23
+ // Jika ini aktif, seringkali terjadi "Infinite Redirect Loop".
24
+ // app.UseHttpsRedirection();
25
 
26
+ // 4. Map Health Check Route
27
+ app.MapHealthChecks("/health");
28
 
29
+ app.UseAuthorization();
30
  app.MapControllers();
31
 
32
+ app.Run();