-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clean up github actions and move to extended language guide
- Loading branch information
Showing
10 changed files
with
180 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
## Build .env.vault | ||
|
||
Push your latest `.env` file changes and edit your CI secrets. [Learn more about syncing](/docs/tutorials/sync) | ||
|
||
##### CLI | ||
```shell | ||
npx dotenv-vault@latest push | ||
npx dotenv-vault@latest open ci | ||
``` | ||
|
||
Use the UI to configure those secrets per environment. | ||
|
||
##### UI | ||
{% include helpers/screenshot_browser.html url="/assets/img/docs/edit-ci-value.gif" www="dotenv.org" %} | ||
|
||
Then build your encrypted `.env.vault` file. | ||
|
||
##### CLI | ||
```shell | ||
npx dotenv-vault@latest build | ||
``` | ||
|
||
Its contents should look something like this. | ||
|
||
##### .env.vault | ||
```shell | ||
#/-------------------.env.vault---------------------/ | ||
#/ cloud-agnostic vaulting standard / | ||
#/ [how it works](https://dotenv.org/env-vault) / | ||
#/--------------------------------------------------/ | ||
|
||
# development | ||
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs=" | ||
DOTENV_VAULT_DEVELOPMENT_VERSION=2 | ||
|
||
# ci | ||
DOTENV_VAULT_CI="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg==" | ||
DOTENV_VAULT_CI_VERSION=2 | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
## Install dotenv | ||
|
||
Install [`dotenv`](https://github.com/motdotla/dotenv). | ||
|
||
##### CLI | ||
```shell | ||
npm install dotenv --save # Requires dotenv >= 16.1.0 | ||
``` | ||
|
||
Create a `.env` file in the root of your project. | ||
|
||
##### .env | ||
```shell | ||
# .env | ||
HELLO="World" | ||
``` | ||
|
||
As early as possible in your application, import and configure dotenv. | ||
|
||
##### build.js | ||
```js | ||
// build.js | ||
require('dotenv').config() | ||
console.log(process.env) // remove this after you've confirmed it is working | ||
|
||
console.log(`Hello ${process.env.HELLO}`) | ||
``` | ||
|
||
Try running it locally. | ||
|
||
##### CLI | ||
```shell | ||
node build.js | ||
{ | ||
... | ||
HELLO: 'World' | ||
} | ||
Hello World | ||
``` | ||
|
||
Perfect. `process.env` now has the keys and values you defined in your `.env` file. | ||
|
||
That covers local simulation of the CI. Let's solve for the real CI environment next. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<div class="alert alert-success" role="alert"> | ||
<h4 class="alert-heading">Well done!</h4> | ||
<p>You succesfully used the new <strong>.env.vault</strong> standard to encrypt and build your secrets. This is much safer than storing your secrets on CI platforms that might <a href="https://techcrunch.com/2023/01/05/circleci-breach/">leak your secrets</a>.</p> | ||
<hr> | ||
<p class="mb-0">Whenever you need to add or change a secret, just rebuild your .env.vault file and redeploy.</p> | ||
</div> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
--- | ||
layout: docs | ||
title: "CI/CD in Node.js with GitHub Actions" | ||
description: Use Node.js to run GitHub Actions with an encrypted .env.vault file | ||
redirect_from: | ||
- /docs/integrations/github/actions-nodejs | ||
- /docs/integrations/github-actions/nodejs | ||
--- | ||
|
||
{% include docs/headsup.html %} | ||
{% include docs/example_link.html url="https://github.com/dotenv-org/examples/tree/master/nodejs/github-actions" %} | ||
|
||
## Initial setup | ||
|
||
Create a `build.js` file. It's a very simple build script that outputs 'Hello World'. | ||
|
||
##### build.js | ||
```js | ||
// build.js | ||
console.log(`Hello ${process.env.HELLO}`) | ||
``` | ||
|
||
Create a `package.json` file. | ||
|
||
##### package.json | ||
```json | ||
{ | ||
"scripts": { | ||
"build": "node build.js" | ||
} | ||
} | ||
``` | ||
|
||
Create a `.github/workflows/ci.yml` file. | ||
|
||
##### .github/workflows/ci.yml | ||
```yml | ||
{% raw %}# .github/workflows/ci.yml | ||
name: npm run build | ||
on: [push] | ||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-node@v3 | ||
with: | ||
node-version: 16 | ||
- run: npm install | ||
- run: npm run build | ||
env: | ||
DOTENV_KEY: ${{ secrets.DOTENV_KEY }}{% endraw %} | ||
``` | ||
Commit that to code and deploy to GitHub. | ||
Once deployed, the GitHub actions build will say `'Hello undefined'` as it doesn't have a way to access the environment variable yet. Let's do that next. | ||
##### GitHub Actions | ||
{% include helpers/screenshot_browser.html url="/assets/img/docs/github-actions-hello-undefined.png" www="github.com/you/app/actions" %} | ||
{% include docs/step_install_dotenv_for_ci.md %} | ||
{% include docs/step_build_env_vault_for_ci.md %} | ||
## Set DOTENV_KEY | ||
Fetch your CI `DOTENV_KEY`. | ||
|
||
##### CLI | ||
```shell | ||
npx dotenv-vault@latest keys ci | ||
# outputs: dotenv://:key_4567@dotenv.org/vault/.env.vault?environment=ci | ||
``` | ||
|
||
Set `DOTENV_KEY` on GitHub Actions. | ||
|
||
##### UI | ||
{% include helpers/screenshot_browser.html url="/assets/img/docs/github-actions-config-vars.png" %} | ||
|
||
## Build CI | ||
|
||
Commit those changes safely to code and rerun the build. | ||
|
||
That's it! On deploy, your `.env.vault` file will be decrypted and its CI secrets injected as environment variables – just in time. | ||
|
||
You'll know things worked correctly when you see `'Loading env from encrypted .env.vault'` in your logs. If a `DOTENV_KEY` is not set (for example when developing on your local machine) it will fall back to standard [dotenv](https://github.com/motdotla/dotenv) functionality. | ||
|
||
{% include helpers/screenshot_browser.html url="/assets/img/docs/github-actions-logs-vault.png" www="github actions build" %} | ||
|
||
{% include docs/welldone_ci.html %} |