pulumi-extra 0.1.4__tar.gz → 0.1.6__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 (76) hide show
  1. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.devcontainer/devcontainer.json +1 -2
  2. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.github/workflows/ci.yaml +10 -13
  3. pulumi_extra-0.1.6/.github/workflows/docs.yaml +41 -0
  4. pulumi_extra-0.1.6/.github/workflows/prepare-release.yaml +51 -0
  5. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.github/workflows/release.yaml +21 -16
  6. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.pre-commit-config.yaml +9 -14
  7. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.vscode/extensions.json +0 -1
  8. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/Makefile +0 -4
  9. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/PKG-INFO +1 -1
  10. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/mkdocs.yaml +4 -0
  11. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pyproject.toml +2 -6
  12. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/test_output.py +1 -1
  13. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/test_resource_.py +1 -1
  14. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/test_stack_reference.py +2 -2
  15. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/uv.lock +197 -153
  16. pulumi_extra-0.1.4/.github/workflows/docs.yaml +0 -51
  17. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.devcontainer/Dockerfile +0 -0
  18. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.devcontainer/docker-compose.devcontainer.yaml +0 -0
  19. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.devcontainer/onCreateCommand.sh +0 -0
  20. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.devcontainer/postAttachCommand.sh +0 -0
  21. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.editorconfig +0 -0
  22. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.gitattributes +0 -0
  23. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.github/dependabot.yaml +0 -0
  24. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.gitignore +0 -0
  25. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.python-version +0 -0
  26. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/.vscode/settings.json +0 -0
  27. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/LICENSE +0 -0
  28. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/README.md +0 -0
  29. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/docs/api-references/contrib/aws.md +0 -0
  30. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/docs/api-references/contrib/gcp.md +0 -0
  31. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/docs/api-references/index.md +0 -0
  32. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/docs/index.md +0 -0
  33. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/noxfile.py +0 -0
  34. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/__init__.py +0 -0
  35. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/__init__.py +0 -0
  36. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/__init__.py +0 -0
  37. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/autotag.py +0 -0
  38. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/common.py +0 -0
  39. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/policies/__init__.py +0 -0
  40. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/policies/require_description.py +0 -0
  41. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/aws/policies/require_tags.py +0 -0
  42. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/__init__.py +0 -0
  43. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/autolabel.py +0 -0
  44. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/common.py +0 -0
  45. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/policies/__init__.py +0 -0
  46. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/policies/require_description.py +0 -0
  47. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/contrib/gcp/policies/require_labels.py +0 -0
  48. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/errors.py +0 -0
  49. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/output.py +0 -0
  50. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/py.typed +0 -0
  51. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/resource_.py +0 -0
  52. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/stack_reference.py +0 -0
  53. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/transforms/__init__.py +0 -0
  54. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/transforms/invoke.py +0 -0
  55. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/transforms/resource_.py +0 -0
  56. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/pulumi_extra/transforms/runtime.py +0 -0
  57. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/__init__.py +0 -0
  58. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/_helpers.py +0 -0
  59. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/conftest.py +0 -0
  60. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/__init__.py +0 -0
  61. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/__init__.py +0 -0
  62. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/policies/__init__.py +0 -0
  63. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/policies/test_require_description.py +0 -0
  64. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/policies/test_require_tags.py +0 -0
  65. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/test_autotag.py +0 -0
  66. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/aws/test_common.py +0 -0
  67. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/__init__.py +0 -0
  68. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/policies/__init__.py +0 -0
  69. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/policies/test_require_description.py +0 -0
  70. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/policies/test_require_labels.py +0 -0
  71. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/test_autolabel.py +0 -0
  72. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/contrib/gcp/test_common.py +0 -0
  73. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/transforms/__init__.py +0 -0
  74. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/transforms/test_invoke.py +0 -0
  75. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/transforms/test_resource_.py +0 -0
  76. {pulumi_extra-0.1.4 → pulumi_extra-0.1.6}/tests/transforms/test_runtime.py +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "lasuillard/pulumi-extra",
2
+ "name": "lasuillard-s/pulumi-extra",
3
3
  "dockerComposeFile": [
4
4
  "./docker-compose.devcontainer.yaml"
5
5
  ],
@@ -25,7 +25,6 @@
25
25
  "tamasfe.even-better-toml",
26
26
  "streetsidesoftware.code-spell-checker",
