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
Configure Environment Protection
In your repository settings, add Deploy Freeze as a custom deployment protection rule:
- Go to Settings → Environments
- Select or create an environment (e.g., production)
- Under "Deployment protection rules", click "Add deployment protection rule"
- Select "Deploy Freeze" from the dropdown
- Click "Save protection rules"
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: productionAction 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: productionMaintenance 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:00ZRelease 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: productionNeed Help?
Check out the complete documentation or reach out to our team.