Skip to content

Commit

Permalink
chore: cleanup docs and CI
Browse files Browse the repository at this point in the history
  • Loading branch information
Justintime50 committed Nov 20, 2023
1 parent 4edff18 commit e535a33
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 54 deletions.
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ name: 'CI'

on:
push:
branches: [ master ]
branches: [master]
pull_request:

jobs:
flake8:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: 3.9
python-version: '3.12'
- name: install dependencies
run: python -m pip install flake8
- name: lint with flake8
Expand All @@ -22,14 +22,14 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
pythonversion: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9']
pythonversion: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.pythonversion }}
- name: install dependencies
run: "python -m pip install -r requirements-tests.txt -e ."
run: 'python -m pip install -r requirements-tests.txt -e .'
- name: test with pytest
run: py.test --cov-fail-under=50 --cov=shentry --cov-report=term-missing tests/
15 changes: 0 additions & 15 deletions .travis.yml

This file was deleted.

58 changes: 31 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,14 @@
# Shentry

[![Build Status](https://travis-ci.com/EasyPost/shentry.svg?branch=master)](https://travis-ci.com/EasyPost/shentry)

**Shentry** is a single-file Python script which will run the wrapped
command and, if it fails, post an event to Sentry. By default, if the
wrapped script succeeds (exists with code 0), stdout/stderr are squashed,
similarly to [shuck](https://github.com/thwarted/shuck) or
[chronic](https://joeyh.name/code/moreutils/). It also always exits with
status 0 if events are able to be sent to Sentry.

It reads its configuration from the environment variable `$SHELL_SENTRY_DSN`
and, if such a variable is found, removes it from the environment before
calling the wrapped program. If that environment variable is not present, shentry will look
for `$SENTRY_DSN` (and similarly remove it from the environment).
If you need to use SENTRY_DSN inside your project code, make sure to set both.
You may also in that case want to put a top-level try/except around your whole
program to prevent uncaught exceptions from trigging both your in-process sentry sdk
and also your extra-process shentry, since you very likely only want one or the other.
If neither of the environment variables are present or both
are empty, shentry will try to read a DSN from `/etc/shentry_dsn`. If no DSN
can be found, the wrapped will have normal behavior (stdout/stderr will go
to their normal file descriptors, exit code will be passed through, etc).

This software should be compatible with Python 2.6, 2.7, and 3.5+;
that is to say, you should be able to run it just about anywhere.

[![Build Status](https://travis-ci.com/EasyPost/shentry.svg?branch=master)](https://travis-ci.com/EasyPost/shentry)


## Installation

Put the file [`shentry.py`](shentry.py) anywhere in your `$PATH` under the
Expand All @@ -34,27 +19,46 @@ If the `requests` library is available, it will be used; otherwise, the standard
either `$SHELL_SENTRY_PROXY` or the contents of `/etc/shentry_proxy` can be
used to configure an outbound proxy.

The `setup.py` in this directory only exists for `tox` to work (and run unit
tests). Don't bother using it; just copy `shentry.py` wherever you want it.
The `setup.py` in this directory only exists for this project's dev tooling. To get
Shentry working on your machine, simply copy `shentry.py` wherever you need it.

## Usage

You might want a crontab that looks something like the following:

SHELL_SENTRY_DSN=https://pub:[email protected]/id
```sh
SHELL_SENTRY_DSN=https://pub:[email protected]/id

15 * * * * /usr/local/bin/shentry /usr/local/bin/run-periodic-scripts
15 * * * * /usr/local/bin/shentry /usr/local/bin/run-periodic-scripts
```

You can also make shentry your `$SHELL` and wrap all commands in it:

SHELL_SENTRY_DSN=https://pub:[email protected]/id
SHELL=/usr/local/bin/shentry
```sh
SHELL_SENTRY_DSN=https://pub:[email protected]/id
SHELL=/usr/local/bin/shentry

15 * * * * /usr/local/bin/run-periodic-scripts
7 1 * * * /usr/local/bin/run-daily-scripts
15 * * * * /usr/local/bin/run-periodic-scripts
7 1 * * * /usr/local/bin/run-daily-scripts
```

In this case, it will run the wrapped commands through `/bin/sh` (otherwise, it will honor `$SHELL`).

### Environment Variables

Shentry reads its configuration from the environment variable `$SHELL_SENTRY_DSN`
and, if such a variable is found, removes it from the environment before
calling the wrapped program. If that environment variable is not present, shentry will look
for `$SENTRY_DSN` (and similarly remove it from the environment).
If you need to use `SENTRY_DSN` inside your project code, make sure to set both.
You may also in that case want to put a top-level try/except around your whole
program to prevent uncaught exceptions from trigging both your in-process sentry sdk
and also your extra-process shentry, since you very likely only want one or the other.
If neither of the environment variables are present or both
are empty, shentry will try to read a DSN from `/etc/shentry_dsn`. If no DSN
can be found, the wrapped will have normal behavior (stdout/stderr will go
to their normal file descriptors, exit code will be passed through, etc).

## License

This software is licensed under the ISC License, the full text of which can be found at [LICENSE.txt](LICENSE.txt).
11 changes: 7 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from setuptools import setup


setup(
name="shentry",
version="0.4.0",
Expand All @@ -11,10 +10,10 @@
url="https://github.com/easypost/shentry",
license="ISC",
packages=[],
scripts=['shentry.py'],
scripts=["shentry.py"],
keywords=["logging"],
description="Wrap a program in sentry!",
python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4',
python_requires=">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4",
classifiers=[
"Development Status :: 3 - Alpha",
"Environment :: Console",
Expand All @@ -25,8 +24,12 @@
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Operating System :: POSIX",
"Intended Audience :: Developers",
"License :: OSI Approved :: ISC License (ISCL)",
]
],
)

0 comments on commit e535a33

Please sign in to comment.