---
title: "How to flush the Software repository"
author: "Bioconductor Maintainer"
date: "`r format(Sys.time(), '%B %d, %Y')`"
vignette: >
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteIndexEntry{Flushing the software repository}
  %\VignetteEncoding{UTF-8}
output:
  BiocStyle::html_document:
    number_sections: yes
    toc: true
---

```{css, echo=FALSE}
.infobox {
  padding: 1em 1em 1em 1em;
  margin-bottom: 10px;
  border: 2px solid #008000;
  border-radius: 10px;
  background: #c7dbe4 5px center/3em no-repeat;
  color: #8B0000;
}

.center {
  text-align: center;
}
```

# Flushing the Software Repository

To remove stale software packages, we flush the software repository. This might
be necessary when a build machine has transition from devel to release to
try to remove odd version-numbered packages.

It's important to reserve enough time and carefully check the results of the
report so that it doesn't negatively impact users.

The following are instructions to flush the software repository for the 3.14
builds as an example.

## Check the Day's Report

Verify that the software report for the day looks good and that you have at
least an hour before the next build. Look for packages, such as
`GenomicFeatures`, that are dependencies for many packages and ensure that they
are not failing. If they are failing, you should wait until they are passing
before attempting to flush the software repository.

# Comment Out Software Propagation in the Crontab

As `biocpush`, comment out the crontab entry for bioc. This will prevent
master from resyncing with staging on the build machine you're working on.

## Make a Backup

Create a backup of the software packages in case a package that is a dependency
for several packages, such as `GenomicFeatures`, that was passing later fails
in the new build report after removing all packages.


::: {.infobox data-latex=""}

As `biocpush`

:::

```sh
cd ~biocpush/PACKAGES/3.14/
cp -r bioc bioc.backup
```

## Remove All Packages

Remove all packages from `~biocpush/PACKAGES/3.14/bioc` for source, windows,
and mac binaries. Everything except for the `Archives` directories should be
gone and the `PACKAGES` files should be replaced with blank files.

::: {.infobox data-latex=""}

As `biocpush`

:::

```sh
cd ~biocpush/PACKAGES/3.14/src/contrib
rm -r PACKAGES* *.gz
touch PACKAGES
cd ~biocpush/PACKAGES/3.14/macosx/contrib/4.1
rm -r PACKAGES* *.tgz
touch PACKAGES
cd ~biocpush/PACKAGES/3.14/windows/contrib/4.1
rm -r PACKAGES* *.zip
touch PACKAGES
```

## Rerun the `postrun.sh`

As `biocbuild` rerun `postrun.sh` so that we get a new report. Check that the
new report has green leds and that important packages, such as
`GenomicFeatures`, pass so that we don't have a lot of failures.

If the report is not good, replace `bioc` with `bioc.backup` and rerun the
`postrun.sh`.

## Manually Run `updateReposPkgs-bioc.sh`

If the report is good, manually run `updateReposPkgs-bioc.sh` as `biocpush`.

## Uncomment Software Propagation in the Crontab

When everything is finished, uncomment the bioc propagation line in the
crontab.
