Spaces:
Build error
Build error
Rudy Hariyanto commited on
Commit ·
dddebd0
1
Parent(s): 5c5e2cc
Setting Deploy To HF
Browse files- .github/workflows/deploy-hf.yml +6 -19
- Dockerfile +32 -0
- README.md +31 -3
- UserManagement.Api/Program.cs +17 -10
.github/workflows/deploy-hf.yml
CHANGED
|
@@ -3,34 +3,21 @@ name: Deploy to Hugging Face Spaces
|
|
| 3 |
on:
|
| 4 |
push:
|
| 5 |
branches:
|
| 6 |
-
-
|
| 7 |
|
| 8 |
jobs:
|
| 9 |
deploy:
|
| 10 |
runs-on: ubuntu-latest
|
| 11 |
-
|
| 12 |
steps:
|
| 13 |
- name: Checkout repo
|
| 14 |
uses: actions/checkout@v4
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 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
|
| 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:
|
|
|
|
|
|
|
|
|
|
| 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 |
-
//
|
|
|
|
| 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 |
-
//
|
| 13 |
-
|
|
|
|
|
|
|
| 14 |
{
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
}
|
| 18 |
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
|
|
|
|
| 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();
|