27
27
  "EditorConfig.EditorConfig",
28
- "VisualStudioExptTeam.vscodeintellicode",
29
28
  "charliermarsh.ruff",
30
29
  "ms-python.mypy-type-checker",
31
30
  "njpwerner.autodocstring",
@@ -11,14 +11,13 @@ env:
11
11
 
12
12
  jobs:
13
13
  lint:
14
- name: Lint
15
14
  runs-on: ubuntu-latest
15
+ timeout-minutes: 10
16
+ permissions:
17
+ contents: read
16
18
  steps:
17
- - name: Checkout
18
- uses: actions/checkout@v5
19
-
20
- - name: Set up uv
21
- uses: astral-sh/setup-uv@v6
19
+ - uses: actions/checkout@v6
20
+ - uses: astral-sh/setup-uv@v7
22
21
  with:
23
22
  version: latest
24
23
  enable-cache: true
@@ -27,7 +26,7 @@ jobs:
27
26
  run: uv sync
28
27
 
29
28
  - name: Toolchain caching
30
- uses: actions/cache@v4
29
+ uses: actions/cache@v5
31
30
  with:
32
31
  path: |
33
32
  .mypy_cache
@@ -43,8 +42,9 @@ jobs:
43
42
  if: always()
44
43
 
45
44
  test:
46
- name: Test (Python ${{ matrix.python-version }})
45
+ name: test (py${{ matrix.python-version }})
47
46
  runs-on: ubuntu-latest
47
+ timeout-minutes: 15
48
48
  permissions:
49
49
  contents: read
50
50
  id-token: write
@@ -54,11 +54,8 @@ jobs:
54
54
  python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
55
55
 
56
56
  steps:
57
- - name: Checkout
58
- uses: actions/checkout@v5
59
-
60
- - name: Set up uv
61
- uses: astral-sh/setup-uv@v6
57
+ - uses: actions/checkout@v6
58
+ - uses: astral-sh/setup-uv@v7
62
59
  with:
63
60
  version: latest
64
61
  enable-cache: true
@@ -0,0 +1,41 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: [v*]
7
+
8
+ concurrency:
9
+ group: docs
10
+ cancel-in-progress: false
11
+
12
+ env:
13
+ UV_FROZEN: 1
14
+
15
+ jobs:
16
+ docs:
17
+ runs-on: ubuntu-latest
18
+ timeout-minutes: 10
19
+ permissions:
20
+ contents: write
21
+ steps:
22
+ - uses: actions/checkout@v6
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - uses: astral-sh/setup-uv@v7
27
+ with:
28
+ version: latest
29
+ enable-cache: true
30
+
31
+ - name: Install deps
32
+ run: uv sync
33
+
34
+ - name: Configure Git user
35
+ run: |
36
+ git config --local user.email "github-actions[bot]@github.com"
37
+ git config --local user.name "GitHub Action"
38
+
39
+ - name: Build docs
40
+ run: |
41
+ uv run mike deploy --push "${{ github.ref_name }}"
@@ -0,0 +1,51 @@
1
+ name: Prepare Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ tag:
7
+ description: Semver-style tag for release (e.g., v1.0.0)
8
+ required: true
9
+
10
+ jobs:
11
+ create-pr:
12
+ runs-on: ubuntu-latest
13
+ timeout-minutes: 5
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+ steps:
18
+ - name: Check tag format
19
+ run: |
20
+ if [[ ! "${{ inputs.tag }}" =~ ^v ]]; then
21
+ echo "Tag must start with 'v'"
22
+ exit 1
23
+ fi
24
+
25
+ - uses: actions/checkout@v6
26
+ - uses: astral-sh/setup-uv@v7
27
+ with:
28
+ version: latest
29
+ enable-cache: true
30
+
31
+ - name: Set version
32
+ run: |
33
+ tag="${{ inputs.tag }}"
34
+ tag_no_v="${tag#v}"
35
+ uv version "${tag#v}"
36
+
37
+ - name: Generate GitHub App token
38
+ uses: actions/create-github-app-token@v2
39
+ id: generate-token
40
+ with:
41
+ app-id: ${{ vars.GH_APP_ID }}
42
+ private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
43
+
44
+ - name: Create pull request
45
+ uses: peter-evans/create-pull-request@v8.1.0
46
+ with:
47
+ token: ${{ steps.generate-token.outputs.token }}
48
+ sign-commits: true
49
+ title: Release ${{ inputs.tag }}
50
+ branch: release/${{ inputs.tag }}
51
+ delete-branch: true
@@ -1,24 +1,21 @@
1
1
  name: Release
