{"id":31816634,"url":"https://github.com/splunk/vault-plugin-secrets-artifactory","last_synced_at":"2025-10-11T09:57:23.142Z","repository":{"id":37079402,"uuid":"377615779","full_name":"splunk/vault-plugin-secrets-artifactory","owner":"splunk","description":"vault plugin for artifactory","archived":false,"fork":false,"pushed_at":"2024-06-28T08:12:29.000Z","size":306,"stargazers_count":9,"open_issues_count":9,"forks_count":5,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-07-09T16:33:26.740Z","etag":null,"topics":["artifactory","hacktoberfest","vault"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/splunk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-16T20:11:59.000Z","updated_at":"2024-07-09T16:33:26.740Z","dependencies_parsed_at":"2024-04-19T14:31:52.151Z","dependency_job_id":"3d4d02bc-6b79-4b82-a4f0-75b5ac7d41c1","html_url":"https://github.com/splunk/vault-plugin-secrets-artifactory","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/splunk/vault-plugin-secrets-artifactory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splunk%2Fvault-plugin-secrets-artifactory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splunk%2Fvault-plugin-secrets-artifactory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splunk%2Fvault-plugin-secrets-artifactory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splunk%2Fvault-plugin-secrets-artifactory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/splunk","download_url":"https://codeload.github.com/splunk/vault-plugin-secrets-artifactory/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/splunk%2Fvault-plugin-secrets-artifactory/sbom","scorecard":{"id":841890,"data":{"date":"2025-08-11","repo":{"name":"github.com/splunk/vault-plugin-secrets-artifactory","commit":"88d4da07ff60141f6e9a4b97f505178cb6b5e412"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":5,"reason":"Found 2/4 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/splunk/vault-plugin-secrets-artifactory/test.yml/main?enable=pin","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.6.0 not signed: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/143685997","Warn: release artifact v0.5.0 not signed: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/141738533","Warn: release artifact v0.4.2 not signed: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/92842618","Warn: release artifact v0.4.1 not signed: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/62465939","Warn: release artifact v0.4.0 not signed: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/59076068","Warn: release artifact v0.6.0 does not have provenance: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/143685997","Warn: release artifact v0.5.0 does not have provenance: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/141738533","Warn: release artifact v0.4.2 does not have provenance: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/92842618","Warn: release artifact v0.4.1 does not have provenance: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/62465939","Warn: release artifact v0.4.0 does not have provenance: https://api.github.com/repos/splunk/vault-plugin-secrets-artifactory/releases/59076068"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3754 / GHSA-2x5j-vhc8-9cwm","Warn: Project is vulnerable to: GO-2024-3005 / GHSA-v23v-6jw2-98fq","Warn: Project is vulnerable to: GO-2025-3829 / GHSA-4vq8-7jfc-9cvp","Warn: Project is vulnerable to: GO-2025-3367 / GHSA-r9px-m959-cxf4","Warn: Project is vulnerable to: GO-2025-3368 / GHSA-v725-9546-7q7m","Warn: Project is vulnerable to: GO-2025-3485 / GHSA-c6gw-w398-hv78","Warn: Project is vulnerable to: GO-2024-3250 / GHSA-29wx-vh33-7x7r","Warn: Project is vulnerable to: GO-2025-3553 / GHSA-mh63-6h87-95cp","Warn: Project is vulnerable to: GO-2024-2947 / GHSA-v6v8-xj6m-xwqh","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T20:39:45.191Z","repository_id":37079402,"created_at":"2025-08-23T20:39:45.191Z","updated_at":"2025-08-23T20:39:45.191Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006746,"owners_count":26084185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artifactory","hacktoberfest","vault"],"created_at":"2025-10-11T09:57:20.827Z","updated_at":"2025-10-11T09:57:23.137Z","avatar_url":"https://github.com/splunk.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vault-plugin-secrets-artifactory\n\n[![build-status-badge]][actions-page]\n[![go-report-card-badge]][go-report-card]\n[![codecov-badge]][codecov]\n![go-version-badge]\n\nThis is a backend plugin to be used with Vault. This plugin generates one-time access tokens.\n\n[Design doc][design-doc]\n\n- [Differences between JFrog's Vault Plugin](#differences-between-jfrogs-vault-plugin)\n- [Requirements](#requirements)\n- [Getting Started](#getting-started)\n  - [Usage](#usage)\n- [Documents](#documents)\n  - [Update Permission Targets](#update-permission-targets)\n  - [Garbage Collection](#garbage-collection)\n- [Development](#development)\n  - [Full dev environment](#full-dev-environment)\n  - [Developing with an existing Artifactory instance](#developing-with-an-existing-artifactory-instance)\n  - [Reloading plugin](#reloading-plugin)\n  - [Tests](#tests)\n- [License](#license)\n\n## Differences between JFrog's Vault Plugin\n\nJFrog has their [own vault plugin](https://github.com/jfrog/vault-plugin-secrets-artifactory/).  The\nmain difference between that plugin and this one is the dynamic group/permission target generation.\n\nThis plugin generates permission targets and a group to link the token with the desired permissions,\nin addition to being able to specify a pre-existing group.\n\n## Requirements\n\n- Go: 1.22 or above\n- **Artifactory: 7.21.1** or above (for Access API support)\n- **Artifactory Pro or above is required** for the [API endpoints][artifactory-api-ref] used by\n  this plugin. A license key will be needed to spin up the full dev environment.\n- token with admin privileges to manage groups and permission targets and to create tokens\n\n## Getting Started\n\nThis is a [Vault plugin] meant to work with Vault. This guide assumes you have already installed\nVault and have a basic understanding of how Vault works.\n\nOtherwise, first read [how to get started with Vault][vault-getting-started].\n\nTo learn specifically about how plugins work, see documentation on [Vault\nplugins][vault plugin].\n\n### Usage\n\n```sh\n# Please mount a plugin, then you can enable a secret\n$ vault secrets enable -path=artifactory vault-artifactory-secrets-plugin\nSuccess! Enabled the vault-artifactory-secrets-plugin secrets engine at: artifactory/\n\n# configure the /config backend. You must supply admin bearer token or username/password pair of an admin user.\n# URL can have /artifactory/ but this will be stripped for the Access API (`/access/`).\n$ vault write artifactory/config base_url=\"https://artifactory.example.com/artifactory\" bearer_token=$BEARER_TOKEN ttl=600 max_ttl=600\n\n# see supported paths\n$ vault path-help artifactory/\n$ vault path-help artifactory/config\n\n# create a role with permissions targets\n$ vault write artifactory/roles/ci-role token_ttl=600 permission_targets=@scripts/sample_permission_targets.json\n\n# create a role with permission targets and additional pre-existing static groups\n$ vault write artifactory/roles/ci-role token_ttl=600 permission_targets=@scripts/sample_permission_targets.json groups=group1,group2,group3\n\n# create a role with pre-existing static groups only\n$ vault write artifactory/roles/ci-role token_ttl=600 groups=group1,group2,group3\n\n# generate an ephemeral artifactory token\n$ vault write artifactory/token/ci-role ttl=60\nKey             Value\n---             -----\naccess_token    REDACTED\nusername        auto-vault-plugin-user.ci-role\n```\n\n\n**Note:** If username/password is used, [Enable Token Generation via\nAPI](https://jfrog.com/help/r/jfrog-platform-administration-documentation/enable-token-generation-via-api)\nis required to be set in the Artifactory instance.\n\n## Documents\n\nwhen a role is created, it generates an artifactory group and supplied permission targets. To\nachieve unique group and permission target names per role, it applies a UUID to each\nrole as `role_id` and appends it to the group and permission target names:\n\n| Artifactory Object | format                                                           | example                                             |\n| ------------------ | ---------------------------------------------------------------- | --------------------------------------------------- |\n| Group              | `vault-plugin.\u003crole_id\u003e`                                         | `vault-plugin.9ace47f6-a205-11eb-8b68-acde48001122` |\n| Permission Target  | `vault-plugin.pt\u003cindex of permission target counts\u003e.\u003crole_name\u003e` | `npm-test.pt0.ci-role`                              |\n\nGroup name uses UUID as it's bounded to max 64 chars DB limit, whereas permission target name can be\nlonger than that.\n\nToken is generated with a transient user and returned as key value pair:\n\n| key          | value                            |\n| ------------ | -------------------------------- |\n| access_token | REDACTED_BEARER_TOKEN            |\n| username     | `auto-vault-plugin-user.ci-role` |\n\nusername follows the format of `auto-vault-plugin-user.\u003crole_name\u003e`  \n*note: if role name exceeds 39 characters, it shortens to fit into max char constraints*\n\n### Update Permission Targets\n\nList of permission targets can be supplied as a JSON string. Format of a permission target can be\nfound below. This is derived from artifactory V2 security permission target json that you can find\n[here][permission-target-format].\n\n```json\n[\n  {\n    \"repo\": {\n      \"include_patterns\": [\"/myprefix/**\", \"/myteam/anotherprefix/**\"] ,\n      \"exclude_patterns\": [\"\"],\n      \"repositories\": [\"docker-local\"],\n      \"operations\": [\"read\"]\n    }\n  },\n  {\n    \"build\": {\n      \"include_patterns\": [\"\"] ,\n      \"exclude_patterns\": [\"\"],\n      \"repositories\": [\"artifactory-build-info\"],\n      \"operations\": [\"read\"]\n    }\n  },\n]\n```\n\nYou have noticed that `actions` from V2 permission target are swapped with `operations`. This is\nbecause the `actions` field can contain users and other groups which are obsolete in this plugin.\n\nTo update permission targets for an existing role, please also supply existing permission\ntargets in order to preserve them in a role. Updating without supplying existing\npermission targets registered to a role **will delete those existing permission targets**.\n\n```sh\n# To grab existing permission targets\n$ vault read artifactory/roles/ci-role -format=json | jq '.data.permission_targets|fromjson' \u003e permission_targets.json\n```\n\n### Garbage Collection\n\nTo keep the isolation, artifactory groups and permission targets are not shared amongst different\nroles. To this nature, it collects garbage when update/delete operation is performed on a role:\n\n- removal of an artifactory group and permission targets when the corresponding role is removed\n- removal of an artifactory permission target  when it's removed from the corresponding role\n\n## Development\n\n### Full dev environment\n\nThis will spin up an Artifactory Pro instance and Vault server in dev mode with the plugin\nconfigured.\n\nRequirements:\n\n- docker\n\n```sh\nexport ARTIFACTORY_LICENSE_KEY=\"\u003clicenseKey\u003e\"\n\n# spin up dev environment and print out env vars necessary for Vault/Artifactory.\nmake dev\n\n# or do this to capture capture Artifactory/Vault env vars:\nmake tools\neval $(make dev)\n```\n\nTo access the dev env Artifactory UI, navigate to [http://localhost:8082](http://localhost:8082)\nand log in with the `ARTIFACTORY_USER` and `ARTIFACTORY_PASSWORD` output above.\n\n### Developing with an existing Artifactory instance\n\nRequirements:\n\n- vault\n\n```sh\n# Build binary in plugins directory\nmake build\n\n# Start a standalone vault dev server\nmake vault-only\n\n# New terminal\nexport VAULT_ADDR=http://localhost:8200\nexport ARTIFACTORY_URL=\"https://artifactory.example.com/artifactory/\"\nexport ARTIFACTORY_BEARER_TOKEN=TOKEN\n\n# enable secrets backend and configuration\n./scripts/setup_dev_vault.sh\n\n```\n\nYou can then create a role and issue a token following above usage.\n\n### Reloading plugin\n\nTo quickly test changes to the plugin (using the docker environment), run:\n\n```\nmake reload\n```\n\nThis will re-compile, re-register, and reload the plugin.\n\n### Tests\n\n```sh\n# run unit tests\nmake test\n\n# run subset of tests\nmake test TESTARGS='-run=TestConfig'\n\n# run Artifactory acceptance tests (uses in-memory vault backend with Artifactory Docker container)\nmake test-artacc\n\n# run Vault acceptance tests (uses Vault and Artifactory Docker containers against the compiled plugin)\nmake test-vaultacc\n\n# generate a code coverage report\nmake report\nopen coverage.html\n```\n\n## License\n\n[Apache Software License version 2.0](LICENSE)\n\n[actions-page]:https://github.com/splunk/vault-plugin-secrets-artifactory/actions\n[artifactory-api-ref]:https://www.jfrog.com/confluence/display/JFROG/Artifactory+REST+API\n[build-status-badge]:https://github.com/splunk/vault-plugin-secrets-artifactory/actions/workflows/test.yml/badge.svg\n[codecov]:https://codecov.io/gh/splunk/vault-plugin-secrets-artifactory\n[codecov-badge]:https://codecov.io/gh/splunk/vault-plugin-secrets-artifactory/branch/main/graph/badge.svg\n[design-doc]:https://docs.google.com/document/d/1lfWFeutKLKrS39qFHDMmTZba5-6j628irv8HNLpASfc/edit#\n[go-report-card]:https://goreportcard.com/report/github.com/splunk/vault-plugin-secrets-artifactory\n[go-report-card-badge]:https://goreportcard.com/badge/github.com/splunk/vault-plugin-secrets-artifactory\n[go-version-badge]:https://img.shields.io/github/go-mod/go-version/splunk/vault-plugin-secrets-artifactory\n[permission-target-format]:https://www.jfrog.com/confluence/display/JFROG/Security+Configuration+JSON#SecurityConfigurationJSON-application/vnd.org.jfrog.artifactory.security.PermissionTargetV2+json\n[vault-getting-started]:https://www.vaultproject.io/intro/getting-started/install.html\n[vault plugin]:https://www.vaultproject.io/docs/internals/plugins.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplunk%2Fvault-plugin-secrets-artifactory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsplunk%2Fvault-plugin-secrets-artifactory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplunk%2Fvault-plugin-secrets-artifactory/lists"}