Migrate pungi-fedora Repository from Pagure to Forgejo #13090

Closed
opened 2025-11-18 08:56:08 +00:00 by jnsamyak · 17 comments
Owner

As part of the ongoing RelEng migration effort, we need to migrate the pungi-fedora repository from Pagure to Forgejo. This repository is central to Fedora’s compose process and is referenced by several automation pathways within RelEng and Infra.

This work must be completed in Sprint 5, with the first week dedicated to investigation and the second to implementation. The deadline for completion is two weeks from now.

Phase 1: Investigation (Week 1)

Tasks:

  • Identify all existing branches, active PRs, tags, and metadata in Pagure.
  • Audit CI configs, webhooks, compose triggers, and any automation that directly references pungi-fedora.
  • Document dependencies linking pungi-fedora to Pungi, compose automation, and other RelEng workflows.
  • Check for open issues and review if any need handling before migration.

Phase 2: Implementation (Week 2)
Tasks:

  • Run repository migration to Forgejo using the official migration tool.
  • Verify:
    Commit history
    All branches and tags
    Issues, labels, milestones
    Existing Pungi/compose hooks
  • Update all references from Pagure → Forgejo in RelEng tooling.
  • Disable issue tracker in Pagure and replace repository with a README redirect.

Acceptance Criteria:

  • Repository migrated to Forgejo successfully with all metadata preserved.
  • Compose-related integrations continue functioning without disruption.
  • Pagure repository fully cleaned up and redirected.
  • Documentation updated with new repo location.
As part of the ongoing RelEng migration effort, we need to migrate the pungi-fedora repository from Pagure to Forgejo. This repository is central to Fedora’s compose process and is referenced by several automation pathways within RelEng and Infra. This work must be completed in Sprint 5, with the first week dedicated to investigation and the second to implementation. The deadline for completion is two weeks from now. **Phase 1: Investigation (Week 1)** Tasks: - Identify all existing branches, active PRs, tags, and metadata in Pagure. - Audit CI configs, webhooks, compose triggers, and any automation that directly references pungi-fedora. - Document dependencies linking pungi-fedora to Pungi, compose automation, and other RelEng workflows. - Check for open issues and review if any need handling before migration. **Phase 2: Implementation (Week 2)** Tasks: - Run repository migration to Forgejo using the official migration tool. - Verify: Commit history All branches and tags Issues, labels, milestones Existing Pungi/compose hooks - Update all references from Pagure → Forgejo in RelEng tooling. - Disable issue tracker in Pagure and replace repository with a README redirect. **Acceptance Criteria:** - Repository migrated to Forgejo successfully with all metadata preserved. - Compose-related integrations continue functioning without disruption. - Pagure repository fully cleaned up and redirected. - Documentation updated with new repo location.
Author
Owner

Metadata Update from @jnsamyak:

  • Issue assigned to patrikp
**Metadata Update from @jnsamyak**: - Issue assigned to patrikp
Author
Owner

Forgot to add one item, please also make sure to look out for the mailing list if connected, always make sure to send out an annoucment for this before moving, once you start working on it, make sure to send out "when" it will be moved so community knows about it.

Forgot to add one item, please also make sure to look out for the mailing list if connected, always make sure to send out an annoucment for this before moving, once you start working on it, make sure to send out "when" it will be moved so community knows about it.
Member

Here are the results of the investigation phase.
The Pagure repository can be found here: https://pagure.io/pungi-fedora


Identify all existing branches, active PRs, tags, and metadata in Pagure.

Branches:

  • Total: 63 branches.
  • Active: 5 branches - main (Rawhide/F44), eln, f43, f42, f41.
  • Historical: f23 to f40 and various special branches (preserved but inactive).

Active PRs:

  • 0 open pull requests.

Tags:

  • 0 tags - Repository doesn't use release tags.

Metadata:

  • Repository size: 7.2 MB.
  • Git history: 2,291 commits.
  • 8 open issues.

Audit CI configs, webhooks, compose triggers, and any automation that directly references pungi-fedora.

CI configs:

  • .zuul.yaml with 2 validation jobs:
    • pungi-config-validate - validates *.conf syntax.
    • validate-variants - validates variants-fedora.xml.
  • Action needed: Configure Zuul webhook in Forgejo after migration.

