bashrun 0.5.0.dev37378802238__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. bashrun-0.6.0/.github/workflows/integrate.yml +24 -0
  2. bashrun-0.6.0/.github/workflows/merge-gate.yml +18 -0
  3. bashrun-0.6.0/.github/workflows/release.yml +32 -0
  4. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/AGENTS.md +3 -3
  5. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/PKG-INFO +1 -1
  6. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/pyproject.toml +1 -2
  7. bashrun-0.6.0/release-devkit.yaml +6 -0
  8. bashrun-0.6.0/scripts/preflight.py +3 -0
  9. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/src/bashrun/bash.py +15 -5
  10. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/tools/devkit/pyproject.toml +1 -1
  11. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/tools/devkit/uv.lock +4 -42
  12. bashrun-0.5.0.dev37378802238/.github/actions/setup-release-devkit/action.yml +0 -11
  13. bashrun-0.5.0.dev37378802238/.github/workflows/integrate.yml +0 -57
  14. bashrun-0.5.0.dev37378802238/.github/workflows/merge-gate.yml +0 -41
  15. bashrun-0.5.0.dev37378802238/.github/workflows/release.yml +0 -56
  16. bashrun-0.5.0.dev37378802238/release-devkit.yaml +0 -7
  17. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/.gitattributes +0 -0
  18. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/.gitignore +0 -0
  19. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/.python-version +0 -0
  20. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/CLAUDE.md +0 -0
  21. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/LICENSE +0 -0
  22. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/NOTICE +0 -0
  23. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/README.md +0 -0
  24. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/ruff.base.toml +0 -0
  25. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/ruff.toml +0 -0
  26. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/src/bashrun/__init__.py +0 -0
  27. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/src/bashrun/py.typed +0 -0
  28. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/tests/test_bash.py +0 -0
  29. {bashrun-0.5.0.dev37378802238 → bashrun-0.6.0}/uv.lock +0 -0
@@ -0,0 +1,24 @@
1
+ name: Integrate
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request:
6
+ branches: [dev]
7
+
8
+ concurrency:
9
+ group: integrate-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ preflight:
17
+ uses: outernet-foundation/github-actions-toolkit/.github/workflows/preflight.yml@decae45a7f5044695cabf9a2ad2913dfe6d239ce
18
+
19
+ update-pr-draft-release:
20
+ needs: [preflight]
21
+ permissions:
22
+ contents: write
23
+ packages: read
24
+ uses: outernet-foundation/github-actions-toolkit/.github/workflows/update-pr-draft-release.yml@decae45a7f5044695cabf9a2ad2913dfe6d239ce
@@ -0,0 +1,18 @@
1
+ name: Merge gate
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [dev]
6
+ types: [labeled]
7
+
8
+ concurrency:
9
+ group: merge-gate-${{ github.event.pull_request.number }}
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ merge-gate:
16
+ uses: outernet-foundation/github-actions-toolkit/.github/workflows/merge-gate.yml@decae45a7f5044695cabf9a2ad2913dfe6d239ce
17
+ secrets:
18
+ merge-bot-private-key: ${{ secrets.MERGE_BOT_APP_PRIVATE_KEY }}
@@ -0,0 +1,32 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main, dev]
6
+
7
+ concurrency:
8
+ group: release-${{ github.ref }}
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ prerelease:
15
+ if: github.ref == 'refs/heads/dev'
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: write
19
+ id-token: write
20
+ steps:
21
+ - uses: outernet-foundation/github-actions-toolkit/.github/actions/release@decae45a7f5044695cabf9a2ad2913dfe6d239ce
22
+
23
+ release:
24
+ if: github.ref == 'refs/heads/main'
25
+ runs-on: ubuntu-latest
26
+ permissions:
27
+ contents: write
28
+ id-token: write
29
+ steps:
30
+ - uses: outernet-foundation/github-actions-toolkit/.github/actions/release@decae45a7f5044695cabf9a2ad2913dfe6d239ce
31
+ with:
32
+ stable: true
@@ -29,12 +29,12 @@ The package is `bashrun` (src-layout under `src/bashrun/`); consumer repos decla
29
29
 
30
30
  **`KeyboardInterrupt` handling is load-bearing, not incidental.** Each helper's `except KeyboardInterrupt` waits up to five seconds for the child to exit cleanly, then kills, then re-raises. Naive `subprocess.run` doesn't propagate Ctrl+C to a long-running child in a way that lets the child clean up; the wait-then-kill dance is why callers can trust that Ctrl+C in the parent actually reaches (and eventually terminates) the child.
31
31
 
32
- **Wheel must ship `py.typed`.** The package is typed and consumers expect strict-mode-friendly imports. A real hatch-built wheel omits non-Python files unless `[tool.hatch.build.targets.wheel] include` names them; drop the `py.typed` entry from `pyproject.toml` and downstream basedpyright/mypy silently treat the package as untyped.
32
+ **Wheel must ship `py.typed`.** The package is typed and consumers expect strict-mode-friendly imports; drop `py.typed` from the package and downstream basedpyright/mypy silently treat the package as untyped. Hatchling's `packages` selection ships every git-tracked file under the package directory, so `py.typed` rides along with no configuration — an explicit `include = ["src/bashrun/py.typed"]` entry is redundant, not a required allowlist.
33
33
 
34
34
  **The module-level `# ruff: noqa: S404, S603` in `bash.py` stays.** This package *is* the subprocess wrapper — importing and calling `subprocess` unsafely is its whole job. The suppression is the wrapper boundary (case 1 in the shared "fix warnings; suppress only under a wrapped or tracked exception" rule): every `subprocess` usage lives inside this one file, and the header declares it as the sanctioned suppression site so audits don't have to reason about each call individually.
35
35
 
36
36
  ## Release flow
37
37
 
38
- release-devkit's `AGENTS.md` owns the three-workflow contract; this repo follows it unchanged. Repo-specific facts: release-devkit is never a project dependency (bashrun sits inside its dependency graph; a project-level edge is a resolver cycle), and API-breaking changes ship with a manually bumped `major_minor` (patch-auto assumes additive changes).
38
+ github-actions-toolkit's `AGENTS.md` owns the workflow contract (integrate/merge-gate/release, all reusables and the release composite); this repo follows it unchanged — the workflows here contain no local jobs. Repo-specific facts: the toolkit is never a project dependency (bashrun sits inside its dependency graph; a project-level edge is a resolver cycle — the Python package/distribution keeps the historical `release_devkit` name, and the root config file stays `release-devkit.yaml`), and API-breaking changes ship with a manually bumped `major_minor` (patch-auto assumes additive changes).
39
39
 
