repro-lambda 0.6.0__tar.gz → 0.6.1__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.
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.github/workflows/build.yml +24 -6
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.github/workflows/ci.yml +1 -1
- repro_lambda-0.6.1/.github/workflows/release.yml +85 -0
- repro_lambda-0.6.1/.release-please-manifest.json +3 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/CHANGELOG.md +7 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/PKG-INFO +1 -1
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/pyproject.toml +1 -1
- repro_lambda-0.6.1/release-please-config.json +26 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/__init__.py +1 -1
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/uv.lock +1 -1
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.github/workflows/move-major-tag.yml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.github/workflows/promote.yml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.github/workflows/publish.yml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.gitignore +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/.pre-commit-config.yaml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/LICENSE +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/README.md +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/SETUP.md +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/__main__.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/build.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/catalog.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/cli.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/docker_runner.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/git_guard.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/hasher.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/manifest.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/promote.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/s3_uploader.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/source_locker.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/source_stager.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/sources.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/verify.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/src/repro_lambda/zip_packager.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/__init__.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/conftest.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/handler/index.js +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/handler/package-lock.json +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/handler/package.json +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/lambdas.toml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_python_lambda/handler/app.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_python_lambda/handler/requirements.arm64.lock +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_python_lambda/handler/requirements.in +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_python_lambda/lambdas.toml +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_build_integration.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_build_nodejs.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_catalog.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_cli_build.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_cli_lock.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_cli_smoke.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_docker_runner.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_docker_runner_nodejs.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_e2e_nodejs_lambda.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_e2e_python_lambda.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_extra_files.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_git_guard.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_hasher.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_manifest.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_per_lambda_builder.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_promote.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_python_byte_compat_regression.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_s3_uploader.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_source_locker.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_source_stager.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_sources.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_sources_hash.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_sources_schema.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_verify.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_zip_excludes.py +0 -0
- {repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/test_zip_packager.py +0 -0
|
@@ -117,8 +117,10 @@ jobs:
|
|
|
117
117
|
|
|
118
118
|
# Render the dev build's content shas + a copy-paste promotion command per function
|
|
119
119
|
# into the run's Step Summary (the build JSON is otherwise buried in step logs).
|
|
120
|
+
# NB: the JSON lives in RUNNER_TEMP (outside the workspace), so hashFiles() can't guard
|
|
121
|
+
# it - run on success() and skip inside the script if the file is somehow absent.
|
|
120
122
|
- name: Build summary (content shas + promote commands)
|
|
121
|
-
if:
|
|
123
|
+
if: success()
|
|
122
124
|
env:
|
|
123
125
|
SUMMARY_JSON: ${{ runner.temp }}/build-summary.json
|
|
124
126
|
PROMOTION_REPO: ${{ inputs.promotion_repo }}
|
|
@@ -129,9 +131,13 @@ jobs:
|
|
|
129
131
|
SRC_COMMIT: ${{ github.sha }}
|
|
130
132
|
run: |
|
|
131
133
|
python3 - <<'PY'
|
|
132
|
-
import json, os
|
|
134
|
+
import json, os, sys
|
|
133
135
|
|
|
134
|
-
|
|
136
|
+
path = os.environ["SUMMARY_JSON"]
|
|
137
|
+
if not os.path.exists(path):
|
|
138
|
+
print(f"::notice::no build summary JSON at {path}; skipping summary.")
|
|
139
|
+
sys.exit(0)
|
|
140
|
+
rows = json.load(open(path))
|
|
135
141
|
repo = os.environ["PROMOTION_REPO"]
|
|
136
142
|
wf = os.environ["PROMOTION_WORKFLOW"]
|
|
137
143
|
project = os.environ["PROJECT"]
|
|
@@ -151,18 +157,30 @@ jobs:
|
|
|
151
157
|
out.append(
|
|
152
158
|
f"| `{r['logical_name']}` | {r['outcome']} | `{r['sha256']}` | `{r['bucket_key']}` |"
|
|
153
159
|
)
|
|
154
|
-
out += [
|
|
160
|
+
out += [
|
|
161
|
+
"",
|
|
162
|
+
"### Pipeline",
|
|
163
|
+
"",
|
|
164
|
+
"1. **Build** (this run) - artifacts uploaded to the dev bucket, keyed by content sha.",
|
|
165
|
+
"2. **Pin dev** - point the dev stack's lambda pin at the sha below, then apply dev and test.",
|
|
166
|
+
"3. **Promote to prod** - run the promote command below (copies dev -> prod by content"
|
|
167
|
+
" sha + opens the prod-pin PR), then apply prod.",
|
|
168
|
+
"",
|
|
169
|
+
"### Per-function",
|
|
170
|
+
"",
|
|
171
|
+
]
|
|
155
172
|
for r in rows:
|
|
156
173
|
fn, sha = r["logical_name"], r["sha256"]
|
|
157
|
-
out += [f"**`{fn}`**
|
|
174
|
+
out += [f"**`{fn}`** - content sha `{sha}`", "", f"- dev pin: `{fn} = \"{sha}\"`"]
|
|
158
175
|
if repo:
|
|
159
176
|
out += [
|
|
177
|
+
"- promote to prod:",
|
|
160
178
|
"```bash",
|
|
161
179
|
f"gh workflow run {wf} --repo {repo} "
|
|
162
180
|
f"-f project={project} -f function={fn} -f sha={sha}",
|
|
163
181
|
"```",
|
|
164
|
-
"",
|
|
165
182
|
]
|
|
183
|
+
out += [""]
|
|
166
184
|
|
|
167
185
|
with open(os.environ["GITHUB_STEP_SUMMARY"], "a") as f:
|
|
168
186
|
f.write("\n".join(out) + "\n")
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
# Automated releases via release-please. On every push to master, release-please
|
|
4
|
+
# maintains a "release PR" that bumps the version (pyproject.toml + __init__.py) and
|
|
5
|
+
# the CHANGELOG. Merging that PR creates the vX.Y.Z tag + GitHub Release, then this
|
|
6
|
+
# same run publishes to PyPI (OIDC) and force-moves the sliding v0 major tag.
|
|
7
|
+
#
|
|
8
|
+
# Why publish here instead of relying on publish.yml's tag trigger: release-please
|
|
9
|
+
# creates the tag via the GitHub API using GITHUB_TOKEN, and a GITHUB_TOKEN-created
|
|
10
|
+
# tag does NOT trigger other workflows. So the publish + major-tag steps run as
|
|
11
|
+
# release_created-gated jobs in this workflow. publish.yml / move-major-tag.yml stay
|
|
12
|
+
# as the manual-tag fallback (a human can still `git tag vX.Y.Z && git push`).
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
push:
|
|
16
|
+
branches: [master]
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
permissions: {}
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
release-please:
|
|
23
|
+
runs-on: ubuntu-24.04
|
|
24
|
+
permissions:
|
|
25
|
+
contents: write # create the release commit, tag, and GitHub Release
|
|
26
|
+
pull-requests: write # open/update the release PR
|
|
27
|
+
issues: write # manage the autorelease:* labels
|
|
28
|
+
outputs:
|
|
29
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
30
|
+
tag_name: ${{ steps.release.outputs.tag_name }}
|
|
31
|
+
steps:
|
|
32
|
+
- uses: googleapis/release-please-action@v5
|
|
33
|
+
id: release
|
|
34
|
+
with:
|
|
35
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
36
|
+
target-branch: master
|
|
37
|
+
config-file: release-please-config.json
|
|
38
|
+
manifest-file: .release-please-manifest.json
|
|
39
|
+
|
|
40
|
+
publish:
|
|
41
|
+
needs: release-please
|
|
42
|
+
if: ${{ needs.release-please.outputs.release_created == 'true' }}
|
|
43
|
+
runs-on: ubuntu-24.04
|
|
44
|
+
permissions:
|
|
45
|
+
id-token: write # PyPI OIDC Trusted Publishing
|
|
46
|
+
contents: read
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@v7
|
|
49
|
+
- uses: astral-sh/setup-uv@v8.2.0
|
|
50
|
+
- run: uv sync --all-extras
|
|
51
|
+
- name: Verify tag matches package version
|
|
52
|
+
env:
|
|
53
|
+
TAG_NAME: ${{ needs.release-please.outputs.tag_name }}
|
|
54
|
+
run: |
|
|
55
|
+
TAG="${TAG_NAME#v}"
|
|
56
|
+
PKG=$(uv run python -c "import repro_lambda; print(repro_lambda.__version__)")
|
|
57
|
+
if [[ "$TAG" != "$PKG" ]]; then
|
|
58
|
+
echo "tag $TAG != package version $PKG" >&2
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
- name: Build sdist + wheel
|
|
62
|
+
run: uv build
|
|
63
|
+
- name: Publish to PyPI
|
|
64
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
65
|
+
with:
|
|
66
|
+
packages-dir: dist/
|
|
67
|
+
|
|
68
|
+
major-tag:
|
|
69
|
+
needs: release-please
|
|
70
|
+
if: ${{ needs.release-please.outputs.release_created == 'true' }}
|
|
71
|
+
runs-on: ubuntu-24.04
|
|
72
|
+
permissions:
|
|
73
|
+
contents: write
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v7
|
|
76
|
+
with:
|
|
77
|
+
fetch-depth: 0
|
|
78
|
+
fetch-tags: true
|
|
79
|
+
- name: Force-move sliding major tag
|
|
80
|
+
env:
|
|
81
|
+
TAG: ${{ needs.release-please.outputs.tag_name }}
|
|
82
|
+
run: |
|
|
83
|
+
MAJOR="${TAG%%.*}" # v0.4.1 -> v0
|
|
84
|
+
git tag -f "$MAJOR" "$TAG"
|
|
85
|
+
git push -f origin "refs/tags/$MAJOR"
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.1](https://github.com/antonbabenko/repro-lambda/compare/v0.6.0...v0.6.1) (2026-06-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **ci:** render the build Step Summary (hashFiles cannot guard a RUNNER_TEMP file) ([#5](https://github.com/antonbabenko/repro-lambda/issues/5)) ([4fadb30](https://github.com/antonbabenko/repro-lambda/commit/4fadb307136f4dffd8c7e6bf5303d79f1a641f5a))
|
|
9
|
+
|
|
3
10
|
## v0.5.2 - 2026-06-21
|
|
4
11
|
|
|
5
12
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: repro-lambda
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1
|
|
4
4
|
Summary: Build reproducible AWS Lambda packages outside Terraform, optimized for terraform-aws-lambda by serverless.tf.
|
|
5
5
|
Project-URL: Homepage, https://github.com/antonbabenko/repro-lambda
|
|
6
6
|
Project-URL: Repository, https://github.com/antonbabenko/repro-lambda
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
|
|
3
|
+
"packages": {
|
|
4
|
+
".": {
|
|
5
|
+
"release-type": "python",
|
|
6
|
+
"package-name": "repro-lambda",
|
|
7
|
+
"include-component-in-tag": false,
|
|
8
|
+
"bump-minor-pre-major": true,
|
|
9
|
+
"bump-patch-for-minor-pre-major": false,
|
|
10
|
+
"changelog-path": "CHANGELOG.md",
|
|
11
|
+
"extra-files": [
|
|
12
|
+
"src/repro_lambda/__init__.py"
|
|
13
|
+
],
|
|
14
|
+
"changelog-sections": [
|
|
15
|
+
{ "type": "feat", "section": "Features" },
|
|
16
|
+
{ "type": "fix", "section": "Bug Fixes" },
|
|
17
|
+
{ "type": "perf", "section": "Performance Improvements" },
|
|
18
|
+
{ "type": "refactor", "section": "Code Refactoring" },
|
|
19
|
+
{ "type": "docs", "section": "Documentation" },
|
|
20
|
+
{ "type": "test", "section": "Tests", "hidden": true },
|
|
21
|
+
{ "type": "chore", "section": "Miscellaneous", "hidden": true },
|
|
22
|
+
{ "type": "ci", "section": "Continuous Integration", "hidden": true }
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/handler/index.js
RENAMED
|
File without changes
|
|
File without changes
|
{repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_nodejs_lambda/handler/package.json
RENAMED
|
File without changes
|
|
File without changes
|
{repro_lambda-0.6.0 → repro_lambda-0.6.1}/tests/fixtures/sample_python_lambda/handler/app.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|