Webhooks:

  • Currently: Zuul integration in Pagure.
  • Action needed: Add Zuul webhook URL to Forgejo repository settings.

Compose triggers: (more details on this later on)

  • Located in the Ansible repo under roles/releng/.
    • rawhide.j2: 3x/day (5am, 2pm, 10pm UTC).
    • branched.j2: 1x/day (7am UTC, when FedoraBranched=True).
    • eln: 3x/day on weekdays, 2x/day on weekends.
    • cloud-updates.j2: Daily for f43, f42, f41.
    • container-updates.j2 - Daily for f43, f42, f41.
  • All 5 cron jobs contain:
    git clone https://pagure.io/pungi-fedora.git
  • Risk: If cloning fails then composes fail and that blocks Fedora development/releases.
  • Action needed: All 5 templates need to be updated.

Document dependencies linking pungi-fedora to Pungi, compose automation, and other RelEng workflows.

Pungi:

  • Repository: https://pagure.io/pungi
  • Pungi is a generic distribution compose tool that takes in configuration files from pungi-fedora.
  • However, the pungi-fedora repository is cloned by the cron jobs, NOT by Pungi.
  • Pungi then reads the configuration from local files and uses local configuration paths (e.g. pungi-koji --config=fedora.conf).
  • This means that Pungi should require no changes as part of the migration.

Compose automation: (this is the critical part)

  • Ansible repository: https://pagure.io/fedora-infra/ansible
  • 5 Ansible cron templates clone pungi-fedora daily.
  • Located under /roles/releng/templates.
  • rawhide.j2
    • Purpose: Rawhide (F44 development) nightly compose.
    • Frequency: 3x daily (5am, 2pm, 10pm UTC).
    • Server: compose-rawhide01.rdu3.fedoraproject.org
    • Current line: git clone https://pagure.io/pungi-fedora.git
    • Branch used: main
    • Impact if broken: CRITICAL - blocks daily development.
  • branched.j2
    • Purpose: Branched release compose (when active).
    • Frequency: 1x daily (7am UTC).
    • Server: compose-branched01.rdu3.fedoraproject.org
    • Current lines:
      git clone https://pagure.io/pungi-fedora.git
      git checkout f{{ FedoraBranchedNumber }}
    • Branch used: f44 (when FedoraBranched variable becomes True)
    • Current status: Inactive (FedoraBranched=False)
  • eln
    • Purpose: Enterprise Linux Next compose.
    • Location: /roles/releng/files
    • Frequency: 3x daily weekdays, 2x daily weekends.
    • Server: compose-eln01.rdu3.fedoraproject.org
    • Current lines:
      git clone https://pagure.io/pungi-fedora.git
      git checkout eln
    • Branch used: eln
    • Impact if broken: HIGH - affects RHEL development pipeline
  • cloud-updates.j2
    • Purpose: Cloud images for multiple Fedora versions.
    • Frequency: Daily.
    • Versions: 3 simultaneous (f43, f42, f41).
    • Current lines:
      git clone -n https://pagure.io/pungi-fedora.git
      git checkout f{{ FedoraCycleNumber }} (f43)
      git checkout f{{ FedoraPreviousCycleNumber }} (f42)
      git checkout f{{ FedoraPreviousPreviousCycleNumber }} (f41)
    • Branch switching: Single clone, multiple checkouts.
  • container-updates.j2
    • Purpose: Container base images for multiple Fedora versions.
    • Frequency: Daily.
    • Versions: 3 simultaneous (f43, f42, f41).
    • Current lines: Same pattern as cloud-updates.j2.

Other RelEng workflows: (in other words documentation/SOPs)


Check for open issues and review if any need handling before migration.

