Remove stale environment refs

Problem to solve

Every environment created results in a new ref/environments being created, and these appear to never be deleted. This results in all these refs being transferred in every push. Even a tiny 1 line change must transfer all this data, making Git very slow.

For example, on the www-gitlab-com project:

  • 70% of the 285,000 refs are refs/environments
  • 45% of the 285,000 refs are refs/environments/review

The total refs transferred is 25MB uncompressed, and 7MB compressed.

Further details

Proposal

  • Ephemeral environments like review apps should have their refs cleaned up
  • Environment refs should be expired when they are past a certain age and have been superseded

These does not mean the data will be deleted. A refs/keep-around can be created. These are hidden, and therefore excluded from ref advertisement.