Implement grace period for default Artifact expiration

Description

As part of #27762 (closed), we are implementing support for having a default expiration date for artifacts, unless it is otherwise overridden. The challenge is if we want to set this by default, which we do, we have the problem of potentially deleting a large number of artifacts for people who were relying on the previous behavior. (Default being no expiration)

For changes like this we should have a method for notifying users and allowing them to take action prior to potentially destructive actions occur.

Proposal

We should add an option to specify a duration for a grace period, before deletions occur. As we begin to get more paying customers on GitLab.com, this will also be important to shepherd and notify changes gracefully as we make changes like this.

One way to do this would be to offer a new line of options below the existing artifact expiration option.

  • A checkbox on whether to enable a grace period, which shows/hides the rest of the controls.
  • A duration for how long the grace period should last. (e.g. 14 days)
  • Two checkboxes for notification options:
    • A banner such as the one we use for SSH keys or deployments.
    • Email messages. For now these can be simply hardcoded to email the master admin of projects that their artifacts will expire in X days, unless action is taken. We can send a message once the grace period starts, and then 24 hours before it is set to expire.