aws-annoying 0.8.2__tar.gz → 0.8.4__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 (141) hide show
  1. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/devcontainer.json +0 -1
  2. aws_annoying-0.8.4/.github/workflows/devcf_ci.yaml +101 -0
  3. aws_annoying-0.8.4/.github/workflows/devcf_release.yaml +46 -0
  4. aws_annoying-0.8.2/.github/workflows/ci.yaml → aws_annoying-0.8.4/.github/workflows/main_ci.yaml +5 -5
  5. aws_annoying-0.8.4/.github/workflows/main_docs.yaml +41 -0
  6. aws_annoying-0.8.2/.github/workflows/prepare-release.yaml → aws_annoying-0.8.4/.github/workflows/main_prepare-release.yaml +2 -2
  7. aws_annoying-0.8.2/.github/workflows/release.yaml → aws_annoying-0.8.4/.github/workflows/main_release.yaml +4 -4
  8. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.pre-commit-config.yaml +8 -21
  9. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.vscode/extensions.json +0 -1
  10. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.vscode/settings.json +3 -1
  11. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/Makefile +5 -0
  12. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/PKG-INFO +6 -37
  13. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/README.md +2 -33
  14. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/app.py +1 -1
  15. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/ecs/task_definition_lifecycle.py +15 -1
  16. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/ecs/wait_for_deployment.py +36 -1
  17. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/mfa/configure.py +21 -1
  18. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/port_forward.py +8 -1
  19. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/start.py +5 -1
  20. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/session_manager/session_manager.py +1 -1
  21. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/variable_loader.py +0 -1
  22. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/console/ecs-exec/ecs-exec.user.js +1 -1
  23. aws_annoying-0.8.4/devcontainer-features/src/session-manager-plugin/README.md +20 -0
  24. aws_annoying-0.8.4/devcontainer-features/src/session-manager-plugin/devcontainer-feature.json +6 -0
  25. aws_annoying-0.8.4/devcontainer-features/src/session-manager-plugin/install.sh +30 -0
  26. aws_annoying-0.8.4/devcontainer-features/test/_global/scenarios.json +1 -0
  27. aws_annoying-0.8.4/devcontainer-features/test/session-manager-plugin/scenarios.json +1 -0
  28. aws_annoying-0.8.4/devcontainer-features/test/session-manager-plugin/test.sh +10 -0
  29. aws_annoying-0.8.4/docs/cli-references/ecs.md +11 -0
  30. aws_annoying-0.8.4/docs/cli-references/mfa.md +5 -0
  31. aws_annoying-0.8.4/docs/cli-references/misc.md +5 -0
  32. aws_annoying-0.8.4/docs/cli-references/session-manager.md +23 -0
  33. aws_annoying-0.8.4/docs/index.md +1 -0
  34. aws_annoying-0.8.4/mkdocs.yaml +38 -0
  35. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/pyproject.toml +13 -13
  36. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/uv.lock +691 -166
  37. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/.env.example +0 -0
  38. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/Dockerfile +0 -0
  39. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/docker-compose.devcontainer.yaml +0 -0
  40. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/onCreateCommand.sh +0 -0
  41. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.devcontainer/postAttachCommand.sh +0 -0
  42. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.editorconfig +0 -0
  43. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.gitattributes +0 -0
  44. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.github/dependabot.yaml +0 -0
  45. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.gitignore +0 -0
  46. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.python-version +0 -0
  47. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/.vscode/launch.json +0 -0
  48. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/LICENSE +0 -0
  49. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/__init__.py +0 -0
  50. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/__init__.py +0 -0
  51. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/ecs/__init__.py +0 -0
  52. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/ecs/_app.py +0 -0
  53. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/load_variables.py +0 -0
  54. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/logging_handler.py +0 -0
  55. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/main.py +0 -0
  56. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/mfa/__init__.py +0 -0
  57. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/mfa/_app.py +0 -0
  58. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/__init__.py +0 -0
  59. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/_app.py +0 -0
  60. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/_common.py +0 -0
  61. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/install.py +0 -0
  62. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/cli/session_manager/stop.py +0 -0
  63. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/ecs/__init__.py +0 -0
  64. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/ecs/check.py +0 -0
  65. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/ecs/common.py +0 -0
  66. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/ecs/errors.py +0 -0
  67. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/ecs/wait_for.py +0 -0
  68. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/mfa_config.py +0 -0
  69. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/session_manager/__init__.py +0 -0
  70. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/session_manager/errors.py +0 -0
  71. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/session_manager/shortcuts.py +0 -0
  72. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/__init__.py +0 -0
  73. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/debugger.py +0 -0
  74. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/downloader.py +0 -0
  75. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/ec2.py +0 -0
  76. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/platform.py +0 -0
  77. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/aws_annoying/utils/timeout.py +0 -0
  78. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/console/ecs-exec/README.md +0 -0
  79. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/console/ecs-exec/ecs-console.png +0 -0
  80. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/console/ecs-exec/session-manager.png +0 -0
  81. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/examples/dbeaver/README.md +0 -0
  82. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/examples/dbeaver/after-disconnect.png +0 -0
  83. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/examples/dbeaver/before-connect.png +0 -0
  84. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/examples/dbeaver/new-connection.png +0 -0
  85. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/examples/dbeaver/test-connection.png +0 -0
  86. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/__init__.py +0 -0
  87. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/_helpers.py +0 -0
  88. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/__init__.py +0 -0
  89. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/__init__.py +0 -0
  90. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/boto3.py +0 -0
  91. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/command_builder.py +0 -0
  92. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/invoke.py +0 -0
  93. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/scripts/printenv.py +0 -0
  94. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/_helpers/string_.py +0 -0
  95. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/__init__.py +0 -0
  96. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/snapshots/test_task_definition_lifecycle/test_basic/stdout.txt +0 -0
  97. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/snapshots/test_task_definition_lifecycle/test_delete/stdout.txt +0 -0
  98. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/snapshots/test_task_definition_lifecycle/test_dry_run/stdout.txt +0 -0
  99. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/test_task_definition_lifecycle.py +0 -0
  100. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/ecs/test_wait_for_deployment.py +0 -0
  101. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/__init__.py +0 -0
  102. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_basic/persist/aws_config.ini +0 -0
  103. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_basic/persist/stdout.txt +0 -0
  104. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_basic/skip_persist/stdout.txt +0 -0
  105. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_dry_run/stdout.txt +0 -0
  106. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_load_existing_config/aws_config.ini +0 -0
  107. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/snapshots/test_configure/test_load_existing_config/stdout.txt +0 -0
  108. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/mfa/test_configure.py +0 -0
  109. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/session_manager/__init__.py +0 -0
  110. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/session_manager/test_install.py +0 -0
  111. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/session_manager/test_port_forward.py +0 -0
  112. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/session_manager/test_start.py +0 -0
  113. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/session_manager/test_stop.py +0 -0
  114. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_basic/stdout.txt +0 -0
  115. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_env_prefix/stdout.txt +0 -0
  116. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_nothing/stdout.txt +0 -0
  117. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_overwrite_env/stdout.txt +0 -0
  118. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_replace_quiet/stdout.txt +0 -0
  119. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_resource_not_found/ssm/stdout.txt +0 -0
  120. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/snapshots/test_load_variables/test_unsupported_resource/stdout.txt +0 -0
  121. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/test_app.py +0 -0
  122. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/test_load_variables.py +0 -0
  123. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/test_logging_handler.py +0 -0
  124. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/cli/test_main.py +0 -0
  125. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/conftest.py +0 -0
  126. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/ecs/__init__.py +0 -0
  127. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/ecs/test_check.py +0 -0
  128. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/ecs/test_common.py +0 -0
  129. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/ecs/test_errors.py +0 -0
  130. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/ecs/test_wait_for.py +0 -0
  131. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/session_manager/__init__.py +0 -0
  132. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/session_manager/test_errors.py +0 -0
  133. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/session_manager/test_session_manager.py +0 -0
  134. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/session_manager/test_shortcuts.py +0 -0
  135. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/test_mfa_config.py +0 -0
  136. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/test_variable_loader.py +0 -0
  137. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/utils/__init__.py +0 -0
  138. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/utils/test_downloader.py +0 -0
  139. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/utils/test_ec2.py +0 -0
  140. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/utils/test_platform.py +0 -0
  141. {aws_annoying-0.8.2 → aws_annoying-0.8.4}/tests/utils/test_timeout.py +0 -0