Here are the results of the investigation phase. The Pagure repository can be found here: https://pagure.io/pungi-fedora --- ### Identify all existing branches, active PRs, tags, and metadata in Pagure. **Branches:** - Total: 63 branches. - Active: 5 branches - `main` (Rawhide/F44), `eln`, `f43`, `f42`, `f41`. - Historical: `f23` to `f40` and various special branches (preserved but inactive). **Active PRs:** - 0 open pull requests. **Tags:** - 0 tags - Repository doesn't use release tags. **Metadata:** - Repository size: 7.2 MB. - Git history: 2,291 commits. - 8 open issues. --- ### Audit CI configs, webhooks, compose triggers, and any automation that directly references `pungi-fedora`. **CI configs:** - `.zuul.yaml` with 2 validation jobs: - `pungi-config-validate` - validates `*.conf` syntax. - `validate-variants` - validates `variants-fedora.xml`. - Action needed: Configure Zuul webhook in Forgejo after migration. **Webhooks:** - Currently: Zuul integration in Pagure. - Action needed: Add Zuul webhook URL to Forgejo repository settings. **Compose triggers:** (more details on this later on) - Located in the Ansible repo under `roles/releng/`. - `rawhide.j2`: 3x/day (5am, 2pm, 10pm UTC). - `branched.j2`: 1x/day (7am UTC, when `FedoraBranched=True`). - `eln`: 3x/day on weekdays, 2x/day on weekends. - `cloud-updates.j2`: Daily for `f43`, `f42`, `f41`. - `container-updates.j2` - Daily for `f43`, `f42`, `f41`. - All 5 cron jobs contain: `git clone https://pagure.io/pungi-fedora.git` - Risk: If cloning fails then composes fail and that blocks Fedora development/releases. - Action needed: All 5 templates need to be updated. --- ### Document dependencies linking `pungi-fedora` to `Pungi`, compose automation, and other RelEng workflows. **Pungi:** - Repository: https://pagure.io/pungi - `Pungi` is a generic distribution compose tool that takes in configuration files from `pungi-fedora`. - However, the `pungi-fedora` repository is cloned by the cron jobs, NOT by `Pungi`. - `Pungi` then reads the configuration from local files and uses local configuration paths (e.g. `pungi-koji --config=fedora.conf`). - This means that `Pungi` should require no changes as part of the migration. **Compose automation:** (this is the critical part) - Ansible repository: https://pagure.io/fedora-infra/ansible - 5 Ansible cron templates clone `pungi-fedora` daily. - Located under `/roles/releng/templates`. - `rawhide.j2` - Purpose: Rawhide (F44 development) nightly compose. - Frequency: 3x daily (5am, 2pm, 10pm UTC). - Server: `compose-rawhide01.rdu3.fedoraproject.org` - Current line: `git clone https://pagure.io/pungi-fedora.git` - Branch used: `main` - Impact if broken: CRITICAL - blocks daily development. - `branched.j2` - Purpose: Branched release compose (when active). - Frequency: 1x daily (7am UTC). - Server: `compose-branched01.rdu3.fedoraproject.org` - Current lines: `git clone https://pagure.io/pungi-fedora.git` `git checkout f{{ FedoraBranchedNumber }}` - Branch used: f44 (when FedoraBranched variable becomes True) - Current status: Inactive (FedoraBranched=False) - `eln` - Purpose: Enterprise Linux Next compose. - Location: `/roles/releng/files` - Frequency: 3x daily weekdays, 2x daily weekends. - Server: `compose-eln01.rdu3.fedoraproject.org` - Current lines: `git clone https://pagure.io/pungi-fedora.git` `git checkout eln` - Branch used: `eln` - Impact if broken: HIGH - affects RHEL development pipeline - `cloud-updates.j2` - Purpose: Cloud images for multiple Fedora versions. - Frequency: Daily. - Versions: 3 simultaneous (`f43`, `f42`, `f41`). - Current lines: `git clone -n https://pagure.io/pungi-fedora.git` `git checkout f{{ FedoraCycleNumber }}` (f43) `git checkout f{{ FedoraPreviousCycleNumber }}` (f42) `git checkout f{{ FedoraPreviousPreviousCycleNumber }}` (f41) - Branch switching: Single clone, multiple checkouts. - `container-updates.j2` - Purpose: Container base images for multiple Fedora versions. - Frequency: Daily. - Versions: 3 simultaneous (`f43`, `f42`, `f41`). - Current lines: Same pattern as `cloud-updates.j2`. **Other RelEng workflows:** (in other words documentation/SOPs) - SOPs are located here: https://pagure.io/infra-docs-fpo/blob/master/f/modules/release_guide/pages - `sop_beta_RC_compose.adoc` - Lines 18, 102 - `sop_final_RC_compose.adoc` - Lines 18, 102 - `sop_create_release_signing_key.adoc` - Lines 196, 200 - `sop_mass_branching_checklist.adoc` - Line 151 - `sop_mass_branching.adoc` - Lines 128, 733 - Action needed: Update the URLs in the SOPs. --- ### Check for open issues and review if any need handling before migration. - Issues that are currently open: https://pagure.io/pungi-fedora/issues - There do not seem to be any that need to be handled before the migration happens.
Member

I ran the migration tool, the Forgejo repository can be found here. [1]
I have also prepared the Ansible PR [2] and the PR to update our RelEng documentation [3].

Now I'm trying to investigate the CI part of the migration as I don't really understand how Zuul works and how it's configured.

[1] https://forge.fedoraproject.org/releng/pungi-fedora
[2] https://pagure.io/fedora-infra/ansible/pull-request/2980
[3] https://pagure.io/infra-docs-fpo/pull-request/437

I ran the migration tool, the Forgejo repository can be found here. [1] I have also prepared the Ansible PR [2] and the PR to update our RelEng documentation [3]. Now I'm trying to investigate the CI part of the migration as I don't really understand how Zuul works and how it's configured. [1] https://forge.fedoraproject.org/releng/pungi-fedora [2] https://pagure.io/fedora-infra/ansible/pull-request/2980 [3] https://pagure.io/infra-docs-fpo/pull-request/437
Member

Seems like the repository for Software Factory (the software development forge that integrates Zuul) configuration can be found here [1]. The sources file where the individual projects may be added can be found here [2].

[1] https://pagure.io/fedora-project-config
[2] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml

Seems like the repository for Software Factory (the software development forge that integrates Zuul) configuration can be found here [1]. The sources file where the individual projects may be added can be found here [2]. [1] https://pagure.io/fedora-project-config [2] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml
Contributor

What is the state of this? While not urgent, I do have changes ready to push to eln branch.

What is the state of this? While not urgent, I do have changes ready to push to `eln` branch.
Member

@patrikp wrote in #13090 (comment):

Seems like the repository for Software Factory (the software development forge that integrates Zuul) configuration can be found here [1]. The sources file where the individual projects may be added can be found here [2].

[1] https://pagure.io/fedora-project-config [2] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml

It depends what zuul jobs are you looking for. I believe zuul jobs that are run on Ansible repo can be found here

@patrikp wrote in https://forge.fedoraproject.org/releng/tickets/issues/13090#issuecomment-251322: > Seems like the repository for Software Factory (the software development forge that integrates Zuul) configuration can be found here [1]. The sources file where the individual projects may be added can be found here [2]. > > [1] https://pagure.io/fedora-project-config [2] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml It depends what zuul jobs are you looking for. I believe zuul jobs that are run on Ansible repo can be found [here](https://pagure.io/fedora-infra/zuul/tree/main)
Member

To clarify, I'm looking for a way to enable Zuul for Forgejo in general as it's currently not enabled. Would you happen to know how to do that @yselkowitz? Is it as simple as adding another line in the config file [1], e.g. connection: forge.fedoraproject.org?

[1] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml#_6

To clarify, I'm looking for a way to enable Zuul for Forgejo in general as it's currently not enabled. Would you happen to know how to do that @yselkowitz? Is it as simple as adding another line in the config file [1], e.g. `connection: forge.fedoraproject.org`? [1] https://pagure.io/fedora-project-config/blob/master/f/resources/fedora-sources.yaml#_6
Contributor

I suspect it's much more complicated than that, but all I've ever done was add a repo to an existing connection. But I'd imagine it would involve at least creating a bot account and credentials (token) and securely importing them on the other end.

However, I'm wondering if it wouldn't make more sense to use this as an opportunity to switch from Zuul CI to Fedora CI (TMT)?

I suspect it's much more complicated than that, but all I've ever done was add a repo to an existing connection. But I'd imagine it would involve at least creating a bot account and credentials (token) and securely importing them on the other end. However, I'm wondering if it wouldn't make more sense to use this as an opportunity to switch from Zuul CI to Fedora CI (TMT)?
Member

