Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
617a2bd
Merge pull request #31 from nitrocloudofficial/develop
manish-wekan Sep 10, 2026
a733e2e
Add GitHub Actions to bump versions on main and publish from the rele…
manish-wekan Sep 10, 2026
a38fed4
Merge pull request #39 from nitrocloudofficial/develop
manish-wekan Sep 28, 2026
d4bd135
Merge main into feature/release-automation.
manish-wekan Sep 30, 2026
a1c47a6
Merge pull request #33 from nitrocloudofficial/feature/release-automa…
manish-wekan Sep 30, 2026
5340e7f
version-bump
manish-wekan Oct 1, 2026
3b22b2a
Merge pull request #40 from nitrocloudofficial/release/0.4.0
manish-wekan Oct 1, 2026
df5456f
docs: document widget data and CSP handling
KeuqS Oct 13, 2026
421ae5f
ConfigService: process environment wins over .env
manish-wekan Oct 15, 2026
f14c94b
Merge pull request #48 from nitrocloudofficial/fix/process-env-wins-o…
manish-wekan Oct 16, 2026
57e8d35
chore(release): 0.4.1
github-actions[bot] Oct 16, 2026
2c33d51
Merge pull request #49 from nitrocloudofficial/release/0.4.1
manish-wekan Oct 16, 2026
0e145d4
Add scripts/release.sh for releasing to PyPI by hand
manish-wekan Oct 16, 2026
735a160
release.sh: review fixes
manish-wekan Oct 16, 2026
b7257e8
docs: refresh README for the current SDK; add PyPI project links
manish-wekan Oct 16, 2026
e987335
docs: don't present upgrade as the way to refresh the vendored SDK
manish-wekan Oct 16, 2026
1454263
Merge pull request #50 from nitrocloudofficial/chore/release-script
manish-wekan Oct 16, 2026
ed5eec5
Merge pull request #51 from nitrocloudofficial/docs/readme-refresh
manish-wekan Oct 16, 2026
f29cff0
Fix upgrade on vendored projects; correct init's NitroStudio note
manish-wekan Oct 16, 2026
b5c396b
Merge pull request #52 from nitrocloudofficial/fix/upgrade-vendored
manish-wekan Oct 16, 2026
8b014eb
chore(release): 0.4.2
github-actions[bot] Oct 16, 2026
1917995
Merge pull request #53 from nitrocloudofficial/release/0.4.2
manish-wekan Oct 16, 2026
b96606b
validate: skip the vendored SDK
manish-wekan Oct 16, 2026
7dafac9
Merge pull request #54 from nitrocloudofficial/fix/validate-skip-vend…
manish-wekan Oct 16, 2026
76f5bde
pack: add --include-env
manish-wekan Oct 16, 2026
93d6fcd
Merge pull request #55 from nitrocloudofficial/feat/pack-include-env
manish-wekan Oct 16, 2026
902d0dd
docs: add Product Hunt featured badge to README
hemantj-cloud Oct 17, 2026
0b445fb
Merge pull request #56 from nitrocloudofficial/feat/producthunt-badge
hemantj-cloud Oct 17, 2026
d51e202
docs: update Product Hunt badge to #1 Product of the Day top-post badge
hemantj-cloud Oct 18, 2026
a06624c
Merge pull request #57 from nitrocloudofficial/feat/producthunt-top-p…
hemantj-cloud Oct 18, 2026
feb2bae
Merge pull request #45 from KeuqS/docs/43-widget-data-csp
manish-wekan Oct 20, 2026
294f548
security: mitigate eMudhra/emSign CA incident (certifi floor, secure …
Shreyavemana Oct 22, 2026
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
85 changes: 85 additions & 0 deletions .github/workflows/bump-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Bump version

# After a non-release PR merges to main, open (or refresh) a release PR that
# bumps pyproject.toml + uv.lock ahead of PyPI. Merging that PR runs publish.yml.
on:
pull_request:
types: [closed]
branches: [main]
workflow_dispatch:
inputs:
bump:
description: Semver component to increment
type: choice
options: [patch, minor, major]
default: patch

concurrency:
group: bump-version
cancel-in-progress: true

jobs:
bump:
if: >
github.event_name == 'workflow_dispatch' ||
(github.event.pull_request.merged == true &&
!contains(github.event.pull_request.labels.*.name, 'release'))
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event_name == 'workflow_dispatch' && 'main' || github.event.pull_request.merge_commit_sha }}
token: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Plan and write bump
id: bump
run: |
set -euo pipefail
KIND="${{ github.event_name == 'workflow_dispatch' && inputs.bump || 'patch' }}"
VERSION=$(python scripts/bump_version.py --bump "$KIND" --write | tail -n 1)
if [ -z "$VERSION" ]; then
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
echo "skip=false" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Open or update release PR
if: steps.bump.outputs.skip != 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ steps.bump.outputs.version }}
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
BRANCH="release/${VERSION}"
git checkout -B "$BRANCH"
git add pyproject.toml uv.lock
git diff --staged --quiet && { echo "No version files changed"; exit 1; }
git commit -m "chore(release): ${VERSION}"
git push --force-with-lease origin "HEAD:refs/heads/${BRANCH}"
gh label create release --description "Version bump / PyPI release" --color 0E8A16 --force || true
EXISTING=$(gh pr list --base main --head "$BRANCH" --json number --jq '.[0].number // empty')
if [ -n "$EXISTING" ]; then
echo "Updated PR #${EXISTING}"
exit 0
fi
gh pr create --base main --head "$BRANCH" --title "chore(release): ${VERSION}" --label release --body "$(cat <<EOF
## Summary
- Bump SDK version to **${VERSION}** in \`pyproject.toml\` and \`uv.lock\`.
- Merge this PR to publish \`${VERSION}\` to PyPI (see \`publish.yml\`).

## Test plan
- [ ] Version in \`pyproject.toml\` is ${VERSION} and is not already on PyPI
- [ ] \`uv.lock\` editable \`nitrostack\` package version matches
EOF
)"
77 changes: 77 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Publish to PyPI

# Runs when main moves. Uploads only if [project].version is not already on PyPI
# (the release PR merge). Feature merges no-op in the check job so a protected
# `pypi` environment does not block ordinary merges.
on:
push:
branches: [main]

jobs:
check:
runs-on: ubuntu-latest
outputs:
publish: ${{ steps.check.outputs.publish }}
version: ${{ steps.check.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- id: check
run: |
set -euo pipefail
if VERSION=$(python scripts/bump_version.py --if-unpublished); then
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "publish=true" >> "$GITHUB_OUTPUT"
else
echo "publish=false" >> "$GITHUB_OUTPUT"
echo "pyproject version is already on PyPI; skipping upload"
fi

publish:
needs: check
if: needs.check.outputs.publish == 'true'
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/project/nitrostack/
permissions:
id-token: write
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Secure pip bootstrap (eMudhra/emSign advisory)
run: |
python -m pip install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
python -m pip install --upgrade "certifi>=2026.10.19"

- name: Install build tools and build package
run: |
python -m pip install --upgrade build
python -m build
- name: Secure pip bootstrap (eMudhra/emSign advisory)
run: |
python -m pip install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
python -m pip install --upgrade "certifi>=2026.10.19"
- run: python -m pip install -U build && python -m build
- uses: pypa/gh-action-pypi-publish@release/v1
- name: Tag release
env:
VERSION: ${{ needs.check.outputs.version }}
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
TAG="v${VERSION}"
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "Tag $TAG already exists"
exit 0
fi
git tag -a "$TAG" -m "nitrostack ${VERSION}"
git push origin "$TAG"
8 changes: 6 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,14 @@ jobs:
with:
python-version: ${{ matrix.python-version }}

- name: Secure pip bootstrap (eMudhra/emSign advisory)
run: |
python -m pip install "pip @ https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70"
python -m pip install --upgrade "certifi>=2026.10.19"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
python -m pip install -e ".[dev]"

- name: Run pytest with coverage
run: pytest tests --cov=nitrostack --cov-report=term-missing --timeout=60
Loading
Loading