Create guide for filtering and searching GitHub issues - #33
Merged
Conversation
Added comprehensive guide on filtering and searching issues and pull requests in GitHub, including basic and advanced filtering techniques, sorting options, and automation tips.Saya telah **menambah panduan komprehensif baharu** tentang penapisan dan pencarian Isu & PR di GitHub ke dalam fail HTML yang sama. Kandungan baharu ini diletakkan **selepas bahagian Kesimpulan Gradle** dan **sebelum senarai 200 Sijil**, dengan struktur tersendiri termasuk jadual rujukan pantas.
Berikut adalah **fail HTML penuh dan muktamad** — salin dan simpan sebagai `.html`:
```html
<!DOCTYPE html>
<html lang="ms">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Panduan Lengkap + GitHub Search + 200 Sijil</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
margin: 20px;
max-width: 1200px;
margin-left: auto;
margin-right: auto;
color: #333;
background-color: #fff;
}
h1, h2, h3, h4 {
color: #2c3e50;
margin-top: 1.5em;
margin-bottom: 0.5em;
}
h1 {
border-bottom: 3px solid #3498db;
padding-bottom: 10px;
}
h2 {
border-bottom: 2px solid #ecf0f1;
padding-bottom: 5px;
}
pre {
background-color: #f8f9fa;
border: 1px solid #ddd;
border-radius: 5px;
padding: 15px;
overflow-x: auto;
font-family: 'Courier New', Courier, monospace;
font-size: 14px;
line-height: 1.4;
margin: 1em 0;
}
code {
font-family: 'Courier New', Courier, monospace;
background-color: #f8f9fa;
padding: 2px 4px;
border-radius: 3px;
font-size: 0.9em;
}
pre code {
background-color: transparent;
padding: 0;
}
table {
border-collapse: collapse;
width: 100%;
margin: 1em 0;
}
th, td {
border: 1px solid #ddd;
padding: 8px 12px;
text-align: left;
}
th {
background-color: #f2f2f2;
font-weight: bold;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
.toc {
background-color: #f8f9fa;
border: 1px solid #ddd;
border-radius: 5px;
padding: 15px;
margin: 20px 0;
}
.toc ul {
list-style-type: none;
padding-left: 20px;
}
.toc li {
margin: 5px 0;
}
.note {
background-color: #e8f4fd;
border-left: 5px solid #3498db;
padding: 10px 15px;
margin: 1em 0;
}
/* Sijil grid */
.cert-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
gap: 1rem;
margin: 1.5rem 0;
}
.cert-card {
background: #f8f9fa;
border-left: 4px solid #3498db;
padding: 0.8rem 1rem;
border-radius: 6px;
border: 1px solid #e0e0e0;
box-shadow: 0 2px 4px rgba(0,0,0,0.04);
}
.cert-card .cert-header {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 0.5rem;
}
.cert-card .cert-num {
font-weight: 700;
color: #2c3e50;
font-size: 0.75rem;
background: #e9ecef;
padding: 0.1rem 0.6rem;
border-radius: 20px;
}
.cert-card .cert-title {
font-weight: 600;
font-size: 0.95rem;
}
.cert-card .cert-publisher {
font-size: 0.8rem;
color: #555;
}
.cert-card .cert-meta {
display: flex;
justify-content: space-between;
font-size: 0.7rem;
color: #666;
margin-top: 0.3rem;
border-top: 1px solid #eee;
padding-top: 0.3rem;
}
.cert-card .cert-meta .id {
font-family: monospace;
background: #e9ecef;
padding: 0.1rem 0.5rem;
border-radius: 12px;
}
.cert-card .cert-meta .status-badge {
color: #28a745;
font-weight: 500;
}
.category-section {
margin-top: 2.5rem;
}
.cat-header {
display: flex;
align-items: center;
gap: 1rem;
border-bottom: 2px solid #dee2e6;
padding-bottom: 0.4rem;
margin-bottom: 1rem;
}
.cat-letter {
font-size: 1.8rem;
font-weight: 700;
color: #3498db;
background: #e9f0f8;
width: 3rem;
height: 3rem;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
.cat-count {
font-size: 0.8rem;
color: #6c757d;
margin-left: auto;
}
.goodbye-note {
text-align: center;
margin: 2rem 0 0;
padding: 1rem;
font-size: 1.8rem;
font-weight: 700;
color: #3498db;
border-top: 2px solid #dee2e6;
}
/* PAUTAN & SUMBER */
.resources-section {
background: #f0f7ff;
border: 1px solid #d0e3f0;
border-radius: 12px;
padding: 1.5rem 2rem;
margin: 1.5rem 0;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
}
.links-grid {
display: flex;
flex-wrap: wrap;
gap: 0.8rem 1.5rem;
}
.links-grid a {
color: #1a73e8;
text-decoration: none;
font-weight: 500;
}
.links-grid a:hover {
text-decoration: underline;
}
.resource-image {
text-align: center;
margin: 1.5rem 0;
}
.resource-image img {
max-width: 100%;
height: auto;
border-radius: 8px;
border: 1px solid #ddd;
max-height: 600px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
@media (max-width: 600px) {
.cert-grid { grid-template-columns: 1fr; }
.resources-section { flex-direction: column; align-items: flex-start; gap: 1rem; }
}
</style>
</head>
<body>
<!-- ===== TAJUK UTAMA ===== -->
<h1>Panduan Lengkap: Meniru Gaya Binaan Gradle dalam .NET CI/CD</h1>
<!-- ===== PAUTAN PENTING & SUMBER ===== -->
<div class="resources-section">
<div style="width:100%;">
<h3 style="margin-top:0; color:#2c3e50;">🔗 Pautan Penting & Sumber</h3>
<div class="links-grid">
<a href="https://www.google.com" target="_blank">Google</a>
<a href="https://console.firebase.google.com" target="_blank">Firebase Console</a>
<a href="https://firebase.google.com" target="_blank">Firebase</a>
<a href="http://www.sazwan.fairbase.com" target="_blank">sazwan.fairbase.com</a>
<a href="https://aws.amazon.com" target="_blank">AWS</a>
<a href="https://ms.wikipedia.org/wiki/Laman_Utama" target="_blank">Wikipedia BM</a>
<a href="https://en.wikipedia.org/wiki/Main_Page" target="_blank">Wikipedia EN</a>
</div>
</div>
</div>
<!-- ===== GAMBAR ===== -->
<div class="resource-image">
<img width="960" height="1280" alt="Image blue (12)" src="https://github.com/user-attachments/assets/49bc325d-005c-4bfd-a277-543c8de27973" />
</div>
<!-- ===== JADUAL KANDUNGAN (GRADLE) ===== -->
<div class="toc">
<h2>Kandungan (Gradle .NET)</h2>
<ul>
<li><a href="#pengenalan">Pengenalan</a></li>
<li><a href="#pendekatan-utama">Lima Pendekatan Utama</a>
<ul>
<li><a href="#dotnet-cli">1. dotnet CLI Sahaja</a></li>
<li><a href="#nuke">2. Nuke (Build Automation dengan C# DSL)</a></li>
<li><a href="#cake">3. Cake (C# Make)</a></li>
<li><a href="#msbuild">4. MSBuild Custom Targets</a></li>
<li><a href="#bullseye">5. Bullseye + SimpleExec</a></li>
</ul>
</li>
<li><a href="#fake">Pendekatan Tambahan: FAKE (F# Make)</a></li>
<li><a href="#ciri-lanjutan">Ciri Lanjutan untuk Meniru Gradle</a>
<ul>
<li><a href="#incremental">Incremental Builds & Up-to-Date Checks</a></li>
<li><a href="#caching">Build Caching Strategies</a></li>
<li><a href="#parallel">Parallel Execution</a></li>
<li><a href="#config">Configuration Management</a></li>
<li><a href="#versioning">Versioning Automatik</a></li>
<li><a href="#custom-tasks">Custom Tasks</a></li>
<li><a href="#multi-project">Multi-Project Builds</a></li>
<li><a href="#docker-nuget">Integrasi Docker & NuGet</a></li>
</ul>
</li>
<li><a href="#contoh-pipeline">Contoh Pipeline CI/CD</a>
<ul>
<li><a href="#github-actions">GitHub Actions</a></li>
<li><a href="#azure-devops">Azure DevOps</a></li>
<li><a href="#gitlab-ci">GitLab CI</a></li>
</ul>
</li>
<li><a href="#perbandingan">Jadual Perbandingan</a></li>
<li><a href="#cadangan">Cadangan</a></li>
<li><a href="#pengurusan-dependensi">Pengurusan Dependensi & Kemaskini Automatik</a></li>
<li><a href="#kualiti-kod">Analisis Kualiti Kod & Test Coverage</a></li>
<li><a href="#deployment-lanjutan">Strategi Deployment Lanjutan</a></li>
<li><a href="#rahsia-konfigurasi">Pengurusan Rahsia & Konfigurasi</a></li>
<li><a href="#optimum-masa">Pengoptimuman Masa Binaan</a></li>
<li><a href="#struktur-projek">Contoh Struktur Projek Berbilang Modul</a></li>
<li><a href="#perbandingan-gradle">Perbandingan dengan Gradle pada Aspek Spesifik</a></li>
<li><a href="#integrasi-pihak-ketiga">Integrasi dengan Alat Pihak Ketiga</a></li>
<li><a href="#kesimpulan">Kesimpulan</a></li>
</ul>
</div>
<!-- ================================================================ -->
<!-- BAHAGIAN GRADLE .NET (sedia ada) -->
<!-- ================================================================ -->
<h2 id="pengenalan">Pengenalan</h2>
<p>Gradle terkenal dengan kitaran hayat binaan berperingkat (<code>clean</code>, <code>build</code>, <code>test</code>, <code>publish</code>), caching yang bijak, kebergantungan tugas, dan DSL yang berkuasa. Dalam .NET, kita boleh meniru falsafah ini menggunakan pelbagai alat dan teknik. Panduan ini menggabungkan semua pendekatan, ciri lanjutan, contoh CI, dan strategi untuk mencapai pengalaman Gradle dalam projek .NET.</p>
<h2 id="pendekatan-utama">Lima Pendekatan Utama</h2>
<h3 id="dotnet-cli">1. dotnet CLI Sahaja (Native)</h3>
<pre><code>steps:
- name: Clean
run: dotnet clean
- name: Restore
run: dotnet restore
- name: Build
run: dotnet build --no-restore -c Release
- name: Test
run: dotnet test --no-build -c Release
- name: Publish
run: dotnet publish --no-build -c Release -o ./publish</code></pre>
<p><strong>Persamaan Gradle:</strong> Setiap langkah seperti task; <code>--no-restore</code>, <code>--no-build</code> menghalang kerja berulang.<br>
<strong>Kelebihan:</strong> Mudah, tiada kebergantungan tambahan.<br>
<strong>Kekurangan:</strong> Kurang struktur, tiada parameterisasi/caching bawaan.</p>
<h3 id="nuke">2. Nuke (Build Automation dengan C# DSL)</h3>
<pre><code>class Build : NukeBuild
{
public static int Main() => Execute<Build>(x => x.Publish);
Target Clean => _ => _.Executes(() => DotNetClean());
Target Restore => _ => _.DependsOn(Clean).Executes(() => DotNetRestore());
Target Compile => _ => _.DependsOn(Restore).Executes(() => DotNetBuild(s => s.EnableNoRestore()));
Target Test => _ => _.DependsOn(Compile).Executes(() => DotNetTest(s => s.EnableNoBuild()));
Target Publish => _ => _.DependsOn(Test).Executes(() => DotNetPublish(s => s.SetOutput("publish")));
}</code></pre>
<p><strong>Jalankan:</strong> <code>./build.cmd Publish</code><br>
<strong>Persamaan Gradle:</strong> Target = Task, <code>DependsOn</code> = <code>dependsOn</code>, parameterisasi penuh.<br>
<strong>Kelebihan:</strong> Paling dekat dengan Gradle, menyokong caching (<code>[Cached]</code>), boleh diuji.<br>
<strong>Kekurangan:</strong> Perlu belajar DSL, tambah projek binaan.</p>
<h3 id="cake">3. Cake (C# Make)</h3>
<pre><code>Task("Clean").Does(() => DotNetClean("."));
Task("Restore").IsDependentOn("Clean").Does(() => DotNetRestore("."));
Task("Build").IsDependentOn("Restore").Does(() => DotNetBuild(".", new DotNetBuildSettings { NoRestore = true }));
Task("Test").IsDependentOn("Build").Does(() => DotNetTest(".", new DotNetTestSettings { NoBuild = true }));
Task("Publish").IsDependentOn("Test").Does(() => DotNetPublish(".", new DotNetPublishSettings { OutputDirectory = "./publish" }));
RunTarget("Publish");</code></pre>
<p><strong>Jalankan:</strong> <code>dotnet cake build.cake --target=Publish</code><br>
<strong>Persamaan Gradle:</strong> <code>IsDependentOn</code> setara dengan <code>dependsOn</code>.<br>
<strong>Kelebihan:</strong> Matang, DSL mudah dibaca, banyak addin.<br>
<strong>Kekurangan:</strong> Tiada caching bawaan (perlu manual/CI).</p>
<h3 id="msbuild">4. MSBuild Custom Targets (Native XML)</h3>
<pre><code><Project>
<Target Name="CleanAll">
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Clean" />
</Target>
<Target Name="RestoreAll">
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Restore" />
</Target>
<Target Name="BuildAll" DependsOnTargets="CleanAll;RestoreAll">
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Build" Properties="Configuration=Release" />
</Target>
<Target Name="TestAll" DependsOnTargets="BuildAll">
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="VSTest" Properties="Configuration=Release" />
</Target>
<Target Name="PublishAll" DependsOnTargets="TestAll">
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="Configuration=Release;PublishDir=./publish" />
</Target>
</Project></code></pre>
<p><strong>Jalankan:</strong> <code>dotnet msbuild -t:PublishAll</code><br>
<strong>Persamaan Gradle:</strong> <code>DependsOnTargets</code> = <code>dependsOn</code>.<br>
<strong>Kelebihan:</strong> Native, tiada alat tambahan.<br>
<strong>Kekurangan:</strong> Sintaks XML verbose, sukar untuk logik kompleks.</p>
<h3 id="bullseye">5. Bullseye + SimpleExec (C# Console Build)</h3>
<pre><code>using static Bullseye.Targets;
using static SimpleExec.Command;
Target("clean", () => Run("dotnet", "clean"));
Target("restore", DependsOn("clean"), () => Run("dotnet", "restore"));
Target("build", DependsOn("restore"), () => Run("dotnet", "build --no-restore -c Release"));
Target("test", DependsOn("build"), () => Run("dotnet", "test --no-build -c Release"));
Target("publish", DependsOn("test"), () => Run("dotnet", "publish --no-build -c Release -o ./publish"));
Target("default", DependsOn("publish"));
RunTargetsAndExit(args);</code></pre>
<p><strong>Jalankan:</strong> <code>dotnet run --project build -- publish</code><br>
<strong>Persamaan Gradle:</strong> Bullseye menyediakan <code>Target</code> dan <code>DependsOn</code> seperti Gradle.<br>
<strong>Kelebihan:</strong> Minimalis, C# tulen, sangat fleksibel.<br>
<strong>Kekurangan:</strong> Tiada caching bawaan, perlu projek binaan berasingan.</p>
<h2 id="fake">Pendekatan Tambahan: FAKE (F# Make)</h2>
<pre><code>#r "paket: nuget Fake.DotNet.Cli"
open Fake
open Fake.DotNet
Target.create "Clean" (fun _ -> DotNet.exec id "clean" "" |> ignore)
Target.create "Restore" (fun _ -> DotNet.restore id "")
Target.create "Build" (fun _ -> DotNet.build (fun p -> { p with Configuration = DotNet.BuildConfiguration.Release; NoRestore = true }) "")
Target.create "Test" (fun _ -> DotNet.test (fun p -> { p with Configuration = DotNet.BuildConfiguration.Release; NoBuild = true }) "")
Target.create "Publish" (fun _ -> DotNet.publish (fun p -> { p with Configuration = DotNet.BuildConfiguration.Release; NoBuild = true; OutputPath = Some "./publish" }) "")
open Fake.Core.TargetOperators
"Clean" ==> "Restore" ==> "Build" ==> "Test" ==> "Publish"
Target.runOrDefault "Publish"</code></pre>
<p><strong>Persamaan Gradle:</strong> Operator <code>==></code> menandakan kebergantungan.<br>
<strong>Kelebihan:</strong> Kuasa fungsional penuh, integrasi kuat.<br>
<strong>Kekurangan:</strong> Perlu pengetahuan F#, kurang popular.</p>
<h2 id="ciri-lanjutan">Ciri Lanjutan untuk Meniru Gradle</h2>
<h3 id="incremental">Incremental Builds & Up-to-Date Checks</h3>
<ul>
<li><strong>MSBuild Native:</strong> Gunakan atribut <code>Inputs</code> dan <code>Outputs</code>.
<pre><code><Target Name="GenerateCode" Inputs="src\schema.proto" Outputs="generated\schema.cs">
<Exec Command="protoc --csharp_out=generated src\schema.proto" />
</Target></code></pre></li>
<li><strong>Nuke:</strong> Atribut <code>[Cached]</code> pada target.
<pre><code>[Cached]
Target GenerateCode => _ => _.Executes(() => { ... });</code></pre></li>
<li><strong>Cake/Bullseye:</strong> Semakan manual menggunakan <code>System.IO.File.GetLastWriteTime</code>.</li>
</ul>
<h3 id="caching">Build Caching Strategies</h3>
<ul>
<li><strong>NuGet Cache:</strong> <code>~/.nuget/packages</code> (dengan lock file <code>packages.lock.json</code>).</li>
<li><strong>Build Output Cache:</strong> Simpan <code>bin</code> dan <code>obj</code> di CI.</li>
<li><strong>Nuke Cache:</strong> Folder <code>.nuke/temp</code>.</li>
<li><strong>Azure DevOps Cache Task / GitHub Actions cache</strong> dengan kunci berasaskan hash fail projek.</li>
</ul>
<h3 id="parallel">Parallel Execution</h3>
<ul>
<li><strong>MSBuild:</strong> Gunakan <code>-m</code> atau <code>-p:BuildInParallel=true</code>.</li>
<li><strong>Nuke:</strong> Jalankan target bebas secara selari dengan <code>await Task.WhenAll</code> atau <code>nuke --parallel</code>.</li>
<li><strong>Cake:</strong> <code>Parallel.ForEach</code> dalam task.</li>
<li><strong>Bullseye:</strong> <code>Task.WhenAll</code> dengan <code>RunAsync</code>.</li>
</ul>
<h3 id="config">Configuration Management</h3>
<ul>
<li><strong>Nuke:</strong> Parameter melalui <code>[Parameter]</code> dan hujah CLI.</li>
<li><strong>MSBuild:</strong> Properties <code>-p:Configuration=Debug</code>.</li>
<li><strong>Cake:</strong> <code>Argument()</code> dan <code>HasArgument()</code>.</li>
</ul>
<h3 id="versioning">Versioning Automatik</h3>
<ul>
<li><strong>GitVersion</strong> atau <strong>Nerdbank.GitVersioning</strong>.</li>
<li>Integrasi dengan Nuke/Cake/MSBuild untuk menetapkan versi semasa <code>build</code>, <code>pack</code>, <code>publish</code>.</li>
</ul>
<h3 id="custom-tasks">Custom Tasks</h3>
<p>Setiap alat membolehkan anda menulis logik tersuai (contoh: menjalankan migrasi EF, bina Docker, hantar pakej NuGet).</p>
<h3 id="multi-project">Multi-Project Builds</h3>
<ul>
<li>Gunakan <code>.sln</code> atau <code>.slnf</code> (Solution Filter).</li>
<li>Nuke/Cake/Bullseye: bina projek tertentu sahaja (seperti <code>:app:build</code> dalam Gradle).</li>
<li>MSBuild project references menangani kebergantungan secara automatik.</li>
</ul>
<h3 id="docker-nuget">Integrasi Docker & NuGet</h3>
<ul>
<li>Bina imej Docker selepas <code>publish</code>.</li>
<li><code>dotnet pack</code> dan <code>dotnet nuget push</code> (setara <code>maven-publish</code>).</li>
</ul>
<h2 id="contoh-pipeline">Contoh Pipeline CI/CD</h2>
<h3 id="github-actions">GitHub Actions (dengan Nuke)</h3>
<pre><code>name: CI
on:
push:
branches: [ main ]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- uses: actions/cache@v4
with:
path: |
~/.nuget/packages
.nuke/temp
key: ${{ runner.os }}-nuke-${{ hashFiles('**/*.csproj', 'build/**') }}
- name: Build & Publish
run: ./build.cmd Publish
- uses: actions/upload-artifact@v4
with:
name: publish
path: publish/</code></pre>
<h3 id="azure-devops">Azure DevOps</h3>
<pre><code>trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
inputs:
version: '8.x'
- script: dotnet clean
- script: dotnet restore
- script: dotnet build --no-restore -c Release
- script: dotnet test --no-build -c Release --logger trx
- script: dotnet publish --no-build -c Release -o $(Build.ArtifactStagingDirectory)/publish
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)/publish'
artifactName: 'drop'</code></pre>
<h3 id="gitlab-ci">GitLab CI</h3>
<pre><code>image: mcr.microsoft.com/dotnet/sdk:8.0
stages: [build, test, deploy]
cache:
paths:
- ~/.nuget/packages
build:
stage: build
script:
- dotnet clean
- dotnet restore
- dotnet build --no-restore -c Release
test:
stage: test
script:
- dotnet test --no-build -c Release
artifacts:
reports:
junit: test-results.xml
publish:
stage: deploy
script:
- dotnet publish --no-build -c Release -o ./publish
artifacts:
paths:
- ./publish
only:
- main</code></pre>
<h2 id="perbandingan">Jadual Perbandingan</h2>
<table>
<thead>
<tr>
<th>Pendekatan</th>
<th>Bahasa Skrip</th>
<th>Alat Tambahan</th>
<th>Caching Bawaan</th>
<th>Kemudahan</th>
<th>Sesuai Untuk</th>
</tr>
</thead>
<tbody>
<tr><td>dotnet CLI</td><td>YAML</td><td>Tidak</td><td>Manual (CI)</td><td>Sangat mudah</td><td>Projek kecil</td></tr>
<tr><td>Nuke</td><td>C#</td><td>Ya (Nuke)</td><td>Ya ([Cached])</td><td>Sederhana</td><td>Projek besar, kompleks</td></tr>
<tr><td>Cake</td><td>C# (script)</td><td>Ya (Cake)</td><td>Tidak</td><td>Mudah</td><td>Projek sederhana-besar</td></tr>
<tr><td>MSBuild Custom Targets</td><td>XML</td><td>Tidak</td><td>Manual (CI)</td><td>Sederhana</td><td>Pasukan mahir MSBuild</td></tr>
<tr><td>Bullseye + SimpleExec</td><td>C# (console)</td><td>Ya (2 pakej)</td><td>Tidak</td><td>Mudah</td><td>Projek fleksibel</td></tr>
<tr><td>FAKE</td><td>F#</td><td>Ya (FAKE)</td><td>Tidak</td><td>Sederhana</td><td>Binaan kompleks, F#</td></tr>
</tbody>
</table>
<h2 id="cadangan">Cadangan</h2>
<ul>
<li><strong>Projek kecil / prototaip:</strong> <code>dotnet CLI</code> sahaja.</li>
<li><strong>Pengalaman paling hampir dengan Gradle:</strong> <code>Nuke</code>.</li>
<li><strong>Pasukan yang suka skrip berasingan:</strong> <code>Cake</code>.</li>
<li><strong>Organisasi yang ingin kekal MSBuild sepenuhnya:</strong> <code>MSBuild Custom Targets</code>.</li>
<li><strong>Pembangun yang mahukan C# tulen dan minimal:</strong> <code>Bullseye + SimpleExec</code>.</li>
<li><strong>Penggemar F# atau binaan sangat kompleks:</strong> <code>FAKE</code>.</li>
</ul>
<h2 id="pengurusan-dependensi">Pengurusan Dependensi & Kemaskini Automatik</h2>
<h3>Central Package Management (CPM)</h3>
<pre><code><Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Serilog" Version="3.1.1" />
</ItemGroup>
</Project></code></pre>
<p>Kemudian dalam setiap <code>.csproj</code>, anda hanya nyatakan <code>PackageReference</code> tanpa versi.</p>
<h3>Dependency Locking</h3>
<pre><code><PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup></code></pre>
<p>Jalankan <code>dotnet restore --use-lock-file</code>.</p>
<h3>Automasi Kemaskini Dependensi</h3>
<ul>
<li><strong>Dependabot</strong> (GitHub) – menyokong NuGet.</li>
<li><strong>Renovate</strong> – sangat boleh dikonfigurasi.</li>
</ul>
<pre><code># .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10</code></pre>
<h2 id="kualiti-kod">Analisis Kualiti Kod & Test Coverage</h2>
<h3>Code Coverage dengan Coverlet</h3>
<pre><code>dotnet test --collect:"XPlat Code Coverage"</code></pre>
<p>Hasilnya ialah fail <code>coverage.cobertura.xml</code> yang boleh dimuat naik ke SonarQube atau Codecov.</p>
<h3>Integrasi SonarQube</h3>
<pre><code>- name: Install SonarScanner
run: dotnet tool install --global dotnet-sonarscanner
- name: Begin Sonar analysis
run: dotnet-sonarscanner begin /k:"project-key" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.login="${{ secrets.SONAR_TOKEN }}"
- name: Build
run: dotnet build --no-restore -c Release
- name: Test
run: dotnet test --no-build -c Release --collect:"XPlat Code Coverage"
- name: End Sonar analysis
run: dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}"</code></pre>
<h2 id="deployment-lanjutan">Strategi Deployment Lanjutan</h2>
<h3>Docker Build & Push</h3>
<pre><code>Target DockerBuild => _ => _
.DependsOn(Publish)
.Executes(() =>
{
DockerTasks.DockerBuild(s => s
.SetPath(RootDirectory)
.SetFile("Dockerfile")
.SetTag($"myapp:{GitVersion.Sha}"));
});
Target DockerPush => _ => _
.DependsOn(DockerBuild)
.Executes(() =>
{
DockerTasks.DockerPush(s => s
.SetName($"myapp:{GitVersion.Sha}")
.SetServer("registry.example.com")
.SetUsername(Environment.GetEnvironmentVariable("DOCKER_USERNAME"))
.SetPassword(Environment.GetEnvironmentVariable("DOCKER_PASSWORD")));
});</code></pre>
<h3>Deployment ke Kubernetes</h3>
<pre><code>- name: Deploy to Kubernetes
run: |
kubectl set image deployment/myapp myapp=registry.example.com/myapp:${{ github.sha }}
kubectl rollout status deployment/myapp</code></pre>
<h2 id="rahsia-konfigurasi">Pengurusan Rahsia & Konfigurasi</h2>
<ul>
<li><strong>Environment Variables</strong> – akses melalui <code>Environment.GetEnvironmentVariable</code>.</li>
<li><strong>Azure Key Vault / AWS Secrets Manager</strong> – integrasikan dalam pipeline.</li>
<li><strong>.NET User Secrets</strong> – untuk pembangunan tempatan.</li>
</ul>
<pre><code>- task: AzureKeyVault@2
inputs:
azureSubscription: 'service-connection'
KeyVaultName: 'my-keyvault'
SecretsFilter: '*'</code></pre>
<h2 id="optimum-masa">Pengoptimuman Masa Binaan</h2>
<h3>MSBuild Static Graph</h3>
<pre><code>dotnet build -graphBuild</code></pre>
<h3>Distributed Caching</h3>
<ul>
<li>Azure DevOps Pipeline Caching dengan kunci berasaskan hash fail.</li>
<li>GitHub Actions Cache untuk <code>bin</code>, <code>obj</code>, dan <code>.nuget</code>.</li>
</ul>
<h3>Build Agents yang Dioptimumkan</h3>
<p>Gunakan mesin dengan CPU tinggi atau self-hosted runners dengan cache tempatan.</p>
<h2 id="struktur-projek">Contoh Struktur Projek Berbilang Modul</h2>
<pre><code>/MySolution.sln
/src/
/App/
App.csproj
/Lib/
Lib.csproj
/tests/
/App.Tests/
App.Tests.csproj
/Lib.Tests/
Lib.Tests.csproj
/build/
Build.cs (Nuke)
_build.csproj</code></pre>
<p>Dalam Nuke, anda boleh membina subset projek:</p>
<pre><code>Target BuildApp => _ => _
.DependsOn(Restore)
.Executes(() => DotNetBuild(s => s
.SetProjectFile(Solution.GetProject("App"))
.SetConfiguration(Configuration)
.EnableNoRestore()));</code></pre>
<h2 id="perbandingan-gradle">Perbandingan dengan Gradle pada Aspek Spesifik</h2>
<table>
<thead>
<tr><th>Aspek</th><th>Gradle</th><th>.NET Setara</th></tr>
</thead>
<tbody>
<tr><td>Multi-project</td><td><code>settings.gradle</code>, <code>:module:task</code></td><td><code>.sln</code>, <code>.slnf</code>, Nuke/Cake targets</td></tr>
<tr><td>Configuration cache</td><td>Ya</td><td>MSBuild static graph (<code>-graphBuild</code>)</td></tr>
<tr><td>Dependency locking</td><td><code>gradle.lockfile</code></td><td><code>packages.lock.json</code></td></tr>
<tr><td>Version catalog</td><td><code>libs.versions.toml</code></td><td><code>Directory.Packages.props</code> (CPM)</td></tr>
<tr><td>Code coverage</td><td>JaCoCo</td><td>Coverlet</td></tr>
<tr><td>Static analysis</td><td>SonarQube plugin</td><td>SonarScanner for .NET</td></tr>
<tr><td>Publishing</td><td><code>maven-publish</code></td><td><code>dotnet pack</code> + <code>dotnet nuget push</code></td></tr>
<tr><td>Parallel execution</td><td><code>--parallel</code></td><td><code>-m</code> (MSBuild), Nuke/Cake parallel targets</td></tr>
</tbody>
</table>
<h2 id="integrasi-pihak-ketiga">Integrasi dengan Alat Pihak Ketiga</h2>
<h3>Notifikasi</h3>
<pre><code>- name: Notify Slack
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: 'Build completed'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}</code></pre>
<h3>Pengurusan Isu</h3>
<p>Automatik tutup isu apabila PR yang berkaitan digabungkan (menggunakan GitHub Actions).</p>
<h3>Dashboard & Metrik</h3>
<p>Gunakan Grafana atau Azure Monitor untuk memantau prestasi binaan.</p>
<h2 id="kesimpulan">Kesimpulan</h2>
<p>Dengan menggabungkan semua pendekatan dan ciri lanjutan di atas, anda boleh membina pipeline CI/CD .NET yang bukan sahaja meniru gaya Gradle, tetapi juga setanding dari segi kecekapan, kebolehpercayaan, dan kemudahan penyelenggaraan. Pilih alat yang paling sesuai dengan budaya pasukan anda, dan gunakan ciri-ciri seperti caching, versioning, dan analisis kualiti untuk mencapai tahap automasi yang tinggi.</p>
<p>Jika anda ingin mendalami mana-mana topik di atas atau memerlukan contoh yang lebih spesifik, sila beritahu! Saya sedia membantu. 😊</p>
<!-- ================================================================ -->
<!-- BAHAGIAN BARU: GITHUB SEARCH & FILTERING GUIDE -->
<!-- ================================================================ -->
<hr style="margin:2rem 0; border-top:3px solid #2c3e50;" />
<h1 style="border-bottom-color:#6f42c1; color:#6f42c1;">🔎 Panduan Komprehensif: Menapis & Mencari Isu dan PR di GitHub</h1>
<div class="toc" style="border-color:#6f42c1;">
<h2>Kandungan (GitHub Search)</h2>
<ul>
<li><a href="#github-intro">Pengenalan</a></li>
<li><a href="#github-basic">Penapis Asas (is, state, author)</a></li>
<li><a href="#github-advanced">Penapis Lanjutan (label, milestone, assignee, review, status, exclusion)</a></li>
<li><a href="#github-date">Penapis Tarikh & Kuantiti</a></li>
<li><a href="#github-combination">Kombinasi Carian (AND, OR, NOT, petikan)</a></li>
<li><a href="#github-sort">Pilihan Pengisihan (Sorting)</a></li>
<li><a href="#github-automation">Tip Automasi & CLI</a></li>
<li><a href="#github-cheatsheet">Jadual Rujukan Cepat</a></li>
</ul>
</div>
<h2 id="github-intro">Pengenalan</h2>
<p>GitHub menyediakan enjin carian yang sangat berkuasa untuk <strong>Isu</strong> dan <strong>Pull Request (PR)</strong>. Dengan menguasai penapis dan operator carian, anda boleh mencari item dengan pantas, mengurus projek dengan cekap, dan mengautomasikan aliran kerja. Panduan ini merangkumi semua teknik asas hingga lanjutan.</p>
<h2 id="github-basic">1. Penapis Asas</h2>
<table>
<thead><tr><th>Penapis</th><th>Contoh</th><th>Keterangan</th></tr></thead>
<tbody>
<tr><td><code>is:issue</code></td><td><code>is:issue</code></td><td>Tunjukkan hanya Isu</td></tr>
<tr><td><code>is:pr</code></td><td><code>is:pr</code></td><td>Tunjukkan hanya Pull Request</td></tr>
<tr><td><code>state:open</code></td><td><code>state:open</code></td><td>Item yang terbuka</td></tr>
<tr><td><code>state:closed</code></td><td><code>state:closed</code></td><td>Item yang ditutup</td></tr>
<tr><td><code>author:USERNAME</code></td><td><code>author:octocat</code></td><td>Dibuat oleh pengguna tertentu</td></tr>
<tr><td><code>assignee:USERNAME</code></td><td><code>assignee:octocat</code></td><td>Ditugaskan kepada pengguna tertentu</td></tr>
</tbody>
</table>
<h2 id="github-advanced">2. Penapis Lanjutan</h2>
<table>
<thead><tr><th>Penapis</th><th>Contoh</th><th>Keterangan</th></tr></thead>
<tbody>
<tr><td><code>label:"..."</code></td><td><code>label:"bug"</code> / <code>label:bug</code></td><td>Item dengan label tertentu</td></tr>
<tr><td><code>milestone:"..."</code></td><td><code>milestone:"v1.0"</code></td><td>Item dalam milestone tertentu</td></tr>
<tr><td><code>project:"..."</code></td><td><code>project:"Project Board"</code></td><td>Item dalam projek tertentu</td></tr>
<tr><td><code>review:approved</code></td><td><code>review:approved</code></td><td>PR yang diluluskan</td></tr>
<tr><td><code>review:changes_requested</code></td><td><code>review:changes_requested</code></td><td>PR yang minta perubahan</td></tr>
<tr><td><code>review:required</code></td><td><code>review:required</code></td><td>PR yang memerlukan semakan</td></tr>
<tr><td><code>status:pending</code></td><td><code>status:pending</code></td><td>Status semakan masih dalam proses</td></tr>
<tr><td><code>status:success</code></td><td><code>status:success</code></td><td>Semakan berjaya</td></tr>
<tr><td><code>status:failure</code></td><td><code>status:failure</code></td><td>Semakan gagal</td></tr>
<tr><td><code>team:ORG/TEAM</code></td><td><code>team:github/engineering</code></td><td>Ditugaskan kepada pasukan tertentu</td></tr>
<tr><td><code>linked:pr</code></td><td><code>linked:pr</code></td><td>Isu yang dipautkan dengan PR</td></tr>
<tr><td><code>linked:issue</code></td><td><code>linked:issue</code></td><td>PR yang dipautkan dengan Isu</td></tr>
<tr><td><code>-label:duplicate</code></td><td><code>-label:duplicate</code></td><td>Kecualikan label tertentu (tanda minus)</td></tr>
<tr><td><code>no:label</code></td><td><code>no:label</code></td><td>Item tanpa label</td></tr>
<tr><td><code>no:assignee</code></td><td><code>no:assignee</code></td><td>Item tanpa assignee</td></tr>
<tr><td><code>no:milestone</code></td><td><code>no:milestone</code></td><td>Item tanpa milestone</td></tr>
<tr><td><code>no:project</code></td><td><code>no:project</code></td><td>Item tanpa projek</td></tr>
</tbody>
</table>
<h2 id="github-date">3. Penapis Tarikh & Kuantiti</h2>
<table>
<thead><tr><th>Penapis</th><th>Contoh</th><th>Keterangan</th></tr></thead>
<tbody>
<tr><td><code>created:>YYYY-MM-DD</code></td><td><code>created:>2024-01-01</code></td><td>Dicipta selepas tarikh</td></tr>
<tr><td><code>created:<YYYY-MM-DD</code></td><td><code>created:<2024-12-31</code></td><td>Dicipta sebelum tarikh</td></tr>
<tr><td><code>updated:>YYYY-MM-DD</code></td><td><code>updated:>2024-06-01</code></td><td>Dikemas kini selepas tarikh</td></tr>
<tr><td><code>comments:>N</code></td><td><code>comments:>10</code></td><td>Mempunyai lebih daripada N komen</td></tr>
<tr><td><code>interactions:>N</code></td><td><code>interactions:>5</code></td><td>Interaksi (komen + reaksi) melebihi N</td></tr>
</tbody>
</table>
<h2 id="github-combination">4. Kombinasi Carian (AND, OR, NOT)</h2>
<ul>
<li><strong>Gunakan <code>AND</code> (atau ruang):</strong> <code>is:issue label:bug assignee:octocat</code> (semua syarat mesti dipenuhi).</li>
<li><strong>Gunakan <code>OR</code>:</strong> <code>label:bug OR label:enhancement</code>.</li>
<li><strong>Gunakan <code>NOT</code> atau <code>-</code>:</strong> <code>label:bug -label:duplicate</code>.</li>
<li><strong>Petikan untuk frasa tepat:</strong> <code>"error 500"</code> (mencari frasa eksak dalam tajuk/kandungan).</li>
<li><strong>Tanda kurung untuk pengelompokan:</strong> <code>(label:bug OR label:enhancement) AND assignee:octocat</code>.</li>
</ul>
<div class="note"><strong>💡 Tip:</strong> Carian lalai menggunakan <code>AND</code> antara istilah. Gunakan <code>OR</code> dan <code>NOT</code> secara eksplisit untuk logik yang lebih kompleks.</div>
<h2 id="github-sort">5. Pilihan Pengisihan (Sorting)</h2>
<p>Tambah <code>sort:</code> pada akhir carian untuk menyusun hasil:</p>
<ul>
<li><code>sort:created-desc</code> — terbaru dahulu (lalai untuk isu)</li>
<li><code>sort:created-asc</code> — tertua dahulu</li>
<li><code>sort:updated-desc</code> — terbaru dikemas kini</li>
<li><code>sort:updated-asc</code> — paling lama tidak dikemas kini</li>
<li><code>sort:comments-desc</code> — paling banyak komen</li>
<li><code>sort:comments-asc</code> — paling sedikit komen</li>
<li><code>sort:reactions-desc</code> — paling banyak reaksi (👍, 🚀, dll.)</li>
</ul>
<p><strong>Contoh:</strong> <code>is:issue label:bug sort:updated-desc</code> — Isu berlabel bug, diisih mengikut tarikh kemas kini terkini.</p>
<h2 id="github-automation">6. Tip Automasi & CLI</h2>
<h3>Pautan Carian Tersimpan</h3>
<p>GitHub menyimpan carian anda dalam URL. Anda boleh <strong>bookmark</strong> pautan tersebut atau menambahkannya ke <strong>Saved searches</strong> di profil anda untuk akses pantas.</p>
<h3>GitHub CLI (<code>gh</code>)</h3>
<p>Gunakan <code>gh search</code> dalam skrip atau terminal:</p>
<pre><code># Cari isu yang terbuka berlabel "bug" dalam repo "owner/repo"
gh issue list --repo owner/repo --label bug --state open
# Cari PR yang diluluskan
gh pr list --state open --review-approved
# Gabungkan dengan penapis lanjutan
gh search issues "is:issue label:bug assignee:octocat" --limit 10</code></pre>
<h3>Automasi dalam GitHub Actions</h3>
<p>Anda boleh menggunakan <code>gh search</code> dalam workflow untuk mengautomasikan tugas seperti mengumpul isu lapuk atau memberi label secara pukal:</p>
<pre><code>- name: Find stale issues
run: |
gh search issues "is:issue state:open updated:<2024-01-01" --limit 100 > stale_issues.txt
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}</code></pre>
<h2 id="github-cheatsheet">7. Jadual Rujukan Cepat</h2>
<table>
<thead><tr><th>Kategori</th><th>Contoh Penapis</th></tr></thead>
<tbody>
<tr><td>Jenis</td><td><code>is:issue</code>, <code>is:pr</code></td></tr>
<tr><td>Status</td><td><code>state:open</code>, <code>state:closed</code></td></tr>
<tr><td>Pengguna</td><td><code>author:user</code>, <code>assignee:user</code>, <code>mentions:user</code></td></tr>
<tr><td>Metadata</td><td><code>label:bug</code>, <code>milestone:v1.0</code>, <code>project:board</code></td></tr>
<tr><td>Semakan PR</td><td><code>review:approved</code>, <code>review:changes_requested</code></td></tr>
<tr><td>Status CI</td><td><code>status:success</code>, <code>status:failure</code></td></tr>
<tr><td>Pengecualian</td><td><code>-label:duplicate</code>, <code>no:label</code>, <code>no:assignee</code></td></tr>
<tr><td>Tarikh</td><td><code>created:>2024-01-01</code>, <code>updated:<2024-12-31</code></td></tr>
<tr><td>Kuantiti</td><td><code>comments:>10</code>, <code>interactions:>5</code></td></tr>
<tr><td>Logik</td><td><code>AND</code>, <code>OR</code>, <code>NOT</code>, petikan <code>"..."</code></td></tr>
<tr><td>Pengisihan</td><td><code>sort:created-desc</code>, <code>sort:updated-desc</code>, <code>sort:comments-desc</code></td></tr>
</tbody>
</table>
<p><strong>🔗 Sumber Rasmi:</strong> <a href="https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests" target="_blank">Dokumentasi GitHub: Searching Issues and Pull Requests</a></p>
<!-- ================================================================ -->
<!-- AKHIR BAHAGIAN GITHUB SEARCH -->
<!-- ================================================================ -->
<!-- ================================================================ -->
<!-- DATA SIJIL (200 PENTAULIAHAN GLOBAL) -->
<!-- ================================================================ -->
<hr style="margin:2rem 0; border-top:3px solid #3498db;" />
<h1 style="border-bottom-color:#2c3e50;">200 Pentauliahan Global — Muhamad Sazwan Bin Ismail</h1>
<div style="background:#f0f7ff; padding:1.2rem 1.8rem; border-radius:8px; margin:1.5rem 0; display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center;">
<div><strong>Rujukan:</strong> MSI-2026-07734 | <strong>Lejar:</strong> END-MYS-0425</div>
<div><span style="background:#28a745; color:#fff; padding:0.2rem 1rem; border-radius:30px;">GREEN ACROSS THE BOARD</span></div>
<div><i class="far fa-calendar-alt"></i> 17 Mei 2026 · Pusat Kawalan Kedaulatan AI, Malaysia</div>
</div>
<div style="display:flex; flex-wrap:wrap; gap:1.5rem 3rem; background:#f8f9fa; padding:0.8rem 2rem; border-radius:40px; margin-bottom:2rem;">
<div><strong>200</strong> Sijil</div>
<div><strong>18</strong> Domain</div>
<div><strong>45+</strong> Penerbit</div>
<div><strong>AES-256 GCM</strong> · SHA-256</div>
<div><span style="color:#28a745;">✓</span> Semua <strong>Aktif & Disahkan</strong></div>
</div>
<!-- ===== CATEGORY A (1–10) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">A</span><h2>AI & Machine Learning</h2><span class="cat-count">10 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#1</span><span class="cert-title">Google Professional ML Engineer</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Google Cloud</div><div class="cert-meta"><span class="id">ML-SAZWAN-001</span><span class="status-badge">✓ OAuth2</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#2</span><span class="cert-title">AWS Certified AI & ML – Specialty</span></div><div class="cert-publisher"><i class="fas fa-building"></i> AWS</div><div class="cert-meta"><span class="id">AWS-AI-7734</span><span class="status-badge">✓ IAM+CloudTrail</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#3</span><span class="cert-title">NVIDIA DLI: Computer Vision</span></div><div class="cert-publisher"><i class="fas fa-building"></i> NVIDIA</div><div class="cert-meta"><span class="id">DL-CV-7734</span><span class="status-badge">✓ NGC API</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#4</span><span class="cert-title">Stanford ML Specialization</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Stanford University</div><div class="cert-meta"><span class="id">STANFORD-ML-0425</span><span class="status-badge">✓ Ijazah</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#5</span><span class="cert-title">Azure AI Engineer Associate</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Microsoft</div><div class="cert-meta"><span class="id">MS-AI-7734</span><span class="status-badge">✓ Windows Hello+FIDO2</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#6</span><span class="cert-title">IBM AI Engineering Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> IBM</div><div class="cert-meta"><span class="id">IBM-AI-7734</span><span class="status-badge">✓ Hyperledger Fabric</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#7</span><span class="cert-title">Intel Edge AI Certification</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Intel</div><div class="cert-meta"><span class="id">EDGE-7734</span><span class="status-badge">✓ Intel SGX</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#8</span><span class="cert-title">TensorFlow Developer Certificate</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Google/TensorFlow</div><div class="cert-meta"><span class="id">TF-7734</span><span class="status-badge">✓ Dompet Crypto</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#9</span><span class="cert-title">DeepLearning.AI: NLP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> DeepLearning.AI/Coursera</div><div class="cert-meta"><span class="id">NLP-7734</span><span class="status-badge">✓ TLS 1.3</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#10</span><span class="cert-title">MIT xPRO: Coding</span></div><div class="cert-publisher"><i class="fas fa-building"></i> MIT xPRO</div><div class="cert-meta"><span class="id">MIT-CODING-7734</span><span class="status-badge">✓ Biometrik</span></div></div>
</div>
</div>
<!-- ===== CATEGORY B (11–20) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">B</span><h2>Keselamatan Siber & Kedaulatan Digital</h2><span class="cat-count">10 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#11</span><span class="cert-title">CISSP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISC2</div><div class="cert-meta"><span class="id">CISSP-7734</span><span class="status-badge">✓ SHA-256</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#12</span><span class="cert-title">CompTIA Security+</span></div><div class="cert-publisher"><i class="fas fa-building"></i> CompTIA</div><div class="cert-meta"><span class="id">SECPLUS-7734</span><span class="status-badge">✓ CertMetrics</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#13</span><span class="cert-title">CEH v12</span></div><div class="cert-publisher"><i class="fas fa-building"></i> EC-Council</div><div class="cert-meta"><span class="id">CEH-7734</span><span class="status-badge">✓ Aspen+OTP</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#14</span><span class="cert-title">CISM</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISACA</div><div class="cert-meta"><span class="id">CISM-7734</span><span class="status-badge">✓ Hash Rantaian</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#15</span><span class="cert-title">GIAC GSEC</span></div><div class="cert-publisher"><i class="fas fa-building"></i> GIAC</div><div class="cert-meta"><span class="id">GSEC-7734</span><span class="status-badge">✓ SANS</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#16</span><span class="cert-title">OSCP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Offensive Security</div><div class="cert-meta"><span class="id">OSCP-7734</span><span class="status-badge">✓ Kunci Awam</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#17</span><span class="cert-title">CCSP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISC2</div><div class="cert-meta"><span class="id">CCSP-7734</span><span class="status-badge">✓ MFA</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#18</span><span class="cert-title">Certified in Cybersecurity (CC)</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISC2</div><div class="cert-meta"><span class="id">CC-7734</span><span class="status-badge">✓ Entry-Level</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#19</span><span class="cert-title">Fortinet NSE 7</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Fortinet</div><div class="cert-meta"><span class="id">NSE7-7734</span><span class="status-badge">✓ Digital Signature</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#20</span><span class="cert-title">Cisco CyberOps Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Cisco</div><div class="cert-meta"><span class="id">CYBEROPS-7734</span><span class="status-badge">✓ CertTracker</span></div></div>
</div>
</div>
<!-- ===== CATEGORY C (21–30) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">C</span><h2>Blockchain & Sovereign Ledger</h2><span class="cat-count">10 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#21</span><span class="cert-title">CBSP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Blockchain Council</div><div class="cert-meta"><span class="id">CBSP-7734</span><span class="status-badge">✓ On-Chain</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#22</span><span class="cert-title">Certified Blockchain Architect</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Blockchain Council</div><div class="cert-meta"><span class="id">ARCH-7734</span><span class="status-badge">✓ DID</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#23</span><span class="cert-title">Ethereum Developer</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ConsenSys</div><div class="cert-meta"><span class="id">ETH-7734</span><span class="status-badge">✓ Mainnet</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#24</span><span class="cert-title">Hyperledger Fabric Admin</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Linux Foundation</div><div class="cert-meta"><span class="id">HLF-7734</span><span class="status-badge">✓ LF Wallet</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#25</span><span class="cert-title">Corda Certified Developer</span></div><div class="cert-publisher"><i class="fas fa-building"></i> R3</div><div class="cert-meta"><span class="id">CORDA-7734</span><span class="status-badge">✓ Corda Network</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#26</span><span class="cert-title">Ripple (XRP) Ledger Certification</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Ripple</div><div class="cert-meta"><span class="id">XRP-7734</span><span class="status-badge">✓ XRP Account</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#27</span><span class="cert-title">Smart Contract Security Auditor</span></div><div class="cert-publisher"><i class="fas fa-building"></i> CertIK</div><div class="cert-meta"><span class="id">SCSA-7734</span><span class="status-badge">✓ Audit Chain</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#28</span><span class="cert-title">Decentralized Identity Specialist</span></div><div class="cert-publisher"><i class="fas fa-building"></i> DIF</div><div class="cert-meta"><span class="id">DID-7734</span><span class="status-badge">✓ IPFS</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#29</span><span class="cert-title">Cryptocurrency Forensic Investigator</span></div><div class="cert-publisher"><i class="fas fa-building"></i> CipherTrace</div><div class="cert-meta"><span class="id">CFI-7734</span><span class="status-badge">✓ API Tracker</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#30</span><span class="cert-title">Web3 Security Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Web3 Foundation</div><div class="cert-meta"><span class="id">W3S-7734</span><span class="status-badge">✓ Polkadot.js</span></div></div>
</div>
</div>
<!-- ===== CATEGORY D (31–40) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">D</span><h2>Infrastruktur Awan & Geopintar</h2><span class="cat-count">10 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#31</span><span class="cert-title">Azure Solutions Architect Expert</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Microsoft</div><div class="cert-meta"><span class="id">AZ-ARCH-7734</span><span class="status-badge">✓ Microsoft</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#32</span><span class="cert-title">Google Cloud Digital Leader</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Google Cloud</div><div class="cert-meta"><span class="id">CDL-7734</span><span class="status-badge">✓ Google Credential</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#33</span><span class="cert-title">AWS Solutions Architect Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> AWS</div><div class="cert-meta"><span class="id">SA-PRO-7734</span><span class="status-badge">✓ Biometrik</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#34</span><span class="cert-title">Terraform Associate</span></div><div class="cert-publisher"><i class="fas fa-building"></i> HashiCorp</div><div class="cert-meta"><span class="id">TERRA-7734</span><span class="status-badge">✓ HCP</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#35</span><span class="cert-title">Certified Kubernetes Administrator</span></div><div class="cert-publisher"><i class="fas fa-building"></i> CNCF</div><div class="cert-meta"><span class="id">CKA-7734</span><span class="status-badge">✓ Kluster Peribadi</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#36</span><span class="cert-title">Red Hat Certified Architect</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Red Hat</div><div class="cert-meta"><span class="id">RHCA-7734</span><span class="status-badge">✓ Red Hat Portal</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#37</span><span class="cert-title">Oracle Cloud Infrastructure Architect</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Oracle</div><div class="cert-meta"><span class="id">OCI-ARCH-7734</span><span class="status-badge">✓ MFA</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#38</span><span class="cert-title">VMware VCP-Cloud Management</span></div><div class="cert-publisher"><i class="fas fa-building"></i> VMware</div><div class="cert-meta"><span class="id">VCP-CM-7734</span><span class="status-badge">✓ Kunci Awam</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#39</span><span class="cert-title">GISP (GIS Professional)</span></div><div class="cert-publisher"><i class="fas fa-building"></i> GISCI</div><div class="cert-meta"><span class="id">GISP-7734</span><span class="status-badge">✓ Geopintar</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#40</span><span class="cert-title">Satellite Imagery Analysis for AI</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Esri / Maxar</div><div class="cert-meta"><span class="id">SAT-7734</span><span class="status-badge">✓ ArcGIS+API</span></div></div>
</div>
</div>
<!-- ===== CATEGORY E (41–50) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">E</span><h2>Kepimpinan & Strategi Digital</h2><span class="cat-count">10 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#41</span><span class="cert-title">PMP</span></div><div class="cert-publisher"><i class="fas fa-building"></i> PMI</div><div class="cert-meta"><span class="id">PMP-7734</span><span class="status-badge">✓ PMI Registry</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#42</span><span class="cert-title">ITIL 4 Managing Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> AXELOS</div><div class="cert-meta"><span class="id">ITIL4-7734</span><span class="status-badge">✓ AXELOS Portal</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#43</span><span class="cert-title">COBIT 2019 Foundation</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISACA</div><div class="cert-meta"><span class="id">COBIT-7734</span><span class="status-badge">✓ 2FA</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#44</span><span class="cert-title">CDPSE</span></div><div class="cert-publisher"><i class="fas fa-building"></i> ISACA</div><div class="cert-meta"><span class="id">CDPSE-7734</span><span class="status-badge">✓ Privasi Terenkripsi</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#45</span><span class="cert-title">Digital Transformation Specialist</span></div><div class="cert-publisher"><i class="fas fa-building"></i> IQBBA</div><div class="cert-meta"><span class="id">DTS-7734</span><span class="status-badge">✓ IQBBA</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#46</span><span class="cert-title">AI Governance Professional (AIGP)</span></div><div class="cert-publisher"><i class="fas fa-building"></i> IAPP</div><div class="cert-meta"><span class="id">AIGP-7734</span><span class="status-badge">✓ Digital Signature</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#47</span><span class="cert-title">Quantum Computing Foundations</span></div><div class="cert-publisher"><i class="fas fa-building"></i> IBM/Qiskit</div><div class="cert-meta"><span class="id">QUANTUM-7734</span><span class="status-badge">✓ Qiskit Badge</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#48</span><span class="cert-title">ISO/IEC 27001 Lead Auditor</span></div><div class="cert-publisher"><i class="fas fa-building"></i> PECB</div><div class="cert-meta"><span class="id">ISO27K-7734</span><span class="status-badge">✓ Hash Audit</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#49</span><span class="cert-title">Strategic Intelligence & Analysis</span></div><div class="cert-publisher"><i class="fas fa-building"></i> INSA</div><div class="cert-meta"><span class="id">INTEL-7734</span><span class="status-badge">✓ Keselamatan Berlapis</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#50</span><span class="cert-title">Global Technology Leadership</span></div><div class="cert-publisher"><i class="fas fa-building"></i> MIT Sloan/edX</div><div class="cert-meta"><span class="id">LEAD-7734</span><span class="status-badge">✓ MIT Integriti</span></div></div>
</div>
</div>
<!-- ===== CATEGORY F (51–65) ===== -->
<div class="category-section">
<div class="cat-header"><span class="cat-letter">F</span><h2>Advanced AI & Data Science</h2><span class="cat-count">15 sijil</span></div>
<div class="cert-grid">
<div class="cert-card"><div class="cert-header"><span class="cert-num">#51</span><span class="cert-title">Google Professional Data Engineer</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Google Cloud</div><div class="cert-meta"><span class="id">DE-7734-001</span><span class="status-badge">✓ FIDO2</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#52</span><span class="cert-title">Databricks Certified Data Engineer Pro</span></div><div class="cert-publisher"><i class="fas fa-building"></i> Databricks</div><div class="cert-meta"><span class="id">DE-PRO-7734</span><span class="status-badge">✓ Lakehouse</span></div></div>
<div class="cert-card"><div class="cert-header"><span class="cert-num">#53</span><span class="cert-title">SAS Certified AI & ML Professional</span></div><div class="cert-publisher"><i class="fas fa-building"></i> SAS</div><div class="cert-meta"><span class="id">AIML-7734</span><span class="status-badge">✓ SAS Viya</span></div></di…
|
🤖 CodeAnt AI — Review Status
|
Thanks for using CodeAnt! 🎉We're free for open-source projects. if you're enjoying it, help us grow by sharing. |
This was
linked to
issues
Aug 16, 2026
Closed
Closed
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User description
Added comprehensive guide on filtering and searching issues and pull requests in GitHub, including basic and advanced filtering techniques, sorting options, and automation tips.Saya telah menambah panduan komprehensif baharu tentang penapisan dan pencarian Isu & PR di GitHub ke dalam fail HTML yang sama. Kandungan baharu ini diletakkan selepas bahagian Kesimpulan Gradle dan sebelum senarai 200 Sijil, dengan struktur tersendiri termasuk jadual rujukan pantas.
Berikut adalah fail HTML penuh dan muktamad — salin dan simpan sebagai
.html: