Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
36af5bd
feat: Initial provider code
spbsoluble Nov 11, 2025
c44645e
chore: Reformat and cleanup
spbsoluble Nov 11, 2025
32bc8c5
chore(docs): Force docs gen
spbsoluble Nov 11, 2025
f781ed5
Update generated docs
Nov 11, 2025
0b61ecb
chore: Remove .net6 build target
spbsoluble Nov 11, 2025
29df34c
chore(docs): Force C# primary language
spbsoluble Nov 11, 2025
877267c
chore: Force build workflow
spbsoluble Nov 11, 2025
9bbd385
chore: Conditionally include debug symbols
spbsoluble Nov 11, 2025
9634481
Merge remote-tracking branch 'origin/ab#39213' into ab#39213
spbsoluble Nov 11, 2025
e5538e1
feat(tests): add unit and integration test suite with IAkeylessApiCli…
spbsoluble Mar 24, 2026
4fa9893
ci: add unit and integration test workflow
spbsoluble Mar 24, 2026
c3f5d72
fix(logging): remove secret value leak, fix misleading messages, norm…
spbsoluble Mar 24, 2026
dce444f
fix: initialise SecretName in AkeylessConfiguration constructor (CS8618)
spbsoluble Mar 24, 2026
e739e33
chore: add net10.0 target framework support
spbsoluble Mar 24, 2026
fddc55e
docs: expand v1.0.0 changelog entry
spbsoluble Mar 24, 2026
4121038
docs: add README for each test project; remove TestConsole
spbsoluble Mar 24, 2026
ac6365e
chore: trigger CI
spbsoluble Mar 24, 2026
8645b53
chore: add Keyfactor NuGet feed for CI restore
spbsoluble Mar 24, 2026
1986c6c
chore: remove unsupported github test logger from workflow
spbsoluble Mar 24, 2026
17de64c
fix: handle empty string env vars for secret paths in API client tests
spbsoluble Mar 24, 2026
a82dd04
fix: address Copilot PR review feedback
spbsoluble Mar 24, 2026
b3a8727
fix: use latestMajor rollforward so bootstrap runner works with .NET …
spbsoluble Mar 24, 2026
a4e980d
chore: test dotnet10-support branch of keyfactor/actions
spbsoluble Mar 24, 2026
b9ff676
chore: remove nuget.config; use dotnet nuget add source in tests work…
spbsoluble Mar 24, 2026
5de78aa
docs: add per-type descriptions with examples for each static secret …
spbsoluble Mar 25, 2026
89ebe95
fix: treat whitespace-only StaticSecretFieldName as empty
spbsoluble Mar 25, 2026
c10ddb2
fix: redact debug tests, document StaticSecretFieldName portal note
spbsoluble Mar 25, 2026
8215349
fix: correct TypeFullName and integration-manifest trailing comma
spbsoluble Mar 25, 2026
9456f25
chore: add Makefile and document make targets in test READMEs
spbsoluble Mar 25, 2026
26355d6
docs: add CLI service account setup; copy manifest.json to build output
spbsoluble Mar 25, 2026
7be9c37
fix(ci): Revert to `v4` starter workflow
spbsoluble Mar 25, 2026
92bc121
chore: Ignore claude
spbsoluble Mar 25, 2026
b7cebf0
fix(ci): use fix/chromedriver-version-lookup branch of keyfactor/actions
spbsoluble Mar 25, 2026
d2bb747
ci: trigger workflow to test chromedriver fix
spbsoluble Mar 26, 2026
84869d9
Update generated docs
Mar 26, 2026
426f9c8
chore(docs): Update docs
spbsoluble Mar 26, 2026
2b08064
Update generated docs
Mar 26, 2026
346e0ff
chore(ci): Revert to latest stable starter wofklow.
spbsoluble Mar 26, 2026
bd33c4b
chore(ci): Revert to latest stable starter wofklow.
spbsoluble Mar 26, 2026
e99fa5e
fix(security): prevent secrets from leaking to logs and test output
spbsoluble Mar 26, 2026
1658b96
chore: Update integration manifest to update catalog and link github.
spbsoluble Mar 26, 2026
07239a0
chore(ci): Update to v5 starter.
spbsoluble Mar 26, 2026
1f824b2
docs: auto-generate README and documentation [skip ci]
github-actions[bot] Mar 26, 2026
2c87ff6
chore(ci): revert to "old" doctool
spbsoluble Mar 27, 2026
887e5f4
Update generated docs
Mar 27, 2026
821f255
fix: rename AccessKeyId to AccessId on integration-manifest.json
irby Apr 15, 2026
8c41018
Update generated docs
Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* linguist-language=C#
62 changes: 62 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Tests

on:
push:
pull_request:
types: [opened, synchronize, reopened]

jobs:
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Authenticate to Keyfactor NuGet feed
run: dotnet nuget add source https://nuget.pkg.github.com/Keyfactor/index.json -n keyfactor -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text

- name: Restore
run: dotnet restore tests/AkeylessPam.Unit.Tests/AkeylessPam.Unit.Tests.csproj

- name: Run unit tests
run: dotnet test tests/AkeylessPam.Unit.Tests/ --no-restore --collect:"XPlat Code Coverage" --results-directory ./coverage

- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-unit
path: coverage/**/coverage.cobertura.xml

integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Authenticate to Keyfactor NuGet feed
run: dotnet nuget add source https://nuget.pkg.github.com/Keyfactor/index.json -n keyfactor -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text

- name: Restore
run: dotnet restore tests/AkeylessPam.Integration.Tests/AkeylessPam.Integration.Tests.csproj

- name: Run integration tests
env:
AKEYLESS_ACCESS_ID: ${{ secrets.AKEYLESS_ACCESS_ID }}
AKEYLESS_ACCESS_KEY: ${{ secrets.AKEYLESS_ACCESS_KEY }}
AKEYLESS_API_URL: ${{ vars.AKEYLESS_API_URL }}
AKEYLESS_SECRET_STATIC_TEXT: ${{ vars.AKEYLESS_SECRET_STATIC_TEXT }}
AKEYLESS_SECRET_STATIC_TEXT_2: ${{ vars.AKEYLESS_SECRET_STATIC_TEXT_2 }}
AKEYLESS_SECRET_STATIC_KV: ${{ vars.AKEYLESS_SECRET_STATIC_KV }}
AKEYLESS_SECRET_STATIC_JSON: ${{ vars.AKEYLESS_SECRET_STATIC_JSON }}
AKEYLESS_SECRET_STATIC_JSON_RAW: ${{ vars.AKEYLESS_SECRET_STATIC_JSON_RAW }}
run: dotnet test tests/AkeylessPam.Integration.Tests/ --no-restore
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -351,4 +351,9 @@ MigrationBackup/

*.env

.idea/*
.idea/*

manifest.json

.claude/*
CLAUDE.md
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
# v1.0.0

- Initial release of Akeyless PAM Provider
Initial release of the Akeyless PAM Provider for Keyfactor Command and Universal Orchestrator.

### Features

- Retrieve secrets from Akeyless and surface them as credentials to Keyfactor Command certificate stores and orchestrator jobs
- **Access Key (API Key) authentication** — authenticates to the Akeyless API using an Access ID and Access Key pair
- **Static Text secrets** (`static_text`) — returns the secret value as a plain string
- **Static JSON secrets** (`static_json`) — returns the full JSON blob, or extracts a single field by name via `StaticSecretFieldName`
- **Static Key-Value secrets** (`static_kv`) — extracts a single field from a key-value secret by name via `StaticSecretFieldName`
- Configurable Akeyless API URL (defaults to `https://api.akeyless.io`); can be overridden at runtime via the `AKEYLESS_API_URL` environment variable
- Targets .NET 8.0 and .NET 10.0
51 changes: 51 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
SLN := akeyless-pam.sln
LIB := akeyless-pam/akeyless-pam.csproj
UNIT := tests/AkeylessPam.Unit.Tests/AkeylessPam.Unit.Tests.csproj
INT := tests/AkeylessPam.Integration.Tests/AkeylessPam.Integration.Tests.csproj
CONSOLE := TestConsole/TestConsole.csproj
MANIFEST := akeyless-pam/manifest.json
LIB_BIN := akeyless-pam/bin

.PHONY: all build build-release clean test test-unit test-integration console restore

all: build

## Build (debug)
build:
dotnet build $(LIB)
@for d in $(LIB_BIN)/Debug/net*/; do cp $(MANIFEST) $$d; done

## Build (release)
build-release:
dotnet build $(LIB) -c Release
@for d in $(LIB_BIN)/Release/net*/; do cp $(MANIFEST) $$d; done

## Restore NuGet packages
restore:
dotnet restore $(SLN)

## Clean all projects
clean:
dotnet clean $(SLN)

## Run all tests
test:
dotnet test $(SLN)

## Run unit tests only
test-unit:
dotnet test $(UNIT)

## Run integration tests only
test-integration:
dotnet test $(INT)

## Run the test console
console:
dotnet run --project $(CONSOLE)

## Show available targets
help:
@grep -E '^## ' Makefile | sed 's/## / /'
@echo ""
@echo "Targets: all build build-release restore clean test test-unit test-integration console"
Loading
Loading