Deploy Freeze Documentation

Control deployments to specific environments with GitHub Actions or our web dashboard.

What is Deploy Freeze?

A GitHub App that enables easy deployment freezes using GitHub's custom deployment protection rules. Freeze production while allowing staging deployments, set custom freeze reasons, and control when deployments can happen.

Quick Start

1

Install the GitHub App

Install the Deploy Freeze app on your repositories:

Install Deploy Freeze
2

Configure Environment Protection

In your repository settings, add Deploy Freeze as a custom deployment protection rule:

  1. Go to Settings → Environments
  2. Select or create an environment (e.g., production)
  3. Under "Deployment protection rules", click "Add deployment protection rule"
  4. Select "Deploy Freeze" from the dropdown
  5. Click "Save protection rules"
3

Start Managing Freezes

Use the web dashboard at deployfreeze.com or GitHub Actions to freeze and unfreeze deployments.

Features

🧊

Simple Freezes

Freeze and unfreeze deployments with a single click in the dashboard or a GitHub Action. No complex configuration needed.

🎯

Per-Environment Control

Freeze production while allowing staging deployments. Fine-grained control over each environment.

Auto-Expiring Freezes

Set a duration and freezes automatically expire. Perfect for maintenance windows.

🔐

Secure Authentication

GitHub OAuth authentication ensures only authorized users can manage freezes.

📝

Custom Freeze Reasons

Document why a freeze is in effect. Displayed to developers when deployments are blocked.

GitHub Actions Integration

Automate freezes with our official GitHub Actions. Integrate into your CI/CD workflows.

GitHub Actions

Use our official GitHub Actions to automate deployment freezes in your workflows.

Freeze Action

Use the deployfreeze/freeze-action to freeze deployments:

name: Freeze Production
on:
  workflow_dispatch:
    inputs:
      reason:
        description: 'Reason for freeze'
        required: true

jobs:
  freeze:
    runs-on: ubuntu-latest
    steps:
      - uses: deployfreeze/freeze-action@v1
        with:
          environment: production
          reason: ${{ inputs.reason }}

Unfreeze Action

Use the deployfreeze/unfreeze-action to unfreeze deployments:

name: Unfreeze Production
on:
  workflow_dispatch:

jobs:
  unfreeze:
    runs-on: ubuntu-latest
    steps:
      - uses: deployfreeze/unfreeze-action@v1
        with:
          environment: production

Action Inputs

environment(required)

The environment to freeze/unfreeze (e.g., production, staging)

reason(optional)

Custom message explaining why the freeze is in place

expires-at(optional)

ISO 8601 timestamp when the freeze should automatically expire

Examples

Weekend Freeze Automation

Automatically freeze production every Friday at 5 PM and unfreeze every Monday at 9 AM:

name: Weekend Freeze
on:
  schedule:
    - cron: '0 17 * * 5'  # Friday 5 PM UTC
    - cron: '0 9 * * 1'   # Monday 9 AM UTC

jobs:
  manage-freeze:
    runs-on: ubuntu-latest
    steps:
      - name: Determine action
        id: action
        run: |
          if [ $(date +%u) -eq 5 ]; then
            echo "freeze=true" >> $GITHUB_OUTPUT
          else
            echo "freeze=false" >> $GITHUB_OUTPUT
          fi

      - name: Freeze production
        if: steps.action.outputs.freeze == 'true'
        uses: deployfreeze/freeze-action@v1
        with:
          environment: production
          reason: Weekend freeze - no deployments until Monday

      - name: Unfreeze production
        if: steps.action.outputs.freeze == 'false'
        uses: deployfreeze/unfreeze-action@v1
        with:
          environment: production

Maintenance Window

Freeze for a specific maintenance window with automatic expiration:

name: Maintenance Freeze
on:
  workflow_dispatch:

jobs:
  freeze:
    runs-on: ubuntu-latest
    steps:
      - uses: deployfreeze/freeze-action@v1
        with:
          environment: production
          reason: Database maintenance in progress
          expires-at: 2025-11-08T18:00:00Z

Release Freeze

Freeze before a major release and unfreeze after:

name: Release Workflow
on:
  workflow_dispatch:

jobs:
  pre-release-freeze:
    runs-on: ubuntu-latest
    steps:
      - uses: deployfreeze/freeze-action@v1
        with:
          environment: production
          reason: Release in progress - v2.0.0

  release:
    needs: pre-release-freeze
    runs-on: ubuntu-latest
    steps:
      - name: Deploy release
        run: echo "Deploying release..."

  post-release-unfreeze:
    needs: release
    runs-on: ubuntu-latest
    if: always()
    steps:
      - uses: deployfreeze/unfreeze-action@v1
        with:
          environment: production

Need Help?

Check out the complete documentation or reach out to our team.