Skip to content
View HarnageaGabriel's full-sized avatar

Block or report HarnageaGabriel

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
HarnageaGabriel/README.md
Gabriel Harnagea, DevOps and Platform Engineer

LinkedInEmailTURIN, ITALY



EnglishItaliano

About

I'm a DevOps & Platform Engineer on enterprise projects: CI/CD, Kubernetes, Terraform, cloud cost.

I wrote application code before I ran the infrastructure that hosts it, which pays off mostly when a build breaks and someone has to know where to look.

The open-source work here comes from the same place. Something misbehaves in a real deployment, I go read the source, and the fix goes upstream rather than into a patch I keep to myself.

role: DevOps & Platform Engineerplatform: [Azure, Kubernetes, GitOps, Terraform, Azure DevOps, GitHub Actions]also: [FinOps, Agentic DevOps, .NET backend]languages: [C#, TypeScript, Go, Rust, Python, Bash, PowerShell]into: [correctness bugs, observability gaps, release plumbing, cloud cost]based_in: Turin, Italy

What I do


Pipelines
Azure DevOps · GitHub Actions · templates

Kubernetes
AKS · k3d · Helm · Helmfile

Infrastructure
Terraform · scale sets · golden images

Containers
Docker · Helm charts · OCI on ACR/GHCR

Cloud & cost
Azure · reservations · FinOps

Backend
.NET 8/9 · CQRS · DDD

Stack

Platform & CI/CD
Azure DevOps YAML pipelines and reusable templates · GitHub Actions · Helm charts and Helmfile releases · OCI push to ACR/GHCR · ApiOps policy automation on Azure API Management · Jinja2 templating · branch policies, PR review, code review as a gate

Cloud & infrastructure
Kubernetes on AKS and k3d on-prem · NGINX Ingress Controller · Terraform (azurerm, azuredevops) · VM Scale Sets as self-hosted agent pools · golden images for faster scale-out · Container Registry, Storage Accounts, Functions, Entra · reservation and cost governance

Backend & architecture
REST/HTTP APIs in .NET 8/9 · Worker Services · CQRS with MediatR · Domain-Driven Design · hexagonal and N-tier architectures · API gateway with Ocelot · EF Core and Dapper · PostgreSQL, MongoDB · NUnit + Moq, self-hosted integration tests

Identity, storage & AI
Keycloak with OAuth 2.0 · JWT bearer flows · SeaweedFS through the S3-compatible client · self-hosted LLM inference with Ollama · RAG pipelines with ChromaDB and embedding models · Copilot governance and AI spend controls

Upstream contributions

46 pull requests across 37 projects I run or depend on. 8 merged so far, 33 still in review.

Merged

ProjectChangePR
dotnet/runtimeFix CompareInfo.IsPrefix/IsSuffix with CompareOptions.IgnoreSymbols not ignoring leading/trailing symbols#132397
kubernetes-sigs/apiserver-network-proxyAdd connection_duration_seconds histogram for post-dial connection lifespan#899
StackExchange/StackExchange.RedisAdd NOMKSTREAM support to XADD#3186
DapperLib/DapperAOTFix false-positive DAP214 for {=XXX} literal-replacement syntax#191
nunit/nunit-consoleAdd AssemblyTargetFramework to IExtensionNode#1867
nunit/nunit-consoleFix --list-extensions showing wrong target framework for extensions#1861
Azure/azure-powershellFix Get-AzSubscription silently ignoring mismatched -TenantId under MSI auth#29994
quartznet/quartznetAdd job type exclusion filter to trigger acquisition#3282
In review (33 open pull requests)
ProjectChangePR
moby/mobyBridge: repair stale WSL2Mirrored loopback0 drop rules#53458
moby/mobyReuse per-host authorizers across a pull in the c8d resolver#53457
kubernetes/kube-openapiFix duplicate map keys when a type embeds two structs sharing a field#631
kubernetes-sigs/krew-indexAdd safe-rollout plugin#6213
kubernetes/perf-testsAdd unit tests for clusterloader2/pkg/errors#4261
docker/cliNormalize the registry server address to lowercase for credential lookup#7184
containerd/runwasiGate ctr image import --local by detected ctr version#1177
argoproj/argo-cdAdd ignoreDraft filter to ApplicationSet Pull Request generator#29265
argoproj/argo-rolloutsStop degraded stable RS from permanently blocking subset DestinationRule switch#4990
argoproj/argo-workflowsScope RemoveFromQueue to the calling controller#16739
open-policy-agent/opaMake allow_net restrict file:// refs in JSON schemas#9044
spiffe/spireFix inaccurate expiring/outdated SVID sync metrics#7230
thanos-io/objstoreSupport a custom GCS API endpoint through the endpoint config option#270
saltstack/saltFix file.managed omitting mode from changes when creating a file#70084
BurntSushi/ripgrepDetect compressed files by magic number in search-zip, not just by extension#3516
BurntSushi/ripgrepFix the dangling backslash error for an escaped trailing space#3515
tokio-rs/tracingAdd an opt-in field value truncation wrapper to the subscriber#3600
dtolnay/cxxStrip r# prefix from raw identifiers in generated C++ names#1749
rust-embedded/heaplessAdd shift_remove family to IndexMap/IndexSet#685
dotnet/runtimeReturn empty string instead of throwing when getpwuid_r fails unexpectedly#132396
dotnet/msbuildDisable nullable analysis for net4x leg of multi-targeted projects#14738
StackExchange/StackExchange.RedisFix Sentinel connection leak and AbortOnConnectFail=false handling#3187
StackExchange/StackExchange.RedisMake fallback discovery and keep-alive probes cluster-slot aware#3185
NLog/NLogChange the DateLayoutRenderer default format to yyyy-MM-dd HH:mm:ss.ffff#6252
nsubstitute/NSubstituteDocument that Received.InOrder does not track property getters#998
dotnet-outdated/dotnet-outdatedReport packages whose source repository is archived or deleted#781
ansible/terraform-provider-aapRemove aap_host from state on 404 during Read#194
traefik/traefik-helm-chartRestore secretResourceNames for namespaced Role#1972
HangfireIO/HangfireDon't disable recurring jobs on transient storage errors#2589
argoproj/argo-eventsClose NATS connection when trigger connection init fails#4158
temporalio/temporalFail batch operations when Visibility queries time out repeatedly#11753
tikv/tikvTikv_util: fix undefined behavior in RangeLatchGuard's Drop impl#20022
zed-industries/zedRetain worktrees with uncommitted changes when archiving agent threads#63163

Projects

ProjectWhat it isStack
kubectl-safe-rolloutA kubectl plugin that tells you why a rollout failed or stalled. Deterministic classification, no LLM, and it never writes to the clusterGoclient-gov0.3.0
github-actions-recipesThe workflows behind my CI/CD and FinOps posts, one variable isolated per recipeGitHub Actionslive
token-optimizationCuts token usage when working with LLM coding agents. Re-running the setup is a no-opPowerShelllive

kubectl-safe-rollout is submitted to krew-index, so it will be installable with kubectl krew install safe-rollout.

Writing

I write on LinkedIn about platform details that usually pass unchecked: how Azure DevOps resolves its three expression syntaxes, the compliance rules for self-hosted runners, what Copilot code review does and does not decide, and whether an Azure reservation discount is still applying to anything.

LinkedIn


Pinned Loading

  1. github-actions-recipesgithub-actions-recipesPublic

    Runnable GitHub Actions workflows behind my CI/CD and FinOps write-ups — one variable isolated per recipe

  2. kubectl-safe-rolloutkubectl-safe-rolloutPublic

    kubectl plugin that explains why a rollout failed or stalled: deterministic cause classification, no LLM, never modifies the cluster

    Go 2

  3. token-optimizationtoken-optimizationPublic

    Idempotent PowerShell bootstrap for AI coding-agent configuration — one command per machine or repo

    PowerShell 2