Skip to content
Deploy to Now from GitHub Actions with useful aliases
Branch: master
Clone or download
Latest commit bc4097b Mar 15, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github ci: run "npm ci" instead of "npm install" Feb 11, 2019
script version: run script/version to bump Dockerfile Feb 6, 2019
src chore: lint Mar 15, 2019
.eslintrc.js lint: use ecmaVersion: 2018 for async/await Mar 15, 2019
.gitignore Initial commit Jan 30, 2019
Dockerfile chore: v3.0.0 Mar 15, 2019
LICENSE Initial commit Jan 30, 2019 docs: make --meta args example more interesting Feb 5, 2019
entrypoint.js use a constant for default retries (3) Mar 15, 2019
index.html move deploy resources here Jan 30, 2019
index.js feat: add index.js so it can be require()d Feb 1, 2019
now.json move deploy resources here Jan 30, 2019
package-lock.json chore: v3.0.0 Mar 15, 2019
prettier.config.js chore: move deploy to a new repo Jan 30, 2019


This GitHub Action deploys to Now and aliases the successful deployment to a predictable URL according to the following conditions:

  1. We run now without any arguments to get the "root" deployment URL, which is generated by Now.
  2. If the branch is master, we treat the alias field in now.json as the production URL and:
    1. If there is a rules.json:
      • now alias <deployment> <name> to create a fallback URL for path aliases
      • now alias <deployment> <production> -r rules.json to set up path aliases
    2. now alias <deployment> <production> to alias the production URL.
  3. now alias <deployment> <name>-<branch> to alias the root deployment to a branch-specific URL.

The app name (<name>) and branch (<branch>) are both "slugified" to strip invalid characters so that they'll work as URLs. Leading non-word characters are removed, and any sequence of characters that isn't alphanumeric or - is replaced with a single -. In other words, @primer/css becomes primer-css, shawnbot/some_branch becomes shawnbot-some-branch, and so on.

Status checks

Two status checks will be listed for this action in your checks: deploy is the action's check, and deploy/alias is a commit status created by the action that reports the URL and links to it via "Details":


Note: Checks listed in the PR merge box (above) always point to the most recent commit, but you can access the list of checks for the last commit of every push by clicking on the status icon (usually a green check or red x) in your repo's "Commits" and "Branches" pages, or commit history on a PR page:



To use this action in your own workflow, add the following snippet to your .github/main.workflow file:

action "deploy" {
  uses = "primer/deploy@master"
  secrets = [

You will need to provide a Zeit token value for the NOW_TOKEN secret in the Actions visual editor if you haven't already.

To avoid racking up failed deployments, we suggest that you place this action after any linting and test actions.

Now CLI arguments

It's possible to pass additional arguments through to the now CLI via the args field in your workflow action. Because the primer-deploy CLI accepts options of its own (such as --dry-run), you need to prefix any now arguments with --:

action "deploy" {
  uses = "primer/deploy@master"
+  args = "-- --meta autoDeployed=true"

You can also use args to deploy a subdirectory, e.g. docs:

action "deploy" {
  uses = "primer/deploy@master"
+  args = "-- docs"
You can’t perform that action at this time.