You make a good point and it aligns with my findings. There's a proposal to get rid of Zuul altogether [1] so I don't think setting up the new forge for Zuul is in the cards. I don't know how that'll go with other repos that will be migrated in the near future that actually use Zuul for complex CI stuff, I don't think there's any sort of plan in place, and if there is one I haven't been able to find out more about it.

However, for the purposes of pungi-fedora specifically, since it only does some basic sanity checks and the scripts are already in the repo itself, it should be fairly straightforward to make them run using Forgejo actions [2]. There's also a separate ticket for investigation [3].

Apologies for the confusion, this is the first migration wave and we're figuring things out on the go. I think we can finish the migration of pungi-fedora in the next few days and figure out the CI afterwards.

[1] https://fedoraproject.org/wiki/Changes/PackitDistgitCI
[2] https://forgejo.org/docs/latest/user/actions/basic-concepts/
[3] #13109

You make a good point and it aligns with my findings. There's a proposal to get rid of Zuul altogether [1] so I don't think setting up the new forge for Zuul is in the cards. I don't know how that'll go with other repos that will be migrated in the near future that actually use Zuul for complex CI stuff, I don't think there's any sort of plan in place, and if there is one I haven't been able to find out more about it. However, for the purposes of `pungi-fedora` specifically, since it only does some basic sanity checks and the scripts are already in the repo itself, it should be fairly straightforward to make them run using Forgejo actions [2]. There's also a separate ticket for investigation [3]. Apologies for the confusion, this is the first migration wave and we're figuring things out on the go. I think we can finish the migration of `pungi-fedora` in the next few days and figure out the CI afterwards. [1] https://fedoraproject.org/wiki/Changes/PackitDistgitCI [2] https://forgejo.org/docs/latest/user/actions/basic-concepts/ [3] https://forge.fedoraproject.org/releng/tickets/issues/13109
Contributor

Something to keep in mind is permissions. For instance, I have (had) write permissions to pagure.io/pungi-fedora but that was not migrated to forgejo.

Something to keep in mind is permissions. For instance, I have (had) write permissions to pagure.io/pungi-fedora but that was not migrated to forgejo.
Member

The migration will happen in the next 24 hours. I sent an e-mail to relevant mailing lists (devel, devel-announce and test-announce).

The migration will happen in the next 24 hours. I sent an e-mail to relevant mailing lists (`devel`, `devel-announce` and `test-announce`).
Contributor

Using forgejo actions here makes sense and looks straight-forward, but is #13109 about using actions in releng repos or about setting up runners for forge.fp.o in the first place?

Using forgejo actions here makes sense and looks straight-forward, but is #13109 about using actions in releng repos or about setting up runners for forge.fp.o in the first place?
Member

The Ansible PR was merged and playbook ran, the updated /etc/cron.d files seem to be correct on the hosts, the Pagure repository is now in read-only mode, docs have been updated and an announcement e-mail sent to relevant mailing lists. We will watch out for the composes and can revert the changes if something goes wrong.

The Ansible PR was merged and playbook ran, the updated `/etc/cron.d` files seem to be correct on the hosts, the Pagure repository is now in read-only mode, docs have been updated and an announcement e-mail sent to relevant mailing lists. We will watch out for the composes and can revert the changes if something goes wrong.
Member

Something to keep in mind is permissions. For instance, I have (had) write permissions to pagure.io/pungi-fedora but that was not migrated to forgejo.

I took the liberty of adding you as a collaborator to the project with write access.

> Something to keep in mind is permissions. For instance, I have (had) write permissions to pagure.io/pungi-fedora but that was not migrated to forgejo. I took the liberty of adding you as a collaborator to the project with write access.
Owner

Just FYI, I don't think you can manually add people here, you need to add them to the fas group associated with maintainer, etc.

Just FYI, I don't think you can manually add people here, you need to add them to the fas group associated with maintainer, etc.
yselkowitz referenced this issue from a commit 2025-12-05 06:51:18 +00:00
Author
Owner

The migration work is done here and is under monitoring. There is no need to have this ticket open. Closing this, and we can always reopen this 🍡

The migration work is done here and is under monitoring. There is no need to have this ticket open. Closing this, and we can always reopen this 🍡
Sign in to join this conversation.
No milestone
No assignees
5 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
releng/tickets#13090
No description provided.