@@ -23,7 +23,6 @@
23
23
  "tamasfe.even-better-toml",
24
24
  "streetsidesoftware.code-spell-checker",
25
25
  "EditorConfig.EditorConfig",
26
- "VisualStudioExptTeam.vscodeintellicode",
27
26
  "charliermarsh.ruff",
28
27
  "ms-python.mypy-type-checker",
29
28
  "njpwerner.autodocstring",
@@ -0,0 +1,101 @@
1
+ name: Dev Container Features - CI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ tags: [v*]
7
+ paths:
8
+ - devcontainer-features/**
9
+
10
+ pull_request:
11
+ paths:
12
+ - devcontainer-features/**
13
+
14
+ jobs:
15
+ validate:
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 5
18
+ permissions:
19
+ contents: read
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ - uses: devcontainers/action@v1
23
+ with:
24
+ validate-only: true
25
+ base-path-to-features: ./devcontainer-features/src
26
+
27
+ test-autogenerated:
28
+ runs-on: ubuntu-latest
29
+ timeout-minutes: 10
30
+ permissions:
31
+ contents: read
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ base-image:
36
+ - debian:latest
37
+ features:
38
+ - session-manager-plugin
39
+ steps:
40
+ - uses: actions/checkout@v6
41
+
42
+ - name: Install Dev Containers CLI
43
+ run: npm install --global @devcontainers/cli
44
+
45
+ - name: Run autogenerated tests
46
+ run: |
47
+ devcontainer features test \
48
+ --skip-scenarios \
49
+ --features '${{ matrix.features }}' \
50
+ --base-image '${{ matrix.base-image }}' \
51
+ ./devcontainer-features
52
+
53
+ test-scenarios:
54
+ runs-on: ubuntu-latest
55
+ timeout-minutes: 10
56
+ permissions:
57
+ contents: read
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ base-image:
62
+ - debian:latest
63
+ features:
64
+ - session-manager-plugin
65
+ steps:
66
+ - uses: actions/checkout@v6
67
+
68
+ - name: Install Dev Containers CLI
69
+ run: npm install --global @devcontainers/cli
70
+
71
+ - name: Run scenario tests
72
+ run: |
73
+ devcontainer features test \
74
+ --skip-autogenerated \
75
+ --skip-duplicated \
76
+ --features '${{ matrix.features }}' \
77
+ --base-image '${{ matrix.base-image }}' \
78
+ ./devcontainer-features
79
+
80
+ test-global:
81
+ runs-on: ubuntu-latest
82
+ timeout-minutes: 10
83
+ permissions:
84
+ contents: read
85
+ strategy:
86
+ fail-fast: false
87
+ matrix:
88
+ base-image:
89
+ - debian:latest
90
+ steps:
91
+ - uses: actions/checkout@v6
92
+
93
+ - name: Install Dev Containers CLI
94
+ run: npm install --global @devcontainers/cli
95
+
96
+ - name: Run global tests
97
+ run: |
98
+ devcontainer features test \
99
+ --global-scenarios-only \
100
+ --base-image '${{ matrix.base-image }}' \
101
+ ./devcontainer-features
@@ -0,0 +1,46 @@
1
+ name: Dev Container Features - Release & Docs
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ # Every time when push changes to target directory, it will trigger release
7
+ # but the CLI won't overwrite existing published features unless the version is updated
8
+ push:
9
+ branches: [main]
10
+ paths:
11
+ - devcontainer-features/**
12
+
13
+ jobs:
14
+ release:
15
+ if: ${{ (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') || github.event_name == 'push' }}
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 10
18
+ permissions:
19
+ contents: write
20
+ pull-requests: write
21
+ packages: write
22
+ steps:
23
+ - uses: actions/checkout@v6
24
+ - uses: devcontainers/action@v1
25
+ env:
26
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27
+ with:
28
+ publish-features: true
29
+ base-path-to-features: ./devcontainer-features/src
30
+ generate-docs: true
31
+
32
+ - name: Generate GitHub App token
33
+ uses: actions/create-github-app-token@v2
34
+ id: generate-token
35
+ with:
36
+ app-id: ${{ vars.GH_APP_ID }}
37
+ private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
38
+
39
+ - name: Create PR for generated docs
40
+ uses: peter-evans/create-pull-request@v8.1.0
41
+ with:
42
+ token: ${{ steps.generate-token.outputs.token }}
43
+ sign-commits: true
44
+ title: Automated documentation update
45
+ branch: automated-documentation-update-${{ github.run_id }}
46
+ delete-branch: true
@@ -16,7 +16,7 @@ jobs:
16
16
  permissions:
17
17
  contents: read
18
18
  steps:
19
- - uses: actions/checkout@v5
19
+ - uses: actions/checkout@v6
20
20
  - uses: astral-sh/setup-uv@v7
21
21
  with:
22
22
  version: latest
@@ -46,7 +46,7 @@ jobs:
46
46
  python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
47
47
 
48
48
  steps:
49
- - uses: actions/checkout@v5
49
+ - uses: actions/checkout@v6
50
50
  - uses: astral-sh/setup-uv@v7
51
51
  with:
52
52
  version: latest
@@ -77,10 +77,10 @@ jobs:
77
77
  run: |
78
78
  Get-Command session-manager-plugin | Out-String -Width 2000
79
79
 
80
- $uri = 'https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe'
81
- $outFile = 'C:\Windows\Temp\SessionManagerPluginSetup.exe'
80
+ $uri = 'https://raw.githubusercontent.com/aws/session-manager-plugin/refs/heads/mainline/Tools/src/update/windows/uninstall.bat'
81
+ $outFile = 'C:\Windows\Temp\uninstall.bat'
82
82
  Invoke-WebRequest -Uri "$uri" -OutFile "$outFile"
83
- & "$outFile" /uninstall /quiet
83
+ & "$outFile"
84
84
 
85
85
  uv run pytest -m 'not docker'
86
86
 
@@ -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 }}"
@@ -22,7 +22,7 @@ jobs:
22
22
  exit 1
23
23
  fi
24
24
 
25
- - uses: actions/checkout@v5
25
+ - uses: actions/checkout@v6
26
26
  - uses: astral-sh/setup-uv@v7
27
27
  with:
28
28
  version: latest
@@ -42,7 +42,7 @@ jobs:
42
42
  private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
43
43
 
44
44
  - name: Create pull request
45
- uses: peter-evans/create-pull-request@v7.0.8
45
+ uses: peter-evans/create-pull-request@v8.1.0
46
46
  with:
47
47
  token: ${{ steps.generate-token.outputs.token }}
48
48
  sign-commits: true
@@ -14,7 +14,7 @@ jobs:
14
14
  permissions:
15
15
  contents: write
16
16
  steps:
17
- - uses: actions/checkout@v5
17
+ - uses: actions/checkout@v6
18
18
  - uses: astral-sh/setup-uv@v7
19
19
  with:
20
20
  version: latest
@@ -27,7 +27,7 @@ jobs:
27
27
  run: uv build
28
28
 
29
29
  - name: Create release
30
- uses: softprops/action-gh-release@v2.4.1
30
+ uses: softprops/action-gh-release@v2.5.0
31
31
  with:
32
32
  tag_name: ${{ github.event.release.tag_name }}
33
33
  generate_release_notes: true
@@ -37,7 +37,7 @@ jobs:
37
37
  run: ls -l --all --recursive dist
38
38
 
39
39
  - name: Upload release distributions
40
- uses: actions/upload-artifact@v5
40
+ uses: actions/upload-artifact@v6
41
41
  with:
42
42
  name: release-dists
43
43
  path: dist/
@@ -51,7 +51,7 @@ jobs:
51
51
  id-token: write
52
52
  steps:
53
53
  - name: Download release distributions
54
- uses: actions/download-artifact@v6
54
+ uses: actions/download-artifact@v7
55
55
  with:
56
56
  name: release-dists
57
57
  path: dist/
@@ -8,30 +8,17 @@ repos:
8
8
  - id: trailing-whitespace
9
9
  - id: end-of-file-fixer
10
10
 
11
- - repo: https://github.com/lasuillard/pre-commit-hooks
12
- rev: v0.4.1
11
+ - repo: https://github.com/lasuillard-s/devobs
12
+ rev: v0.2.1
13
13
  hooks:
14
- - id: source-matching-test
14
+ - id: check-file-pair
15
15
  args:
16
- - --source
17
- - aws_annoying
16
+ - --from=pulumi_extra
17
+ - --to=tests
18
+ - --include=*.py
19
+ - --exclude=utils/debugger.py,_*.py
20
+ - --expect={to}/{relative_from}/test_{filename}
18
21
  - --create-if-not-exists
19
- - --extend-exclude
20
- - utils/debugger.py
21
- - --extend-exclude
22
- - "**/_*.py"
23
- - id: test-matching-source
24
- args:
25
- - --target
26
- - aws_annoying
27
- - --extend-exclude
28
- - "**/conftest.py"
29
- - --extend-exclude
30
- - "**/_*/**/*.py"
31
- - --extend-exclude
32
- - "**/_*.py"
33
- - id: preferred-suffix
34
- args: [--rename]
35
22
 
