This is an example project that shows how you can create a branch for every Fly.io preview deployment.
You can copy the files located at .github/workflows/ and add them to your own project.
You will then need to set the following secrets in your repository:
FLY_API_TOKEN: Your Fly.io API token, you can find it in your Fly.io account settings.NEON_API_KEY: Your Neon API key, you can find it in your Neon account settings.DATABASE_URL: The connection string for your production database. You can find it in your Neon project's connection details.GH_TOKEN: A GitHub token with access to your repository, you can create one in your GitHub account settings. You will need to give it access to thereposcope so that thedeploy-previewworkflow can comment on the pull request. You can uncomment the step which uses this token in the.github/workflows/deploy-preview.ymlworkflow file.
You will then need to set the following variables:
NEON_PROJECT_ID: The ID of your Neon project, you can find it in your Neon project settings.
.github/workflows/deploy-preview.yml automates the deployment process to a preview environment.
Activated on a pull_request event
on: [pull_request]Requires the NEON_API_KEY, NEON_PROJECT_ID, GH_TOKEN, and FLY_API_TOKEN secrets that are set in the repository.
The workflow has a single job called deploy-preview
jobs:
deploy-preview:In that job it consists of the following steps:
- Ensures concurrency control, allowing only one deployment at a time per pull request.
concurrency:
group: pr-${{ github.event.number }}- Check out the codebase using
actions/checkout@v4.
- uses: actions/checkout@v4- Sets up PNPM with
pnpm/action-setup@v2. (You can use another package manager depending on your setup.)
- uses: pnpm/action-setup@v2
with:
version: 8- Configures Node.js version with caching for PNPM via
actions/setup-node@v4.
- name: Use Node.js 18
uses: actions/setup-node@v4
with:
node-version: 18
cache: "pnpm"- Installs dependencies using
pnpm install.
- name: Install dependencies
run: pnpm install- Retrieves and normalizes the branch name using
tj-actions/branch-names@v8.
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v8- Creates a Neon database branch for the pull request with
neondatabase/create-branch-action@v5. By default, the branch name will bepreview/<git-branch-name>
- name: Create Neon Branch
id: create-branch
uses: neondatabase/create-branch-action@v4
with:
project_id: ${{ env.NEON_PROJECT_ID }}
# parent: dev # optional (defaults to your primary branch)
branch_name: preview/${{ steps.branch-name.outputs.current_branch }}
username: "neondb_owner" # change this to your Neon database username if you're not using the default
api_key: ${{ env.NEON_API_KEY }}- Executes database migrations by setting up the
.envfile and running migration scripts.
- run: |
echo "DATABASE_URL=${{ steps.create-branch.outputs.db_url_with_pooler }}" >> "$GITHUB_ENV"
- run: pnpm run db:migrate
- Deploys the application with
superfly/[email protected], while including the Neon database URL.
- name: Deploy
id: deploy
uses: superfly/[email protected]
with:
secrets: DATABASE_URL=${{ steps.create-branch.outputs.db_url }}?sslmode=require- Comments on the pull request with deployment and database branch details using
thollander/actions-comment-pull-request@v2. Here's an example comment
- name: Comment on Pull Request
uses: thollander/actions-comment-pull-request@v2
with:
# GITHUB_TOKEN: ${{ env.GH_TOKEN }} # Required for commenting on pull requests for private repos
message: |
Fly Preview URL :balloon: : ${{ steps.deploy.outputs.url }}
Neon branch :elephant: : https://console.neon.tech/app/projects/${{ secrets.NEON_PROJECT_ID }}/branches/${{ steps.create-branch.outputs.branch_id }}.github/workflows/deploy-production.yml automates the deployment process to a production environment. It is activated on a push event to the main branch and uses the FLY_API_TOKEN and DATABASE_URL secrets that are set in the repository.
The workflow has a single job called production-deploy and it consists of the following steps:
- Checks out the codebase using
actions/checkout@v4 - Sets up PNPM using
pnpm/action-setup@v2and specifies version 8. (You can use another package manager depending on your setup.) - Configures the environment to use Node.js version 18 using actions/setup-node@v4, with a cache configured for PNPM.
- Installs project dependencies using pnpm install.
- Runs database migrations with the command pnpm run db:migrate.
- Sets up Fly CLI (flyctl) using superfly/flyctl-actions/setup-flyctl@master.
- Finally, deploys the application using Fly CLI with the command
flyctl deploy --remote-only.
.github/workflows/delete-neon-branch.yml automates the cleanup of branches in Neon. It is activated on a pull_request event with the action closed. This will ensure that Neon branches are deleted when a pull request is closed/merged.
The workflow uses neondatabase/[email protected] action which uses the NEON_API_KEY and NEON_PROJECT_ID secrets that are set in the repository.