2
2
 
3
3
  on:
4
- push:
5
- tags: [v*]
4
+ release:
5
+ types: [published]
6
6
 
7
7
  env:
8
8
  UV_FROZEN: 1
9
9
 
10
10
  jobs:
11
11
  release:
12
- name: Release
13
12
  runs-on: ubuntu-latest
13
+ timeout-minutes: 5
14
14
  permissions:
15
15
  contents: write
16
16
  steps:
17
- - name: Checkout
18
- uses: actions/checkout@v5
19
-
20
- - name: Set up uv
21
- uses: astral-sh/setup-uv@v6
17
+ - uses: actions/checkout@v6
18
+ - uses: astral-sh/setup-uv@v7
22
19
  with:
23
20
  version: latest
24
21
  enable-cache: true
@@ -30,31 +27,39 @@ jobs:
30
27
  run: uv build
31
28
 
32
29
  - name: Create release
33
- uses: softprops/action-gh-release@v2
30
+ uses: softprops/action-gh-release@v2.5.0
34
31
  with:
32
+ tag_name: ${{ github.event.release.tag_name }}
35
33
  generate_release_notes: true
36
34
  files: dist/*
37
35
 
36
+ - name: Show files
37
+ run: ls -l --all --recursive dist
38
+
38
39
  - name: Upload release distributions
39
- uses: actions/upload-artifact@v4
40
+ uses: actions/upload-artifact@v6
40
41
  with:
41
42
  name: release-dists
42
43
  path: dist/
43
44
 
44
45
  publish-pypi:
45
- name: Publish to PyPI
46
+ needs: release
46
47
  runs-on: ubuntu-latest
47
- needs:
48
- - release
48
+ environment: pypi
49
+ timeout-minutes: 5
49
50
  permissions:
50
51
  id-token: write
51
- environment: pypi
52
52
  steps:
53
- - name: Retrieve release distributions
54
- uses: actions/download-artifact@v5
53
+ - name: Download release distributions
54
+ uses: actions/download-artifact@v7
55
55
  with:
56
56
  name: release-dists
57
57
  path: dist/
58
58
 
59
+ - name: Show artifacts
60
+ run: ls -l --all --recursive dist
61
+
59
62
  - name: Publish release distributions to PyPI
60
63
  uses: pypa/gh-action-pypi-publish@release/v1
64
+ with:
65
+ skip-existing: true
@@ -2,27 +2,22 @@ default_stages: [pre-commit]
2
2
  fail_fast: true
3
3
  repos:
4
4
  - repo: https://github.com/pre-commit/pre-commit-hooks
5
- rev: v5.0.0
5
+ rev: v6.0.0
6
6
  hooks:
7
7
  - id: trailing-whitespace
8
8
  - id: end-of-file-fixer
9
9
 
10
- - repo: https://github.com/lasuillard/pre-commit-hooks
11
- rev: v0.4.1
10
+ - repo: https://github.com/lasuillard-s/devobs
11
+ rev: v0.2.1
12
12
  hooks:
13
- - id: source-matching-test
13
+ - id: check-file-pair
14
14
  args:
15
- - --source
16
- - pulumi_extra
15
+ - --from=pulumi_extra
16
+ - --to=tests
17
+ - --include=*.py
18
+ - --exclude=errors.py,_*.py
19
+ - --expect={to}/{relative_from}/test_{filename}
17
20
  - --create-if-not-exists
18
- - --extend-exclude
19
- - "**/errors.py"
20
- - id: test-matching-source
21
- args:
22
- - --target
23
- - pulumi_extra
24
- - id: preferred-suffix
25
- args: [--rename]
26
21
 
27
22
  - repo: local
28
23
  hooks:
@@ -7,7 +7,6 @@
7
7
  "tamasfe.even-better-toml",
8
8
  "streetsidesoftware.code-spell-checker",
9
9
  "EditorConfig.EditorConfig",
10
- "VisualStudioExptTeam.vscodeintellicode",
11
10
  "charliermarsh.ruff",
12
11
  "ms-python.mypy-type-checker",