36
23
  - repo: local
37
24
  hooks:
@@ -4,7 +4,6 @@
4
4
  "ms-python.vscode-pylance",
5
5
  "streetsidesoftware.code-spell-checker",
6
6
  "editorconfig.editorconfig",
7
- "visualstudioexptteam.vscodeintellicode",
8
7
  "charliermarsh.ruff",
9
8
  "ms-python.mypy-type-checker",
10
9
  "ms-python.debugpy"
@@ -9,10 +9,12 @@
9
9
  "cSpell.words": [
10
10
  "Deregistering",
11
11
  "localstack",
12
+ "pydantic",
12
13
  "pytestmark",
13
14
  "sessionmanagerplugin",
14
15
  "Stubber",
15
- "Tampermonkey"
16
+ "Tampermonkey",
17
+ "Typer"
16
18
  ],
17
19
  "editor.formatOnSave": true,
18
20
  "files.eol": "\n",
@@ -28,6 +28,11 @@ update: ## Update deps and tools
28
28
  pre-commit autoupdate
29
29
  .PHONY: update
30
30
 
31
+ serve-docs: ## Serve documentation with live reload
32
+ uv run mkdocs serve \
33
+ --dev-addr "$$([ -n "$${CONTAINER:-}" ] && echo '0.0.0.0:8000' || echo '127.0.0.1:8000')"
34
+ .PHONY: serve-docs
35
+
31
36
 