40
- This repo cannot take python-devkit as a dependency (python-devkit runtime-depends on bashrun; uv's resolver rejects the name-shadowing as a self-dependency), so its own preflight consumes python-devkit through the `tools/devkit/` sidecar: a `package = false` project named `bashrun-devkit` that exact-pins `python-devkit` — the different root name lets the dependency resolve to PyPI inside the sidecar's isolated env with no shadowing. `--project` uses the sidecar env but leaves cwd at the repo root, so preflight's child `uv run` calls (sync, ruff, pytest, …) re-discover bashrun's real project and run in bashrun's `.venv`. The committed `tools/devkit/uv.lock` is the single version surface, checked with `uv lock --check --project tools/devkit`.
40
+ This repo cannot take python-devkit as a dependency (python-devkit runtime-depends on bashrun; uv's resolver rejects the name-shadowing as a self-dependency), so its own preflight consumes python-devkit through the `tools/devkit/` sidecar: a `package = false` project named `bashrun-devkit` flooring `python-devkit>=0.3.0.dev0` — the different root name lets the dependency resolve to PyPI inside the sidecar's isolated env with no shadowing. The toolkit's preflight reusable invokes `uv run --locked scripts/preflight.py`; that two-line script dogfoods bashrun to run `uv run --project tools/devkit --locked preflight-python`. `--project` uses the sidecar env but leaves cwd at the repo root, so preflight's child `uv run` calls (sync, ruff, pytest, …) re-discover bashrun's real project and run in bashrun's `.venv`. The committed `tools/devkit/uv.lock` is the single version surface, enforced by `--locked` on the sidecar invocation.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bashrun
3
- Version: 0.5.0.dev37378802238
3
+ Version: 0.6.0
4
4
  Summary: Guardrailed shell-exec helpers for Python
5
5
  License-File: LICENSE
6
6
  License-File: NOTICE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bashrun"
3
- version = "0.5.0.dev37378802238"
3
+ version = "0.6.0"
4
4
  description = "Guardrailed shell-exec helpers for Python"
5
5
  requires-python = ">=3.13"
6
6
  dependencies = []
@@ -14,7 +14,6 @@ build-backend = "hatchling.build"
14
14
 
15
15
  [tool.hatch.build.targets.wheel]
16
16
  packages = ["src/bashrun"]
17
- include = ["src/bashrun/py.typed"]
18
17
 
19
18
  [tool.basedpyright]
20
19
  venvPath = "."
@@ -0,0 +1,6 @@
1
+ packages:
2
+ bashrun:
3
+ path: .
4
+ major_minor: "0.6"
5
+ registry: pypi
6
+ identity: bashrun
@@ -0,0 +1,3 @@
1
+ from bashrun.bash import bash
2
+
3
+ bash("uv run --project tools/devkit --locked preflight-python")
@@ -43,6 +43,15 @@ def _merge_env(env: dict[str, str] | None) -> dict[str, str] | None:
43
43
  return {**os.environ, **env} if env else None
44
44
 
45
45
 
46
+ def _encode_stdin(stdin_text: str | None) -> bytes | None:
47
+ # Not text=True: that wraps stdin in a TextIOWrapper with newline=None, which rewrites every
48
+ # \n to os.linesep on write. On Windows the child then reads \r\n, and anything parsing
49
+ # line-oriented input sees a trailing \r on every record -- `git update-index --index-info`
50
+ # rejects all of them as invalid paths, for instance. Writing bytes sends exactly what the
51
+ # caller composed, on every platform.
52
+ return stdin_text.encode() if stdin_text is not None else None
53
+
54
+
46
55
  def bash_output(
47
56
  command: str, *, cwd: Path | None = None, stdin_text: str | None = None, env: dict[str, str] | None = None
48
57
  ) -> str:
@@ -56,10 +65,9 @@ def bash_output(
56
65
  stdout=subprocess.PIPE,
57
66
  stderr=subprocess.PIPE,
58
67
  stdin=subprocess.PIPE if stdin_text else None,
59
- text=True,
60
68
  ) as process:
61
69
  try:
62
- stdout, stderr = process.communicate(input=stdin_text)
70
+ raw_stdout, raw_stderr = process.communicate(input=_encode_stdin(stdin_text))
63
71
  except KeyboardInterrupt:
64
72
  try:
65
73
  process.wait(timeout=5)
@@ -67,12 +75,15 @@ def bash_output(
67
75
  process.kill()
68
76
  raise
69
77
 
78
+ stdout = raw_stdout.decode(errors="replace") if raw_stdout else ""
79
+ stderr = raw_stderr.decode(errors="replace") if raw_stderr else ""
80
+
70
81
  if process.returncode != 0:
71
82
  if stderr:
72
83
  print(stderr, file=sys.stderr, end="")
73
84
  raise CalledProcessError(process.returncode, command, output=stdout, stderr=stderr)
74
85
 
75
- return stdout or ""
86
+ return stdout
76
87
 
77
88
 
78
89
  def bash(
@@ -102,12 +113,11 @@ def bash(
102
113
  stdout=stdout,
103
114
  stderr=stderr,
104
115
  stdin=subprocess.PIPE if stdin_text else None,
105
- text=True,
106
116
  )
107
117
  )
108
118
 
109
119
  try:
110
- process.communicate(input=stdin_text)
120
+ process.communicate(input=_encode_stdin(stdin_text))
111
121
  except KeyboardInterrupt:
112
122
  try:
113
123
  process.wait(timeout=5)
@@ -2,7 +2,7 @@
2
2
  name = "bashrun-devkit"
3
3
  version = "0"
4
4
  requires-python = ">=3.13"
5
- dependencies = ["python-devkit==0.1.15"]
5
+ dependencies = ["python-devkit>=0.3.0.dev0"]
6
6
 
7
7
  [tool.uv]
8
8
  package = false
@@ -38,21 +38,7 @@ dependencies = [
38
38
  ]
39
39
 
40
40
  [package.metadata]
41
- requires-dist = [{ name = "python-devkit", specifier = "==0.1.15" }]
42
-
43
- [[package]]
44
- name = "ci-devkit"
45
- version = "0.1.13"
46
- source = { registry = "https://pypi.org/simple" }
47
- dependencies = [
48
- { name = "bashrun" },
49
- { name = "pydantic" },
50
- { name = "pydantic-settings" },
51
- ]
52
- sdist = { url = "https://files.pythonhosted.org/packages/0c/c3/4fa23868b52713a8ed871334fb12f3473cc9f8778d8c09ef5b57aa7f5ff0/ci_devkit-0.1.13.tar.gz", hash = "sha256:8b750c1f0b953bc045e206a5a39093f3cde824b2f3dfdc5d3810d55372c3da4f", size = 40536, upload-time = "2026-09-28T07:48:31.116Z" }
53
- wheels = [
54
- { url = "https://files.pythonhosted.org/packages/6a/9a/388cc8375cb2bab3c1cbb9d7d96eb5abb951a4b037aafbf3c88d4c02cae3/ci_devkit-0.1.13-py3-none-any.whl", hash = "sha256:7b08f1b21691e3855b7747e060e1bc6e441664386ba346093bd14bd5327cffdd", size = 25686, upload-time = "2026-09-28T07:48:30.104Z" },
55
- ]
41
+ requires-dist = [{ name = "python-devkit", specifier = ">=0.3.0.dev0" }]
56
42
 
57
43
  [[package]]
58
44
  name = "colorama"
@@ -155,20 +141,6 @@ wheels = [
155
141
  { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" },
156
142
  ]
157
143
 
158
- [[package]]
159
- name = "pydantic-settings"
160
- version = "2.15.0"
161
- source = { registry = "https://pypi.org/simple" }
162
- dependencies = [
163
- { name = "pydantic" },
164
- { name = "python-dotenv" },
165
- { name = "typing-inspection" },
166
- ]
167
- sdist = { url = "https://files.pythonhosted.org/packages/68/ca/31c57507b13119d7d3cfa1576dad2911a4861e3be07b579395f4e9d393f9/pydantic_settings-2.15.0.tar.gz", hash = "sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117", size = 261253, upload-time = "2026-08-07T09:24:57.419Z" }
168
- wheels = [
169
- { url = "https://files.pythonhosted.org/packages/30/a4/2bffa9f8e804325a09867f0e9d30795c80ea9f8d62560bd1b6ad6220eb2f/pydantic_settings-2.15.0-py3-none-any.whl", hash = "sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42", size = 69413, upload-time = "2026-08-07T09:24:55.839Z" },
170
- ]
171
-
172
144
  [[package]]
173
145
  name = "pygments"
174
146
  version = "2.21.0"
@@ -180,26 +152,16 @@ wheels = [
180
152
 
181
153
  [[package]]
182
154
  name = "python-devkit"
183
- version = "0.1.15"
155
+ version = "0.3.0.dev38096025533"
184
156
  source = { registry = "https://pypi.org/simple" }
185
157
  dependencies = [
186
158
  { name = "bashrun" },
187
- { name = "ci-devkit" },
188
159
  { name = "pydantic" },
189
160
  { name = "typer" },
190
161
  ]
191
- sdist = { url = "https://files.pythonhosted.org/packages/82/53/c3b37f69c35475b09cdf1c18deb193238d7ab5143ee6bc97e5c22c48fe87/python_devkit-0.1.15.tar.gz", hash = "sha256:ac1ef0f2a4622e9c97763f4e353005c41164e2d6d4b130cdb709e811947f253d", size = 34651, upload-time = "2026-09-30T04:12:18.88Z" }
192
- wheels = [
193
- { url = "https://files.pythonhosted.org/packages/b6/81/da4f76cbfccb5a4d5a58a9f51d3e2b7d40f6dc9edd931d7891b2789adeae/python_devkit-0.1.15-py3-none-any.whl", hash = "sha256:0c13684cc780e3ba9b3e25feed61065b355e8fc7436bee043e7c6adf71fa40e7", size = 14537, upload-time = "2026-09-30T04:12:17.918Z" },
194
- ]
195
-
196
- [[package]]
197
- name = "python-dotenv"
198
- version = "1.2.3"
199
- source = { registry = "https://pypi.org/simple" }
200
- sdist = { url = "https://files.pythonhosted.org/packages/6a/53/ed9d74092561d4b01a2ef1349d52cdbc135e526c245f366b089cfca6de49/python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35", size = 58945, upload-time = "2026-08-16T16:54:54.067Z" }
162
+ sdist = { url = "https://files.pythonhosted.org/packages/85/07/160d8d87f184c1f9a32e2dd64a413695d10dad275d1684f89728d28c543c/python_devkit-0.3.0.dev38096025533.tar.gz", hash = "sha256:94b6f3d63b9192ede7d4bff2a3fabcc714a202807e2a7468c0047920837bb657", size = 33112, upload-time = "2026-10-10T23:47:13.476Z" }
201
163
  wheels = [
202
- { url = "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9", size = 22780, upload-time = "2026-08-16T16:54:52.473Z" },
164
+ { url = "https://files.pythonhosted.org/packages/12/66/c87d7ab58ba1ded58dfb21fe0c9783231d7a67514fd335239bd95df58414/python_devkit-0.3.0.dev38096025533-py3-none-any.whl", hash = "sha256:605aeabb81770f6393e771518639512fd6a7c39b5a22554dfe747fd9de3a0205", size = 14633, upload-time = "2026-10-10T23:47:12.49Z" },
203
165
  ]
204
166
 
205
167
  [[package]]
@@ -1,11 +0,0 @@
1
- name: setup-release-devkit
2
- description: Install release-devkit at the pinned commit into RUNNER_TEMP
3
- runs:
4
- using: composite
5
- steps:
6
- - shell: bash
7
- env:
8
- RELEASE_DEVKIT_COMMIT: 029a9a6e26baef30ae90d8ffdefc706530f18521
9
- run: |
10
- git clone https://github.com/outernet-foundation/release-devkit.git "$RUNNER_TEMP/release-devkit"
11
- git -C "$RUNNER_TEMP/release-devkit" checkout "$RELEASE_DEVKIT_COMMIT"
@@ -1,57 +0,0 @@
1
- name: Integrate
2
-
3
- on:
4
- workflow_dispatch:
5
- pull_request:
6
- branches: [dev]
7
-
8
- concurrency:
9
- group: integrate-${{ github.ref }}
10
- cancel-in-progress: true
11
-
12
- permissions:
13
- contents: read
14
-
15
- jobs:
16
- lint-workflows:
17
- runs-on: ubuntu-latest
18
- steps:
19
- - &checkout
20
- uses: actions/checkout@v5
21
- with:
22
- ref: ${{ github.event.pull_request.head.sha }}
23
- persist-credentials: false
24
- - &uv-restore
25
- uses: astral-sh/setup-uv@v7
26
- with:
27
- enable-cache: true
28
- save-cache: "false"
29
- - &setup-release-devkit
30
- uses: ./.github/actions/setup-release-devkit
31
- - run: uv run --project "$RUNNER_TEMP/release-devkit" --locked --no-dev lint-workflows
32
-
33
- preflight:
34
- needs: [lint-workflows]
35
- runs-on: ubuntu-latest
36
- steps:
37
- - *checkout
38
- - uses: astral-sh/setup-uv@v7
39
- with:
40
- enable-cache: true
41
- save-cache: "true"
42
- - run: uv lock --check --project tools/devkit
43
- - run: uv run --project tools/devkit preflight-python
44
-
45
- validate-release-plan:
46
- runs-on: ubuntu-latest
47
- steps:
48
- - uses: actions/checkout@v5
49
- with:
50
- ref: ${{ github.event.pull_request.head.sha }}
51
- # Perform a full clone, required for tags
52
- fetch-depth: 0
53
- fetch-tags: true
54
- persist-credentials: false
55
- - *uv-restore
56
- - *setup-release-devkit
57
- - run: uv run --project "$RUNNER_TEMP/release-devkit" --locked --no-dev validate-release-plan
@@ -1,41 +0,0 @@
1
- name: Merge gate
2
-
3
- on:
4
- pull_request:
5
- branches: [dev]
6
- types: [labeled]
7
- workflow_run:
8
- workflows: [Integrate]
9
- types: [completed]
10
-
11
- concurrency:
12
- group: merge-gate-${{ github.event.pull_request.number || github.event.workflow_run.head_branch }}
13
-
14
- permissions:
15
- contents: read
16
-
17
- jobs:
18
- merge-gate:
19
- if: github.event.label.name == 'ready-to-merge' || (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
20
- runs-on: ubuntu-latest
21
- steps:
22
- - uses: actions/checkout@v5
23
- with:
24
- ref: ${{ github.event.pull_request.head.sha || github.event.workflow_run.head_sha }}
25
- # Perform a full clone, required so merge-gate can validate that this PR is a fast forward from dev
26
- fetch-depth: 0
27
- persist-credentials: false
28
- - uses: astral-sh/setup-uv@v7
29
- with:
30
- enable-cache: true
31
- save-cache: "false"
32
- - uses: ./.github/actions/setup-release-devkit
33
- - uses: actions/create-github-app-token@v3
34
- id: mint
35
- with:
36
- app-id: ${{ vars.MERGE_BOT_APP_ID }}
37
- private-key: ${{ secrets.MERGE_BOT_APP_PRIVATE_KEY }}
38
- - run: uv run --project "$RUNNER_TEMP/release-devkit" --locked --no-dev merge-gate
39
- env:
40
- GITHUB_TOKEN: ${{ steps.mint.outputs.token }}
41
- HEAD_SHA: ${{ github.event.pull_request.head.sha || github.event.workflow_run.head_sha }}
@@ -1,56 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- branches: [main, dev]
6
-
7
- concurrency:
8
- group: release-${{ github.ref }}
9
-
10
- permissions:
11
- contents: read
12
-
13
- jobs:
14
- prerelease:
15
- if: github.ref == 'refs/heads/dev'
16
- runs-on: ubuntu-latest
17
- permissions:
18
- contents: read
19
- id-token: write
20
- steps:
21
- - uses: actions/checkout@v5
22
- with:
23
- # Perform a full clone, required for tags
24
- fetch-depth: 0
25
- fetch-tags: true
26
- persist-credentials: false
27
- - &uv-restore
28
- uses: astral-sh/setup-uv@v7
29
- with:
30
- enable-cache: true
31
- save-cache: "false"
32
- - &setup-release-devkit
33
- uses: ./.github/actions/setup-release-devkit
34
- - run: uv run --project "$RUNNER_TEMP/release-devkit" --locked --no-dev prerelease
35
- env:
36
- GITHUB_TOKEN: ${{ github.token }}
37
-
38
- release:
39
- if: github.ref == 'refs/heads/main'
40
- runs-on: ubuntu-latest
41
- permissions:
42
- contents: write
43
- id-token: write
44
- steps:
45
- - uses: actions/checkout@v5
46
- with:
47
- # Perform a full clone, required for tags
48
- fetch-depth: 0
49
- fetch-tags: true
50
- # Persist credentials so that the release command can push release tags
51
- persist-credentials: true
52
- - *uv-restore
53
- - *setup-release-devkit
54
- - run: uv run --project "$RUNNER_TEMP/release-devkit" --locked --no-dev release
55
- env:
56
- GITHUB_TOKEN: ${{ github.token }}
@@ -1,7 +0,0 @@
1
- ci_workflow: release.yml
2
- packages:
3
- bashrun:
4
- path: .
5
- major_minor: "0.5"
6
- registries:
7
- pypi: bashrun
File without changes
File without changes
File without changes