Commit Graph

77 Commits

Author SHA1 Message Date
GraceSolutions 1511dc4411 M10 PKI: add 6 cmdlets (Get-/Search-/ConvertTo-/Install-/Uninstall-/Export-InfisicalCertificate), BouncyCastle-backed PemCertificateBuilder, formatting/type metadata for PKI models, and cert-manager <-> pki route alias fallback via InvokeWithCandidateFallback. Primary CA paths now /api/v1/cert-manager/ca/internal[/{caId}]; legacy /api/v1/pki/* retained as fallback. 190/190 tests passing. 2026-06-03 21:24:09 -04:00
gsadmin 0b9b67fd69 Merge pull request 'Tests: roll forward to latest major .NET runtime' (#3) from dev into main
Reviewed-on: #3
2026-06-04 00:47:38 +00:00
GraceSolutions 2cbd5c2008 Add BulkSecretsTransformationAttribute for -Secrets parameter normalization
Publish to PowerShell Gallery / build (pull_request) Failing after 37s
Publish to PowerShell Gallery / release (pull_request) Has been skipped
Publish to PowerShell Gallery / publish (pull_request) Has been skipped
Normalizes Hashtable, OrderedDictionary, PSObject-wrapped, and typed generic dictionaries into IDictionary<string,string>[] before parameter binding, enabling native PowerShell @{...} and [ordered]@{...} literals against the strongly-typed -Secrets parameter on New-/Update-InfisicalSecret. Adds 8 transformation tests; 174/174 passing.
2026-06-03 20:21:00 -04:00
GraceSolutions 211fbcf34d Bulk v4 batch routes + strongly-typed -Secrets IDictionary[string,string][]
- Endpoint registry: register POST/PATCH/DELETE /api/v4/secrets/batch as preferred candidates for BulkCreate/Update/Delete; v3 raw routes retained as automatic fallback.
- DTOs: add projectId (required for v4) alongside workspaceId on the three batch request envelopes; both serialized when set, both ignored when null.
- SecretsClient: populate ProjectId in CreateBatch/UpdateBatch/DeleteBatch so v4 succeeds on first attempt.
- Cmdlets: -Secrets on New/Update-InfisicalSecret changed from Hashtable[] to IDictionary<string,string>[] for stronger typing and tab-completion; converter rewritten to accept IEnumerable<IDictionary<string,string>>. TagIds parsed from comma-separated string; nested Metadata dropped from bulk hashtable surface (still settable programmatically on bulk items).
- Tests: 166 passing (was 161). Bulk endpoints now resolve to v4 primary with v3 fallback; new tests verify projectId envelope serialization, dual-key omission, and TagIds trimming.
2026-06-03 20:06:13 -04:00
GraceSolutions e0a6ef02df M9: bulk + duplicate + connection inheritance
- Bulk parameter sets on New-/Update-/Remove-InfisicalSecret via v3/secrets/batch/raw.
- Copy-InfisicalSecret cmdlet wrapping v4/secrets/duplicate.
- InfisicalCmdletBase.Resolve{ProjectId,Environment,SecretPath,ApiVersion,OrganizationId} with verbose inheritance logging.
- All resource cmdlets refactored to use the resolution helpers.
- InfisicalBulkSecretConverter for flexible Hashtable -> DTO mapping.
- 22 new unit tests covering registry, DTOs, converter, and inheritance helpers. Total: 161 passing.
2026-06-03 19:59:11 -04:00
GraceSolutions 09c3d5c68b M8: CHANGELOG + DesignSpec for 2026.06.03.2136 (CRUD + auth provider expansion); refresh published manifest/binary 2026-06-03 17:38:45 -04:00
GraceSolutions d9822aab7a M7: Auth providers - JWT/OIDC/LDAP/Azure/GCP IAM via Connect-Infisical parameter sets 2026-06-03 17:36:34 -04:00
GraceSolutions 3d93fb1173 M6: Secrets mutation - New/Update/Remove cmdlets + client methods + DTO tests 2026-06-03 17:30:29 -04:00
GraceSolutions 84ece43d29 M5: Tags CRUD - model, DTOs, mapper, client, 5 cmdlets + tests 2026-06-03 17:27:49 -04:00
GraceSolutions 5316144933 M4: Folders CRUD - model, DTOs, mapper, client, 5 cmdlets + tests 2026-06-03 17:25:46 -04:00
GraceSolutions 6eab0713b5 M3: Environments CRUD - model, DTOs, mapper, client, 5 cmdlets + tests 2026-06-03 17:23:11 -04:00
GraceSolutions 0ebacddb2c M2: Projects CRUD - model, DTOs, mapper, client, 5 cmdlets + tests 2026-06-03 17:21:02 -04:00
GraceSolutions 612ecf2c7d M1: endpoint registry + shared API invoker for full CRUD expansion 2026-06-03 17:17:53 -04:00
GraceSolutions 269f0ea438 Tests: roll forward to latest major .NET runtime
Adds <RollForward>LatestMajor</RollForward> to the test project so the net8.0 testhost can run on hosts that only have a newer .NET runtime installed (e.g. CI hosts with .NET 10 only). Locally with .NET 8 present this is a no-op; on the runner with .NET 10.0.8 the testhost will roll forward instead of aborting with 'You must install or update .NET to run this application'.
2026-06-03 17:02:10 -04:00
gsadmin f544b45267 Merge pull request 'Run CI on self-hosted host runners (powershell-linux); switch publish to PSResourceGet' (#2) from dev into main
Reviewed-on: #2
2026-06-03 13:33:24 +00:00
GraceSolutions 6f0055bd68 Run CI on self-hosted host runners (powershell-linux); switch publish to PSResourceGet
Publish to PowerShell Gallery / build (pull_request) Failing after 21s
Publish to PowerShell Gallery / release (pull_request) Has been skipped
Publish to PowerShell Gallery / publish (pull_request) Has been skipped
All three jobs (build, release, publish) now target runs-on: powershell-linux, which maps to :host on the Gitea runner so steps execute directly on the host OS instead of inside a Docker container. Dropped the apt-get/sudo install blocks and actions/setup-dotnet in favor of a fast preflight that verifies pwsh (and dotnet for the build job) are present, failing loudly otherwise. Publish job migrated off the legacy PowerShellGet v2 path (Set-PSRepository / Install-PackageProvider NuGet / Publish-Module) to Microsoft.PowerShell.PSResourceGet (Set-PSResourceRepository / Publish-PSResource), which is bundled with PS 7.4+ on Linux and does not depend on the NuGet package provider.
2026-06-03 09:29:45 -04:00
gsadmin 609035af1f Merge pull request 'Rebrand to Grace Solutions; add README, about_ help, Gitea CI/CD, track Module bin' (#1) from dev into main
Reviewed-on: #1
2026-06-03 01:53:11 +00:00
GraceSolutions dce97e98de Default -ViewSecretValue to true; reject <hidden-by-infisical> placeholder
Publish to PowerShell Gallery / build (pull_request) Failing after 6s
Publish to PowerShell Gallery / release (pull_request) Has been skipped
Publish to PowerShell Gallery / publish (pull_request) Has been skipped
Get-InfisicalSecrets and Get-InfisicalSecret now return real secret values by default. Pass -ViewSecretValue:False to opt in to the server's hidden response. InfisicalSecretMapper detects the <hidden-by-infisical> placeholder and the secretValueHidden flag; in either case SecretValue is set to null instead of pushing the literal placeholder into a SecureString, so downstream auth/export/dictionary consumers can never silently use the placeholder as if it were a real secret.
2026-06-02 21:34:16 -04:00
GraceSolutions 7be0b7b420 Add plain-text accessors for secrets
InfisicalSecret.GetPlainTextValue() returns the SecureString contents as a managed string for ergonomic PowerShell access. ConvertTo-InfisicalSecretDictionary -AsPlainText emits Dictionary<string,string> instead of Dictionary<string,SecureString>; default behavior unchanged. Export-InfisicalSecrets already writes plain text via secret.UsePlainTextValue(), so no switch was added there.
2026-06-02 21:14:43 -04:00
GraceSolutions 09c577ebd0 Add lazy API version negotiation (v4 -> v3 fallback) with -ApiVersion override
- Endpoint registry now stores ordered candidate lists per logical operation; Get/TryGet preserve prior behavior, new GetCandidates(name) exposes the ladder. Added v3 fallbacks (/api/v3/secrets/raw and /api/v3/secrets/raw/{secretName}) after v4. - InfisicalConnection gains PinnedApiVersion and a ResolvedEndpointVersions cache so the chosen version sticks for the session. - InfisicalSecretsClient.SendWithVersionFallback walks candidates in pin -> cached -> registry order, falls back on routing-style failures (404 without an Infisical JSON envelope, 405, or 400 mentioning workspaceId/projectSlug) when no version is pinned, and surfaces real application errors immediately. - Get-InfisicalSecret(s) expose -ApiVersion; Connect-Infisical sets PinnedApiVersion only when -ApiVersion is explicitly bound on the command line (env-var/default values do not pin). - Logger.Error routes via WriteWarning to avoid premature terminating errors that masked InfisicalApiException details; EnsureSuccess no longer redacts non-2xx bodies so server error envelopes are visible. - InfisicalSecretsClient sends both projectId and workspaceId so it works against both new and legacy server-side validators.
2026-06-02 21:01:37 -04:00
GraceSolutions 7e5209190a Fix Infisical v4 query params, convert flags to switches, fix changelog regex
- InfisicalSecretsClient: use projectId / includeImports (camelCase) per Infisical v4 OpenAPI
- Get-InfisicalSecrets / Get-InfisicalSecret: change [bool] flag parameters to [switch]
- DesignSpec.md: updated 14.3 / 14.4 examples to match new switch syntax
- build.ps1: anchor Update-Changelog regex to the literal '## Unreleased' line and limit replacement to 1 to stop exponential duplication of carried-forward markers
- Manifest bumped to 2026.06.03.0032 (commit c866760105)
2026-06-02 20:33:12 -04:00
GraceSolutions c866760105 Ignore local scripts/ directory (not part of the module) 2026-06-02 15:49:51 -04:00
GraceSolutions eaffeedf12 Add Gitea runner installer, proxy/SSO support, and release workflow
Scripts:
- Add scripts/Install-GiteaRunner.ps1: cross-platform installer for the
  Gitea act_runner daemon (systemd / launchd / Windows Service).
  - PowerShell 7+ runtime guard (works under irm | iex).
  - Explicit env var resolution (Process -> User -> Machine) for
    InstanceUrl and RegistrationToken with named candidates.
  - UTF-8 (no BOM) for every file write via [System.IO.File] APIs.
  - System proxy + DefaultNetworkCredentials on all web calls.
  - Optional -Labels; ServiceName/ServiceDisplayName split prevents
    systemd 'Invalid unit name' errors caused by whitespace.
  - config.yaml is always generated before the registration skip-check
    so upgrades produce a config the daemon can load.

Module:
- InfisicalHttpClient: enable UseDefaultCredentials and attach the
  system proxy with DefaultNetworkCredentials so requests work behind
  authenticated corporate proxies / SSO.
- ExportInfisicalSecretsCmdlet: make the UTF-8 (no BOM) case explicit
  in the encoding resolver.

CI/CD (.gitea/workflows/publish-psgallery.yml):
- Split into build -> release -> publish with hard `needs:` ordering
  so publish never runs unless build and release both succeed.
- Build job uploads Module/PSInfisicalAPI as an artifact.
- Release job downloads the artifact, reads the version from the
  manifest, zips the module, and creates a Gitea release tagged with
  the bare version. Release notes include version, full + short commit
  SHA, build timestamp, merged PR info, workflow run link, and any
  matching CHANGELOG.md section. Skips cleanly when the tag already
  exists.
- Publish job re-validates the downloaded manifest and runs
  Publish-Module against PSGallery using PSGALLERY_API_KEY.
2026-06-02 15:48:54 -04:00
GraceSolutions fa65c18bc1 Strengthen import validation (manifest + help) and harden Gitea workflow 2026-06-02 13:25:18 -04:00
GraceSolutions 5801b4774a Rebrand to Grace Solutions; add README, about_ help, Gitea CI/CD, track Module bin 2026-06-02 12:49:39 -04:00
GraceSolutions 430e3a00c9 Implement PSInfisicalAPI module per design spec with env-var auto-discovery 2026-06-02 12:46:34 -04:00
gsadmin 3c47d6ff30 Initial commit 2026-06-02 15:51:28 +00:00