32
37
  # =============================================================================
33
38
  # CI
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-annoying
3
- Version: 0.8.2
3
+ Version: 0.8.4
4
4
  Summary: Utils to handle some annoying AWS tasks.
5
- Project-URL: Homepage, https://github.com/lasuillard/aws-annoying
6
- Project-URL: Repository, https://github.com/lasuillard/aws-annoying.git
7
- Project-URL: Issues, https://github.com/lasuillard/aws-annoying/issues
5
+ Project-URL: Homepage, https://github.com/lasuillard-s/aws-annoying
6
+ Project-URL: Repository, https://github.com/lasuillard-s/aws-annoying.git
7
+ Project-URL: Issues, https://github.com/lasuillard-s/aws-annoying/issues
8
8
  Author-email: Yuchan Lee <lasuillard@gmail.com>
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
@@ -33,6 +33,7 @@ Major directories of the project:
33
33
  - **aws_annoying** Python package containing CLI and utility functions.
34
34
  - **console** Utilities to help working with AWS Console.
35
35
  - **examples** Examples of how to use the package.
36
+ - **devcontainer-features** Devcontainer features to help set up development environment.
36
37
 
37
38
  ## 🚀 Installation
38
39
 
@@ -51,39 +52,7 @@ As the package also provides some utility functions, you can install `aws-annoyi
51
52
 
52
53
  ## 💡 Usage
53
54
 
54
- Below are brief explanation of available commands. For more detailed information about commands, please refer to the CLI help.
55
-
56
- ### `ecs task-definition-lifecycle`
57
-
58
- Expire and delete ECS task definitions based on criteria.
59
-
60
- ### `ecs wait-for-deployment`
61
-
62
- Wait for ECS deployment to start, complete or fail, and stabilize.
63
-
64
- ### `load-variables`
65
-
66
- Wrapper command to run command with variables from various AWS resources (SSM Parameter Store, Secrets Manager, etc.) injected as environment variables.
67
-
68
- ### `mfa configure`
69
-
70
- Configure AWS profile or refresh session for MFA.
71
-
72
- ### `session-manager install`
73
-
74
- Install AWS Session Manager plugin.
75
-
76
- ### `session-manager port-forward`
77
-
78
- Start a port forwarding session using AWS Session Manager.
79
-
80
- ### `session-manager start`
81
-
82
- Start new session via Session Manager.
83
-
84
- ### `session-manager stop`
85
-
86
- Stop running port forwarding session for PID file.
55
+ Refer to the CLI help or documentation for detailed information on how to use each command.
87
56
 
88
57
  ## 💖 Contributing
89
58
 
@@ -15,6 +15,7 @@ Major directories of the project:
15
15
  - **aws_annoying** Python package containing CLI and utility functions.
16
16
  - **console** Utilities to help working with AWS Console.
17
17
  - **examples** Examples of how to use the package.
18
+ - **devcontainer-features** Devcontainer features to help set up development environment.
18
19
 
19
20
  ## 🚀 Installation
20
21
 
@@ -33,39 +34,7 @@ As the package also provides some utility functions, you can install `aws-annoyi
33
34
 
