Email Sync Script for Migrated Users
This document describes the update-forge-fas-emails.py script used to fix placeholder email addresses created during pagure.io to Forge migrations.
Overview
When users are migrated from pagure.io to Forge, the migrator creates placeholder @fedoraproject.org email addresses (like username@fedoraproject.org) because it doesn’t have access to users' real email addresses. This script replaces those placeholder addresses with users' actual email addresses from Fedora Accounts.
This script is not a general email synchronization tool. It only processes users who already have @fedoraproject.org email addresses that are migrator placeholders. Users with real email addresses from other domains are left untouched.
 | 
Script Location: The script is located in the forge/forge repository at scripts/update-forge-fas-emails.py
How It Works
The script handles three scenarios for users with @fedoraproject.org email addresses:
- 
User exists in Fedora Accounts with email(s) - Replaces placeholder with first Fedora Accounts email
 - 
User exists in Fedora Accounts but has no emails - Logs as ERROR (this should never happen)
 - 
User not found in Fedora Accounts - Sets to
username+fasnotfound@fedoraproject.org 
Prerequisites
Required Packages
Install the required Python packages on your system:
dnf install python3-click python3-requests python3-fasjson-client
API Token
You need an admin-level API token from your Forge instance:
- 
Log into your Forge instance (staging or production)
 - 
Go to Settings → Applications → Generate New Token
 - 
Give it a descriptive name like "Email Sync Script"
 - 
Select the "admin" scope (required for user management)
 - 
Copy the generated token
 
Usage
Basic Commands
- Preview changes against staging (safe, no modifications)
 
./update-forge-fas-emails.py --dry-run --token YOUR_API_TOKEN
- Fix placeholder emails on staging
 
./update-forge-fas-emails.py --token YOUR_API_TOKEN
- Preview changes against production
 
./update-forge-fas-emails.py --production --dry-run --token YOUR_API_TOKEN
- Fix placeholder emails on production
 
./update-forge-fas-emails.py --production --token YOUR_API_TOKEN
Understanding the Output
The script provides detailed output showing:
- 
Which environment it’s running against
 - 
Authentication status with Fedora Accounts
 - 
Progress through all Forge users
 - 
Actions taken for each user
 - 
Summary statistics at the end
 
Action Meanings
| Action | Description | 
|---|---|
SKIP  | 
User doesn’t have   | 
NO CHANGE  | 
User’s placeholder email already matches their Fedora Accounts email  | 
UPDATED/WOULD UPDATE  | 
Placeholder email was replaced with real Fedora Accounts email (or would be in dry-run mode)  | 
FAILED  | 
API call to update email failed  | 
ERROR  | 
Unexpected error occurred (usually Fedora Accounts connectivity issues or Fedora Accounts user with no emails)  | 
Sample Output
========================================================================================================================
Forge Email Sync from Fedora Accounts
Environment: STAGING
Forge URL: https://forge.stg.fedoraproject.org
Fedora Accounts URL: https://fasjson.stg.fedoraproject.org
*** DRY RUN MODE - NO CHANGES WILL BE MADE ***
========================================================================================================================
Authenticated with Fedora Accounts as: adminuser
Fetching users from Forge...
Found 1247 total users on Forge
------------------------------------------------------------------------------------------------------------------------
Username                  Current Email                       Action          New Email
------------------------------------------------------------------------------------------------------------------------
dudemcpants               dudemcpants@fedoraproject.org       WOULD UPDATE    dudemcpants@example.com
testermctesterson         testermctesterson@fedoraproject.org WOULD UPDATE    tester@example.org
fergieforge               fergieforge@fedoraproject.org       WOULD UPDATE    fergieforge+fasnotfound@fedoraproject.org
------------------------------------------------------------------------------------------------------------------------
========================================================================================================================
SUMMARY
========================================================================================================================
Total Forge users:                              1247
Skipped (non-@fedoraproject.org email):         1200
Skipped (already processed +fasnotfound):       40
Skipped (Fedora Accounts error):                0
No change needed:                               0
Updated from Fedora Accounts:                   3
Updated to +fasnotfound (not in Fedora Accounts): 4
Update failed:                                  0
Total @fedoraproject.org users processed:       7
Total changes would be made:                    7
*** DRY RUN MODE - Use --production flag without --dry-run to make actual changes ***
========================================================================================================================
Safety Features
- 
Dry-run mode lets you preview changes before making them
 - 
Only processes
@fedoraproject.orgplaceholder email addresses - 
Leaves users with real email addresses untouched
 - 
Comprehensive logging of all actions taken
 - 
Staging environment available for testing
 - 
Skips already processed users (those with
+fasnotfound@fedoraproject.org) 
Want to help? Learn how to contribute to Fedora Docs ›