Repository infrastructure setup

GitLab Configuration

The GitLab organization hosts the master copy of all the libvirt Git repositories.

When creating a new repository the following changes to the defaults are required under the Settings page:

  • General

    • Naming, topics, avatar

      • Project avatar: upload docs/logos/logo-square-256.png

    • Visibility, project features, permissions

      • Packages: disabled

      • Wiki: disabled

      • Snippets: disabled

    • Merge Requests

      • Merge method: Fast-forward merge

      • Merge options: Enable 'delete source branch' option by default

      • Merge checks: Pipelines must succeed

    • Merge request approvals

      • Any eligible user: Num approvals required == 1

  • Integrations

    • Pipelines emails

      • Recipients: ci@lists.libvirt.org

  • Repository

    • Push rules

      • Do not allow users to remove git tags with git push: enabled

      • Commit message: Signed-off-by:

      • Branch name: ^(master|v.*-maint)$

    • Mirroring repositories

      • Git repository URL: https://libvirtmirror@github.com/libvirt/$repo.git

      • Mirror direction: push

      • Password: see /root/libvirt-mirror-github-api-token.txt on libvirt.org

    • Protected branches

      • Branch: master and v*-maint

      • Allowed to merge: Developers + Maintainers

      • Allowed to push: None (or Developers + Maintainers if MRs not used)

      • Require approval from code owners: disabled

    • Protected tags

      • Tag: v* and any project specific tag formats like LIBVIRT_* or CVE*

      • Allowed to create: Developers + Maintainers

  • CI/CD

    • Runners

      • Shared runners: Enable shared runners

    • Variables

      • Key: CIRRUS_GITHUB_REPO

        • Value: libvirt/$repo

        • Protect variable: enabled

        • Mask variable: disabled

      • Key: CIRRUS_API_TOKEN

        • No need to set this at the project level: it's already set for the libvirt organization and will be inherited from there.

GitHub configuration

The GitHub organization hosts read-only mirrors of all the libvirt Git repositories.

When creating a new repository the following changes to the defaults are required under the Settings page:

  • Options

    • Features

      • Wikis: disabled

      • Sponsorships: disabled

      • Projects: disabled

    • Manage access

      • Add the @committers team with the role "Write", which grants the libvirtmirror user access to sync from GitLab.

    • Integrations

      • Check for Repo Lockdown (should be set automatically for all projects)

In the master git repository create a file .github/lockdown.yml to restrict use of issue tracker and pull requests.

libvirt.org

The libvirt project server hosts read-only mirrors of all the libvirt Git repositories in the directory /data/git.

When creating a new repository the following steps are required:

  • Create repo with

    $ sudo su -
    # cd /data/git
    # mkdir $repo.git
    # cd $repo.git
    # git init --bare
    # touch export
    # touch git-daemon-export-ok
    # cd ..
    # chown -R gitmirror.gitmirror $repo.git
    # chmod -R g+w $repo.git
    # find -type d $repo.git | xargs chmod g+s
  • Set the description and config files following other repos' example

  • Setup mirroring

    $ sudo su - gitmirror
    # ./newrepo.sh /data/git/$repo.git
    # cd mirrors
    # $HOME/sync-one.sh $repo.git