34
35
  ## 💡 Usage
35
36
 
36
- Below are brief explanation of available commands. For more detailed information about commands, please refer to the CLI help.
37
-
38
- ### `ecs task-definition-lifecycle`
39
-
40
- Expire and delete ECS task definitions based on criteria.
41
-
42
- ### `ecs wait-for-deployment`
43
-
44
- Wait for ECS deployment to start, complete or fail, and stabilize.
45
-
46
- ### `load-variables`
47
-
48
- Wrapper command to run command with variables from various AWS resources (SSM Parameter Store, Secrets Manager, etc.) injected as environment variables.
49
-
50
- ### `mfa configure`
51
-
52
- Configure AWS profile or refresh session for MFA.
53
-
54
- ### `session-manager install`
55
-
56
- Install AWS Session Manager plugin.
57
-
58
- ### `session-manager port-forward`
59
-
60
- Start a port forwarding session using AWS Session Manager.
61
-
62
- ### `session-manager start`
63
-
64
- Start new session via Session Manager.
65
-
66
- ### `session-manager stop`
67
-
68
- Stop running port forwarding session for PID file.
37
+ Refer to the CLI help or documentation for detailed information on how to use each command.
69
38
 
70
39
  ## 💖 Contributing
71
40
 
@@ -21,7 +21,7 @@ app = typer.Typer(
21
21
  )
