summaryrefslogtreecommitdiff
path: root/docs/newreposetup.rst
blob: ac2e6a15f199e6f3a5c3c9589f6abe78e38b2b86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
===============================
Repository infrastructure setup
===============================

GitLab Configuration
====================

The `GitLab organization <https://gitlab.com/libvirt>`_ 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*: ``libvirt-ci@redhat.com``

* **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 <https://github.com/libvirt>`_ 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 <https://libvirt.org>`_ 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