13
12
  "njpwerner.autodocstring",
@@ -55,10 +55,6 @@ test: ## Run tests
55
55
  uv run coverage html
56
56
  .PHONY: test
57
57
 
58
- docs: ## Build documentation
59
- uv run mkdocs build
60
- .PHONY: docs
61
-
62
58
 
63
59
  # =============================================================================
64
60
  # Handy Scripts
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulumi-extra
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: Extra Pulumi utils and resources.
5
5
  Project-URL: Homepage, https://github.com/lasuillard-s/pulumi-extra
6
6
  Project-URL: Repository, https://github.com/lasuillard-s/pulumi-extra.git
@@ -14,6 +14,7 @@ plugins:
14
14
  filters:
15
15
  - "!^_[^_]"
16
16
  - search
17
+ - mike
17
18
  nav:
18
19
  - Introduction: index.md
19
20
  - API References:
@@ -32,3 +33,6 @@ markdown_extensions:
32
33
  - pymdownx.inlinehilite
33
34
  - pymdownx.snippets
34
35
  - pymdownx.superfences
36
+ extra:
37
+ version:
38
+ provider: mike
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "pulumi-extra"
3
3
  description = "Extra Pulumi utils and resources."
4
- version = "0.1.4"
4
+ version = "0.1.6"
5
5
  authors = [{ name = "Yuchan Lee", email = "lasuillard@gmail.com" }]
6
6
  readme = "README.md"
7
7
  license = "MIT"
@@ -15,13 +15,12 @@ gcp = ["pulumi-gcp>=8"]
15
15
 
16
16
  [dependency-groups]
17
17
  dev = [
18
+ "mike>=2.1.3",
18
19
  "mkdocs>=1.6.1",
19
20
  "mkdocs-material>=9.6.22",
20
21
  "mkdocstrings[python]>=0.30.1",
21
22
  "mypy~=1.11",
22
23
  "ruff~=0.6",
23
- ]
24
- test = [
25
24
  "coverage~=7.3",
26
25
  "pytest-cov>=5,<7",
27
26
  "pytest-sugar~=1.0",
@@ -41,9 +40,6 @@ Issues = "https://github.com/lasuillard-s/pulumi-extra/issues"
41
40
  requires = ["hatchling"]
42
41
  build-backend = "hatchling.build"
43
42
 
44
- [tool.uv]
45
- default-groups = ["dev", "test"]
46
-
47
43
  [tool.hatch.build.targets.wheel]
48
44
  packages = ["pulumi_extra"]
49
45
 
@@ -68,7 +68,7 @@ class Test__render_template:
68
68
  # ...
69
69
 
70
70
  # Act & Assert
71
- with pytest.raises(ValueError, match="Either context or input must be provided."):
71
+ with pytest.raises(ValueError, match=r"Either context or input must be provided."):
72
72
  render_template( # type: ignore[call-overload]
73
73
  "docker run --detach {{ image }} {{ command }}",
74
74
  context={"don't-care": "yes"},
@@ -24,7 +24,7 @@ class Test__resource_has_attribute:
24
24
  # Act & Assert
25
25
  with pytest.raises(
26
26
  UnknownResourceTypeError,
27
- match="Unable to resolve resource type 'random:unknown/unknown:Unknown'",
27
+ match=r"Unable to resolve resource type 'random:unknown/unknown:Unknown'",
28
28
  ):
29
29
  resource_has_attribute("random:unknown/unknown:Unknown", "whatever")
30
30
 
@@ -52,7 +52,7 @@ class Test__get_stack_reference:
52
52
  # ...
53
53
 
54
54
  # Act & Assert
55
- with pytest.raises(ValueError, match="Invalid stack reference: 'organization/project/dev/extra'"):
55
+ with pytest.raises(ValueError, match=r"Invalid stack reference: 'organization/project/dev/extra'"):
56
56
  get_stack_reference("organization/project/dev/extra")
57
57
 
58
58
 
@@ -84,7 +84,7 @@ class Test__get_stack_outputs:
84
84
  # ...
85
85
 
86
86
  # Act & Assert
87
- with pytest.raises(ValueError, match="Invalid output reference: ':output'"):
87
+ with pytest.raises(ValueError, match=r"Invalid output reference: ':output'"):
88
88
  get_stack_outputs(":output")
89
89
 
90
90