{"_id":"@adobe/ab-app-secrets-uploader","_rev":"6-eed1812061d6b0a24553fc930f79a702","name":"@adobe/ab-app-secrets-uploader","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@adobe/ab-app-secrets-uploader","version":"0.1.0","keywords":["aio","adobe","App","Builder","secrets","cli"],"author":{"name":"Adobe Inc."},"license":"Apache-2.0","_id":"@adobe/ab-app-secrets-uploader@0.1.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"shazron","email":"shazron@gmail.com"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/aio-pkg-utils/tree/master/packages/ab-app-secrets-uploader#readme","bugs":{"url":"https://github.com/adobe/aio-pkg-utils/issues"},"bin":{"ab-app-secrets-uploader":"bin/cli.js"},"dist":{"shasum":"a318fb24dbc332887488b344eefacea81b1d6fd3","tarball":"https://registry.npmjs.org/@adobe/ab-app-secrets-uploader/-/ab-app-secrets-uploader-0.1.0.tgz","fileCount":22,"integrity":"sha512-Caja/rNe1lfWq9tLb43QhIZaT3Mv4quEzN60LlTC14N18O69MrwG+YYXa0ndUoBiKKKOxT+wy76E4RHgypKxyw==","signatures":[{"sig":"MEQCICMXzQSv53vKvzdq55PINsek+dYk6WAQ+f1FtPQ1iaVrAiAheNBcHDq+6V4rw1t7F6pTzu1UveDYpcT/hcAVDneKQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166952},"main":"src/index.js","type":"module","engines":{"node":">=24.0.0"},"gitHead":"d8c40dfe867fae82bcda4c3277b667251bd6be96","scripts":{"lint":"eslint src bin","test":"vitest run --coverage","start":"node bin/cli.js","lint:fix":"eslint src bin --fix"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/aio-pkg-utils.git","type":"git","directory":"packages/ab-app-secrets-uploader"},"_npmVersion":"11.11.0","description":"CLI tool for uploading App Builder app secrets","directories":{},"_nodeVersion":"24.14.1","dependencies":{"execa":"^9.0.0","commander":"^12.0.0","@inquirer/prompts":"^7.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^2.0.0","neostandard":"^0.12.0","@vitest/coverage-v8":"^2.0.0","eslint-plugin-jsdoc":"^48.0.0","@adobe/eslint-config-aio-lib-config":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ab-app-secrets-uploader_0.1.0_1777448360648_0.071520614175137","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-29T07:39:20.580Z","modified":"2026-10-01T01:31:44.333Z","0.1.0":"2026-04-29T07:39:20.787Z"},"bugs":{"url":"https://github.com/adobe/aio-pkg-utils/issues"},"author":{"name":"Adobe Inc."},"license":"Apache-2.0","homepage":"https://github.com/adobe/aio-pkg-utils/tree/master/packages/ab-app-secrets-uploader#readme","keywords":["aio","adobe","App","Builder","secrets","cli"],"repository":{"url":"git+https://github.com/adobe/aio-pkg-utils.git","type":"git","directory":"packages/ab-app-secrets-uploader"},"description":"CLI tool for uploading App Builder app secrets","maintainers":[{"email":"mabecker@adobe.com","name":"marbec"},{"email":"tripod@bocanegra.ch","name":"tripod"},{"email":"garthdb@gmail.com","name":"garthdb"},{"email":"lazdnet@gmail.com","name":"lazd"},{"email":"grp-opensourceoffice@adobe.com","name":"adobe-admin"},{"email":"patrickfulton@gmail.com","name":"patrickfulton"},{"email":"lars@trieloff.net","name":"trieloff"},{"email":"krisnye@gmail.com","name":"krisnye"},{"email":"dcpfsdk@adobe.com","name":"dcpfsdk"},{"email":"natebaldwindesign@gmail.com","name":"natebaldwin"},{"email":"devongovett@gmail.com","name":"devongovett"},{"email":"danniintheus@gmail.com","name":"aspro83"},{"email":"symanovi@adobe.com","name":"symanovi"},{"email":"dominique.pfister@gmail.com","name":"dpfister"},{"email":"sg@adobe.com","name":"stefan-guggisberg"},{"email":"npm@rofe.com","name":"rofe"},{"email":"kptdobe@gmail.com","name":"kptdobe"},{"email":"halls@adobe.com","name":"adobehalls"},{"email":"bradjohn@adobe.com","name":"fullcolorcoder"},{"email":"djaeggi@adobe.com","name":"djaeggi"},{"email":"dylandepass@gmail.com","name":"dylandepass"},{"email":"mhaack@adobe.com","name":"mhaack"},{"email":"amol@adobe.com","name":"amol-anand"},{"email":"stopp@adobe.com","name":"stopp-adobe"},{"email":"namarora@adobe.com","name":"namarora"},{"email":"doten@adobe.com","name":"doten"},{"email":"schmidt@adobe.com","name":"duh_schmidt"},{"email":"astha.bhargava23@gmail.com","name":"asthabh23"},{"email":"aljoseph@adobe.com","name":"aljoseph"},{"email":"zouhir.dahbi@outlook.com","name":"zdahbi"},{"email":"tuicu@adobe.com","name":"tuicu"},{"email":"fmeschbe@adobe.com","name":"fmeschbe"}],"readme":"# @adobe/ab-app-secrets-uploader\n\nCLI tool that reads an Adobe App Builder project's OAuth credentials and runtime config from `aio config`, formats them as GitHub-ready environment variables, and optionally creates the matching GitHub environment.\n\nInspired by and improves on the approach described in [CI/CD using GitHub Actions](https://developer.adobe.com/app-builder/docs/guides/app_builder_guides/deployment/cicd-using-github-actions).\n\n## Prerequisites\n\n- Node.js >= 24\n- [Adobe I/O CLI](https://github.com/adobe/aio-cli): `npm install -g @adobe/aio-cli`\n- [GitHub CLI](https://cli.github.com): `brew install gh`\n- An App Builder workspace with the **I/O Management API** service added\n- `aio app use` already run so `aio config` contains valid credentials\n\n## Installation\n\n```sh\nnpm install -g @adobe/ab-app-secrets-uploader\n```\n\n## Commands\n\n### `create-env <output-file>`\n\nFetches secrets from `aio config` and writes them to a file, then prints the `gh` commands needed to upload them. No secrets are uploaded automatically — you run the printed commands yourself.\n\n```\nab-app-secrets-uploader create-env <output-file> [options]\n```\n\n| Flag | Description |\n|------|-------------|\n| `--no-suffix` | Omit the `_PROD` / `_STAGE` suffix (use when targeting a GitHub environment) |\n\n**Examples**\n\n```sh\n# Suffix mode — repo-level secrets\nab-app-secrets-uploader create-env secrets.env\ngh secret set -f secrets.env\n\n# GitHub Environments mode\nab-app-secrets-uploader create-env secrets.env --no-suffix\ngh api -X PUT repos/{owner}/{repo}/environments/stage\ngh secret set -f secrets.env --env stage\n```\n\nIf `<output-file>` already exists, you will be prompted to confirm before overwriting.\n\n### `upload`\n\nFetches secrets from `aio config` and uploads them directly as GitHub secrets after interactive confirmation. No file is written.\n\n```\nab-app-secrets-uploader upload [options]\n```\n\n| Flag | Description |\n|------|-------------|\n| `--no-suffix` | Omit the `_PROD` / `_STAGE` suffix (use when targeting a GitHub environment) |\n\n**Examples**\n\n```sh\n# Suffix mode — repo-level secrets\nab-app-secrets-uploader upload\n# → prompts: Upload secrets to this GitHub repo? (y/N)\n\n# GitHub Environments mode\nab-app-secrets-uploader upload --no-suffix\n# → prompts: Create 'stage' environment in this GitHub repo? (y/N)\n# → prompts: Upload secrets to the 'stage' environment in this GitHub repo? (y/N)\n```\n\n## The `--no-suffix` flag\n\nBy default, variable names include a suffix so both workspaces can coexist in the same repository as repo-level secrets (`CLIENTID_STAGE`, `CLIENTID_PROD`, …). Use `--no-suffix` when you want secrets scoped to a GitHub **environment** instead — names are bare (`CLIENTID`, `CLIENTSECRET`, …) and the environment name is derived automatically:\n\n| Workspace name | GitHub environment |\n|----------------|--------------------|\n| `Production`   | `production`       |\n| anything else  | `stage`            |\n\n## Generated variables\n\nThe following variables are written (shown without suffix):\n\n| Variable | Source |\n|----------|--------|\n| `CLIENTID` | OAuth client ID |\n| `CLIENTSECRET` | OAuth client secret (first) |\n| `TECHNICALACCID` | Technical account ID |\n| `TECHNICALACCEMAIL` | Technical account email |\n| `IMSORGID` | IMS org ID |\n| `SCOPES` | OAuth scopes (comma-separated) |\n| `AIO_RUNTIME_NAMESPACE` | Runtime namespace |\n| `AIO_RUNTIME_AUTH` | Runtime auth token |\n| `AIO_PROJECT_ID` | Project ID |\n| `AIO_PROJECT_NAME` | Project name |\n| `AIO_PROJECT_ORG_ID` | Org ID |\n| `AIO_PROJECT_WORKSPACE_ID` | Workspace ID |\n| `AIO_PROJECT_WORKSPACE_NAME` | Workspace name |\n| `AIO_PROJECT_WORKSPACE_DETAILS_SERVICES` | Services JSON |\n\n## Development\n\n```sh\nnpm test          # run vitest with coverage\nnpm run lint      # eslint\nnpm run lint:fix  # eslint --fix\n```\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}