22
22
 
23
23
 
24
- def show_version(value: Optional[bool]) -> None:
24
+ def show_version(value: Optional[bool]) -> None: # noqa: FBT001
25
25
  """Show the version of the application."""
26
26
  if not value:
27
27
  return
@@ -38,7 +38,21 @@ def task_definition_lifecycle(
38
38
  help="Delete the task definition after deregistering it.",
39
39
  ),
40
40
  ) -> None:
41
- """Execute ECS task definition lifecycle."""
41
+ r"""Expire and delete ECS task definitions.
42
+
43
+ Expire and delete ECS task definitions for a given family, keeping revisions adhering to
44
+ the given constraint. You can use this command to clean up old task definitions that are no
45
+ longer needed.
46
+
47
+ Example usage:
48
+
49
+ ```shell
50
+ aws-annoying ecs task-definition-lifecycle \
51
+ --family <task-definition-family> \
52
+ --keep-latest 5 \
53
+ --delete
54
+ ```
55
+ """
42
56
  dry_run = ctx.meta["dry_run"]
43
57
  ecs = boto3.client("ecs")
44
58
 
@@ -69,7 +69,42 @@ def wait_for_deployment( # noqa: PLR0913
69
69
  help="Whether to wait for the service to be stable after the deployment.",
70
70
  ),
