development-guide icon indicating copy to clipboard operation
development-guide copied to clipboard

Add repository archiving policy

Open hillaryj opened this issue 5 years ago • 4 comments

🚀 Feature Proposal

Unmaintained repositories should be archived. Ideally, people would do this but robots are much better at doing regularly-scheduled maintenance like that than people are. Let's:

  1. Develop a policy for when unmaintained (i.e. un-updated) repositories get archived automatically
  2. Implement a regularly-scheduled archive process for unmaintained repositories

Motivation

We want to make it clear when repositories are no longer maintained and reduce confusion and expectations. Code rot sets in as soon as code is written.

Repositories can be easily un-archived through the Settings menu and it will prompt someone to maybe do something about that repo.

Example

GSA 18F/TTS uses an automated archiving process to archive after 90 days of inactivity per their open source policy section on archiving.

hillaryj avatar Oct 07 '20 17:10 hillaryj

Notes from chat re: ghad:

  • our apb script and lineage may keep this alive in its current implementation:
    • it is pretty liberal about what is considered activity: https://github.com/18F/ghad/blob/master/src/commands/archive.js
    • Any event that isn't in ["ForkEvent", "StarEvent", "WatchEvent"]
  • we could filter the events by actor and get a good auto-archiver going.
  • https://developer.github.com/v3/activity/event_types/#event-object-common-properties

hillaryj avatar Oct 07 '20 17:10 hillaryj

@mcdonnnj makes a good point that "un-updated" is not a sufficient condition for labeling a repository as "unmaintained" or as "unused".

jsf9k avatar Oct 07 '20 17:10 jsf9k

Good point!

Un-archiving a repository is a fairly trivial task and we want to make it so the positive action (i.e. "doing an actual thing") undertaken by humans is the lower-incidence option.

I mean, we could create an exception list, but then maintaining the exception list becomes the new version of where we are now.

So, the process could be something like: monthly(?) the archive script runs and tells us what it archived, then anyone who objects can go in and unarchive their repo(s).

hillaryj avatar Oct 07 '20 17:10 hillaryj

  1. I suspect that once we get all the golden oldies modernized then this process will probably run smoothly. Use of skeletons and lineage, as well as dependabot, will force any repository we don't archive to be updated every once in a while, and hence for practical purposes "un-updated" will become a sufficient condition for "unmaintained".
  2. My suggested name for this tool is "The Reaper". Alternate name is "TLP Black". Reaper
  3. Two requirements that I think make sense:
    • An email should be sent to [email protected], say, whenever a repo is archived or about to be archived. We don't repos to silently be archived.
    • There should be a simple measure that allows a repo to avoid being archived. Maybe something like adding an empty file named .no-archive to the root of the repo. This is just in case we have some oddball repos that don't get changed but also shouldn't be archived.
  4. Actually, we could just have a .reaper file that contains any necessary configuration for The Reaper, such as archive=False or the email where notification of archival should be sent. Or should notifications just be sent to all users listed as codeowners?

jsf9k avatar Oct 07 '20 17:10 jsf9k