-
Notifications
You must be signed in to change notification settings - Fork 380
feat(e2e): add encrypted secrets loading for E2E tests #3414
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
Oxygen deployed a preview of your
Learn more about Hydrogen's GitHub integration. |
b865765 to
4e260be
Compare
04f9469 to
bce6ffc
Compare
4e260be to
d6bf802
Compare
d6bf802 to
4f0b3ea
Compare
fredericoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
fredericoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtb but needs a rebase
fredericoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all good!
Add infrastructure for securely loading test secrets from secrets.ejson
using EJSON encryption. This enables E2E tests to use real gift card codes
without hardcoding them in test files.
Example usage in an E2E test file:
```typescript
import {getRequiredSecret} from '../../fixtures/test-secrets';
const GIFT_CARD_CODE_1 = getRequiredSecret('gift_card_code_1');
const GIFT_CARD_CODE_2 = getRequiredSecret('gift_card_code_2');
```
How it works:
- Secrets stored encrypted in secrets.ejson under `e2e-testing` section
- Local dev: Uses ejson keydir at /opt/ejson/keys (standard convention)
- CI: Uses EJSON_PRIVATE_KEY env var passed via --key-from-stdin
- Single code path for both environments
Security considerations:
- Uses execFileSync (not execSync) to prevent shell injection
- Private key passed via stdin, never on command line or disk
- Secrets decrypted in-memory, never written to files
4f0b3ea to
8f952fb
Compare

WHY are these changes introduced?
E2E tests need access to real gift card codes, but hardcoding them in test files is a security risk. This PR adds infrastructure to load test secrets from the encrypted
secrets.ejsonfile at runtime.WHAT is this pull request doing?
Adds a
test-secrets.tsmodule that decrypts and loads secrets from thee2e-testingsection ofsecrets.ejson. Uses a single code path for both local development and CI:/opt/ejson/keys(standard convention)EJSON_PRIVATE_KEYenv var passed via--key-from-stdinExample usage in E2E tests:
Security considerations:
execFileSync(notexecSync) to prevent shell injectionHOW to test your changes?
/opt/ejson/keys/{public_key}contains private key)getRequiredSecret('gift_card_code_1')from a test filePost-merge steps
EJSON_PRIVATE_KEYto GitHub repository secrets (Settings → Secrets → Actions)Checklist