71
71
  ) -> None:
72
- """Wait for ECS deployment to complete."""
72
+ r"""Wait for ECS deployment for a specific service to start, complete and stabilize.
73
+
74
+ It's designed to be used after triggering a deployment (e.g., updating service, deploying new task definition),
75
+ in conjunction with CI/CD pipelines or deployment scripts.
76
+
77
+ Below is an example of using this command in GitHub Actions workflow:
78
+
79
+ ```yaml
80
+ ...
81
+
82
+ - name: Deploy to ECS service
83
+ id: deploy-ecs
84
+ uses: aws-actions/amazon-ecs-deploy-task-definition@v2
85
+ with:
86
+ task-definition: ${{ steps.render-task-definition.outputs.task-definition }}
87
+ cluster: ${{ vars.AWS_ECS_CLUSTER }}
88
+ service: ${{ vars.AWS_ECS_SERVICE }}
89
+ wait-for-service-stability: false
90
+
91
+ - name: Wait for deployment complete
92
+ run: |
93
+ pipx run aws-annoying \
94
+ --verbose \
95
+ ecs wait-for-deployment \
96
+ --cluster '${{ vars.AWS_ECS_CLUSTER }}' \
97
+ --service '${{ vars.AWS_ECS_SERVICE }}' \
98
+ --wait-for-start \
99
+ --wait-for-stability \
100
+ --timeout-seconds 600 \
101
+ --expected-task-definition '${{ steps.deploy-ecs.outputs.task-definition-arn }}'
102
+
103
+ ...
104
+ ```
105
+
106
+ `--wait-for-start` is necessary because there could be no deployment right after the deploy action.
107
+ """
73
108
  start = datetime.now(tz=timezone.utc)
74
109
  try:
75
110
  with Timeout(timeout_seconds):
@@ -54,7 +54,27 @@ def configure( # noqa: PLR0913
54
54
  help="Persist the MFA configuration.",
55
55
  ),
56
56
  ) -> None:
57
- """Configure AWS profile for MFA."""
57
+ r"""Configure AWS profile for MFA.
58
+
59
+ This command retrieves temporary MFA credentials using the provided source profile (`--mfa-source-profile`)
60
+ and MFA token code then updates the specified AWS profile with these credentials.
61
+
62
+ You can configure it interactively, by omitting the options, or provide them directly via command-line options.
63
+
64
+ ```shell
65
+ aws-annoying mfa configure
66
+ ```
67
+
68
+ If you want to use MFA as primary authentication method for an AWS profile, you can configure
69
+ it to save the credentials to the default profile.
70
+
71
+ ```shell
72
+ aws configure --profile mfa
73
+ aws-annoying mfa configure \
74
+ --mfa-profile default \
75
+ --mfa-source-profile mfa
76
+ ```
77
+ """
58
78
  dry_run = ctx.meta["dry_run"]
59
79
 
60
80
  # Expand user home directory
@@ -59,7 +59,14 @@ def port_forward( # noqa: PLR0913
59
59
  help="The path to the log file to store the output of the session manager plugin.",
60
60
  ),
61
61
  ) -> None:
62
- """Start a port forwarding session using AWS Session Manager."""
62
+ """Start a port forwarding session using AWS Session Manager.
63
+
64
+ This command allows starting a port forwarding session through an EC2 instance identified by its name or ID.
65
+ If there are more than one instance with the same name, the first one found will be used.
66
+
67
+ Also, it manages a PID file to keep track of the session manager plugin process running in background,
68
+ allowing to terminate any existing process before starting a new one.
69
+ """
63
70
  dry_run = ctx.meta["dry_run"]
64
71
  session_manager = SessionManager()
65
72
 
@@ -30,7 +30,11 @@ def start(
30
30
  help="The reason for starting the session.",
31
31
  ),
32
32
  ) -> None:
33
- """Start new session."""
33
+ """Start new session to your instance.
34
+
35
+ You can use your EC2 instance identified by its name or ID. If there are
36
+ more than one instance with the same name, the first one found will be used.
37
+ """
34
38
  dry_run = ctx.meta["dry_run"]
35
39
  session_manager = SessionManager()
36
40
 
@@ -265,7 +265,7 @@ class SessionManager:
265
265
  Returns:
266
266
  The command to start the session.
267
267
  """
268
- is_installed, binary_path, version = self.verify_installation()
268
+ is_installed, binary_path, _version = self.verify_installation()
269
269
  if not is_installed:
270
270
  msg = "Session Manager plugin is not installed."
271
271
  raise PluginNotInstalledError(msg)
@@ -1,4 +1,3 @@
1
- # flake8: noqa: B008
2
1
  from __future__ import annotations
3
2
 
4
3
  import json
@@ -4,7 +4,7 @@
4
4
  // @version 2025.04.16
5
5
  // @description Add link to AWS SSM Session Manager for ECS container
6
6
  // @author lasuillard
7
- // @source https://raw.githubusercontent.com/lasuillard/aws-annoying/refs/heads/main/console/ecs-exec/ecs-exec.user.js
7
+ // @source https://raw.githubusercontent.com/lasuillard-s/aws-annoying/refs/heads/main/console/ecs-exec/ecs-exec.user.js
8
8
  // @match https://*.console.aws.amazon.com/ecs/v2/*
9
9
  // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
10
10
  // @grant GM_log
@@ -0,0 +1,20 @@
1
+
2
+ # AWS SSM Session Manager Plugin (session-manager-plugin)
3
+
4
+ Install AWS SSM Session Manager plugin.
5
+
6
+ ## Example Usage
7
+
8
+ ```json
9
+ "features": {
10
+ "ghcr.io/lasuillard-s/aws-annoying/session-manager-plugin:0": {}
11
+ }
12
+ ```
13
+
14
+
15
+
16
+
17
+
18
+ ---
19
+
20
+ _Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/lasuillard-s/aws-annoying/blob/main/devcontainer-features/src/session-manager-plugin/devcontainer-feature.json). Add additional notes to a `NOTES.md`._
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "AWS SSM Session Manager Plugin",
3
+ "id": "session-manager-plugin",
4
+ "version": "0.1.1",
5
+ "description": "Install AWS SSM Session Manager plugin."
6
+ }