Envkeeper
, coming from "Environment Housekeeper", is a custom composite GitHub Actions to manage GitHub Deployments and its Environment associated.
Thanks to this great features of GitHub, we can realize Continuous Delivery by GitHub Actions, and you can use GitHub Envionments for the applications integrated its repo.
As many of application platforms (PaaS) have PR environments, where it can automatically create GitHub Environment/Deployments and associated acutal deploys on the platforms with linking to Pull Requests, but several services will NOT clean up after the PRs will be merged.
So you might see many of staled environements/deployments have been associated to your repository, and for resolving these kind of caveats we need to have any solutions to purge staled objects in GitHub (StackOverflow's ref).
With using envkp
CLI, which will be available with Envkeeper, you can completely purge these staled deployments and linked environments.
As you can use Envkeeper with several forms of implementations according to your requirements, one of the best way is to use as GitHub Actions.
Since we developed Custom Composit GitHub Actions to run Envkeeper
(envkp
) for housekeeping GitHub Environment, it can be available in GitHub Marketplace.
Create workflows (ex. .github/workflows/envkeeper.yaml
) for using GitHub Actions of envkeeper with contexts:
name: Purge staled environment
on:
schedule:
# Runs on 19:00 JST every day, note that cron syntax applied as UTC
- cron: '0 10 * * *'
workflow_dispatch:
jobs:
cleanup-env:
runs-on: ubuntu-24.04
permissions:
deployments: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Clean up Environments
uses: hwakabh/envkeeper@main
with:
token: ${{ github.token }}
repo: ${{ github.repository }}
Inputs have been defined in action.yml
:
Name | Required | Description |
---|---|---|
token |
true | Token to use to authorize. Typically the GITHUB_TOKEN secrets. |
repo |
true | Target repository to check issue title. |
Note that GitHub Actions of envkeeper will delete Deployments in the repository, the token has the scope for repo_deployment
.
TBU, under development.
Name | Required | Description |
---|---|---|
result |
false | The results of operations |
As well as envkeeper-actions, you can also use envkp
on your local environment as client tools.
Since envkp
has been developed purely as Python package, it can be available in PyPI repository.
As mentioned, envkp
can be installed from PyPI, so you can easily install it with your favorite Python package manager (such as pip
, poetry
, uv
, ...etc).
Please follow its documents for installation of the package manager first, and be sure that enable venv
if you need to have isolated environments.
# pip
% pip install envkp
# poetry
% poetry add envkp
# uv
% uv add envkp
With pip
case you can also download it directly from GitHub looked like below, or of course you can download each formats of Python packages files (.tar.gz
or .whl
formats) from here, and install directly from each file according to your requirements.
# Git
% pip install git+https://github.com/hwakabh/envkeeper.git
Though it has been deprecated way, where we will use setuptools
(setup.py
) for package installations, you can use one of the options using it if you have already had setuptools
in your environments:
% python setup.py install
envkp
has two main subcommands: clean
and seek
, and both of them will expect repository name as its arguments.
Please note that the value for --repo
should be formed as owner/reponame
, for example hwakabh/envkeeper
.
% envkp --repo ${reponame} clean
% envkp --repo ${reponame} seek
envkp clean
will
- delete all deployments of repo whose status is
inactive
. This means active deployments, where upstream/latest application code basis are deployed, will NOT be deleted for secure operations. - delete all environments of repo, where no deployment has been associated to any deployments
envkp seek
will
- print information of deployments/environments in the repository
Name | Required | Description |
---|---|---|
GH_TOKEN |
true | Token to use to authorize. Typically the GITHUB_TOKEN secrets. |
GH_REPONAME |
false | equivalent with the input for --repo |
Similar solutions it can be available on GitHub: