Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[flake8]
max-line-length = 100
max-complexity = 35
exclude =
.git,
__pycache__,
.venv,
venv,
build,
dist,
baseline
extend-ignore =
E203,
E501,
W503
per-file-ignores =
lib/envstack/cli.py:C901
lib/envstack/env.py:F405
lib/envstack/path.py:F405
lib/envstack/util.py:C901
tests/test_cmds.py:W291
60 changes: 60 additions & 0 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: publish-docs

on:
push:
branches:
- master
- main
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-24.04

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Configure Pages
uses: actions/configure-pages@v5

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Build Jekyll source tree
run: |
python scripts/build_pages_site.py --output _site_src

- name: Build site with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: _site_src
destination: _site

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site

deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-24.04
needs: build

steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
37 changes: 33 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,40 @@
name: tests

on: [push, pull_request]
on:
push:
paths:
- ".github/workflows/tests.yml"
- ".flake8"
- "bin/**"
- "lib/**"
- "tests/**"
- "pyproject.toml"
pull_request:
paths:
- ".github/workflows/tests.yml"
- ".flake8"
- "bin/**"
- "lib/**"
- "tests/**"
- "pyproject.toml"

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python -m pip install --upgrade pip
- run: pip install -e ".[dev]"
- run: black --check lib tests bin/
- run: isort --check-only lib tests bin/
- run: flake8 lib tests bin

test:
runs-on: ${{ matrix.os }}
needs: lint
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
Expand All @@ -15,6 +45,5 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade pip
- run: pip install pytest
- run: pip install -e .
- run: pytest tests -v
- run: pip install -e ".[dev]"
- run: python -m pytest tests -v
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

---

## [1.0.4] - 2026-07-25

### Added
- add a `dev` extra with `pytest`, `black`, `isort`, and `flake8` for one-command local setup
- add lightweight performance regression tests using example-based environment fixtures
- add a GitHub Pages docs publishing workflow and a generated docs-site builder

### Changed
- move pytest configuration into `pyproject.toml`
- broaden CI lint checks to cover the full `bin/` directory
- simplify the docs landing page so the published site acts more like a lightweight home page that links to deeper documentation

### Fixed
- restore AES-GCM compatibility on Python 3.8/current `cryptography` by passing an explicit backend where required
- restore the missing `envstack.wrapper` module to release artifacts by cleaning up release/build hygiene
- make plain `pytest tests -q` work reliably via test-suite bootstrap and shared test helpers

---

## [1.0.3] - 2026-07-23

### Changed
Expand All @@ -19,6 +38,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- restore Python 3.14 compatibility in `EnvVar.vars()` by avoiding `string.Template` pattern access that now raises under 3.14
- suppress the `cryptography` Python 3.8 deprecation warning during import so `envstack` subprocess tests and CLI startup remain quiet on supported 3.8 installs

### Notes
- The `1.0.3` PyPI release published on July 23, 2026 was yanked because the distributed wheel/sdist omitted `envstack.wrapper`, which breaks CLI startup after `pip install envstack`.
- Use `1.0.4` or newer instead.

---

## [1.0.2] - 2026-04-01
Expand Down
55 changes: 0 additions & 55 deletions Makefile

This file was deleted.

4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<p align="center">
<img src="docs/assets/envstack.png" alt="envstack logo" width="560">
</p>

envstack
========

Expand Down
1 change: 1 addition & 0 deletions bin/envstack
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Contains a simple executable for the envstack cli.py module.

import re
import sys

from envstack.cli import main

if __name__ == "__main__":
Expand Down
2 changes: 2 additions & 0 deletions bin/hello
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,13 @@ Usage:
"""

import sys

from envstack.wrapper import Wrapper


class HelloWrapper(Wrapper):
"""A simple wrapper that prints the value of an environment variable."""

def __init__(self, *args, **kwargs):
super(HelloWrapper, self).__init__(*args, **kwargs)
self.shell = True
Expand Down
1 change: 1 addition & 0 deletions bin/whichenv
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ Contains a simple executable for the envstack cli.py module.

import re
import sys

from envstack.cli import whichenv

if __name__ == "__main__":
Expand Down
Binary file added docs/assets/envstack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading