autopkg-wrapper 2024.8.1__tar.gz → 2025.8.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.
Files changed (35) hide show
  1. autopkg_wrapper-2025.8.1/.github/dependabot.yml +29 -0
  2. autopkg_wrapper-2025.8.1/.github/workflows/build-publish.yml +206 -0
  3. autopkg_wrapper-2025.8.1/.github/workflows/codeql.yml +40 -0
  4. autopkg_wrapper-2025.8.1/.github/workflows/dependency-review.yml +17 -0
  5. autopkg_wrapper-2025.8.1/.gitignore +8 -0
  6. autopkg_wrapper-2025.8.1/.pre-commit-config.yaml +35 -0
  7. autopkg_wrapper-2025.8.1/.tool-versions +1 -0
  8. autopkg_wrapper-2025.8.1/CONTRIBUTING +1 -0
  9. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/PKG-INFO +13 -18
  10. autopkg_wrapper-2025.8.1/actions-demo/.github/workflows/autopkg-wrapper-demo.yml +194 -0
  11. autopkg_wrapper-2025.8.1/actions-demo/overrides/Google_Chrome.pkg.recipe.yaml +22 -0
  12. autopkg_wrapper-2025.8.1/actions-demo/repo_list.txt +2 -0
  13. autopkg_wrapper-2025.8.1/actions-demo/requirements.txt +3 -0
  14. autopkg_wrapper-2025.8.1/autopkg_wrapper/__init__.py +0 -0
  15. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/autopkg_wrapper/autopkg_wrapper.py +13 -5
  16. autopkg_wrapper-2025.8.1/autopkg_wrapper/notifier/__init__.py +0 -0
  17. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/autopkg_wrapper/notifier/slack.py +1 -1
  18. autopkg_wrapper-2025.8.1/autopkg_wrapper/utils/__init__.py +0 -0
  19. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/autopkg_wrapper/utils/args.py +6 -1
  20. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/autopkg_wrapper/utils/git_functions.py +53 -2
  21. autopkg_wrapper-2025.8.1/pyproject.toml +32 -0
  22. autopkg_wrapper-2025.8.1/tests/__init__.py +0 -0
  23. autopkg_wrapper-2025.8.1/tests/prefs.json +13 -0
  24. autopkg_wrapper-2025.8.1/tests/prefs.plist +23 -0
  25. autopkg_wrapper-2025.8.1/tests/recipe_list.json +5 -0
  26. autopkg_wrapper-2025.8.1/tests/recipe_list.txt +3 -0
  27. autopkg_wrapper-2025.8.1/tests/recipe_list.yaml +3 -0
  28. autopkg_wrapper-2025.8.1/uv.lock +279 -0
  29. autopkg_wrapper-2024.8.1/autopkg_wrapper/__init__.py +0 -1
  30. autopkg_wrapper-2024.8.1/autopkg_wrapper/notifier/__init__.py +0 -1
  31. autopkg_wrapper-2024.8.1/autopkg_wrapper/utils/__init__.py +0 -1
  32. autopkg_wrapper-2024.8.1/pyproject.toml +0 -28
  33. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/LICENSE +0 -0
  34. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/README.md +0 -0
  35. {autopkg_wrapper-2024.8.1 → autopkg_wrapper-2025.8.1}/autopkg_wrapper/utils/logging.py +0 -0
@@ -0,0 +1,29 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: 'github-actions'
9
+ directory: '/'
10
+ schedule:
11
+ interval: 'daily'
12
+ groups:
13
+ github-actions:
14
+ patterns:
15
+ - '*'
16
+ update-types:
17
+ - 'minor'
18
+ - 'patch'
19
+ - package-ecosystem: 'pip'
20
+ directory: '/'
21
+ schedule:
22
+ interval: 'weekly'
23
+ groups:
24
+ pip:
25
+ patterns:
26
+ - '*'
27
+ update-types:
28
+ - 'minor'
29
+ - 'patch'
@@ -0,0 +1,206 @@
1
+ name: Build & Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ dry_run:
7
+ type: boolean
8
+ description: Run in dry_run mode
9
+ default: true
10
+
11
+ push:
12
+ branches: [main]
13
+ paths:
14
+ - 'autopkg_wrapper/**'
15
+ - 'uv.lock'
16
+ - 'pyproject.toml'
17
+
18
+ pull_request:
19
+ branches: [main]
20
+ types: [opened, reopened, synchronize, edited]
21
+ paths:
22
+ - 'autopkg_wrapper/**'
23
+ - 'uv.lock'
24
+ - 'pyproject.toml'
25
+
26
+ jobs:
27
+ release:
28
+ name: Create GitHub Release
29
+ runs-on: ubuntu-latest
30
+ outputs:
31
+ dry_run: ${{ steps.check-inputs.outputs.dry_run}}
32
+ version: ${{ steps.format-version.outputs.version}}
33
+ permissions:
34
+ contents: write
35
+
36
+ steps:
37
+ # - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
38
+ - id: check-inputs
39
+ env:
40
+ INPUT_DRY_RUN: ${{ github.event.inputs.dry_run }}
41
+ run: |
42
+ echo "dry_run=${INPUT_DRY_RUN:-false}" >> "$GITHUB_OUTPUT"
43
+
44
+ - name: Generate build number
45
+ id: generate-build
46
+ uses: onyxmueller/build-tag-number@4a0c81c9af350d967032d49204c83c38e6b0c8e4 # v1.0.3
47
+ if: github.ref_name != 'main'
48
+ with:
49
+ token: ${{ secrets.github_token }}
50
+
51
+ - name: Generate Next Version
52
+ uses: reecetech/version-increment@a29aa752dc3b8118a2dc2ed93faf0e95a73a9c7e # 2024.10.1
53
+ id: version-increment
54
+ with:
55
+ scheme: calver
56
+ use_api: true
57
+ pep440: true
58
+
59
+ - name: Format Version Number
60
+ id: format-version
61
+ env:
62
+ GITHUB_SHA: ${{ github.sha }}
63
+ GITHUB_BRANCH: ${{ github.ref_name }}
64
+ BUILD: ${{ steps.generate-build.outputs.build_number }}
65
+ MAJOR: ${{ steps.version-increment.outputs.major-version }}
66
+ MINOR: ${{ steps.version-increment.outputs.minor-version }}
67
+ PATCH: ${{ steps.version-increment.outputs.patch-version }}
68
+ run: |
69
+ if [[ "$GITHUB_BRANCH" == "main" ]]; then
70
+ VERSION="${MAJOR}.${MINOR}.${PATCH}"
71
+ else
72
+ VERSION="${MAJOR}.${MINOR}.${PATCH}-${BUILD}"
73
+ fi
74
+
75
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
76
+
77
+ - name: Create GitHub Release
78
+ env:
79
+ GITHUB_TOKEN: ${{ github.token }}
80
+ GITHUB_REPO: ${{ github.repository }}
81
+ GITHUB_BRANCH: ${{ github.ref_name }}
82
+ RELEASE_VERSION: ${{ steps.format-version.outputs.version }}
83
+ if: steps.check-inputs.outputs.dry_run == 'false'
84
+ run: |
85
+ GH_RELEASE_FLAGS=(
86
+ "$RELEASE_VERSION"
87
+ --repo "$GITHUB_REPO"
88
+ --generate-notes
89
+ )
90
+
91
+ if [[ "$GITHUB_BRANCH" == "main" ]]; then
92
+ GH_RELEASE_FLAGS+=(--latest)
93
+ else
94
+ GH_RELEASE_FLAGS+=(--prerelease)
95
+ fi
96
+
97
+ gh release create "${GH_RELEASE_FLAGS[@]}"
98
+
99
+ build:
100
+ name: Build Package 📦
101
+ runs-on: ubuntu-latest
102
+ needs: [release]
103
+ permissions:
104
+ id-token: write
105
+
106
+ steps:
107
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
108
+
109
+ - name: Setup UV
110
+ uses: astral-sh/setup-uv@d9e0f98d3fc6adb07d1e3d37f3043649ddad06a1 # v6.5.0
111
+ with:
112
+ activate-environment: true
113
+ enable-cache: true
114
+ cache-dependency-glob: uv.lock
115
+
116
+ - name: Setup Python
117
+ uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
118
+ with:
119
+ python-version-file: pyproject.toml
120
+
121
+ - name: Build Package with UV
122
+ run: |
123
+ uv version ${{ needs.release.outputs.version }}
124
+ uv build
125
+ - name: Upload Package Artifacts
126
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
127
+ with:
128
+ name: python-package-distributions
129
+ path: dist/
130
+
131
+ deploy_test:
132
+ name: Deploy Package to TestPyPI 🚀
133
+ runs-on: ubuntu-latest
134
+ needs: [build]
135
+ environment:
136
+ name: testpypi
137
+ url: https://test.pypi.org/p/autopkg-wrapper
138
+ permissions:
139
+ id-token: write
140
+
141
+ if: github.ref_name != 'main'
142
+
143
+ steps:
144
+ - name: Download Package Artifacts
145
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
146
+ with:
147
+ name: python-package-distributions
148
+ path: dist/
149
+ - name: Publish to TestPyPI
150
+ uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
151
+ with:
152
+ repository-url: https://test.pypi.org/legacy/
153
+ skip-existing: true
154
+
155
+ deploy_prod:
156
+ name: Deploy Package to PyPI 🚀
157
+ runs-on: ubuntu-latest
158
+ needs: [release, build]
159
+ environment:
160
+ name: pypi
161
+ url: https://pypi.org/p/autopkg-wrapper
162
+ permissions:
163
+ id-token: write
164
+
165
+ if: github.ref_name == 'main' && needs.release.outputs.dry_run == 'false'
166
+
167
+ steps:
168
+ - name: Download Package Artifacts
169
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
170
+ with:
171
+ name: python-package-distributions
172
+ path: dist/
173
+ - name: Publish to PyPI
174
+ uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
175
+
176
+ update_release:
177
+ name: Upload Assets to GitHub Release
178
+ runs-on: ubuntu-latest
179
+ needs: [release, build]
180
+ permissions:
181
+ id-token: write
182
+ contents: write
183
+
184
+ if: needs.release.outputs.dry_run == 'false'
185
+
186
+ steps:
187
+ - name: Download Package Artifacts
188
+ uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
189
+ with:
190
+ name: python-package-distributions
191
+ path: dist/
192
+ - uses: sigstore/gh-action-sigstore-python@f7ad0af51a5648d09a20d00370f0a91c3bdf8f84 # v3.0.1
193
+ with:
194
+ inputs: |
195
+ dist/*.whl
196
+ dist/*.tar.gz
197
+ - name: Upload artifact signatures to GitHub Release
198
+ env:
199
+ GITHUB_TOKEN: ${{ github.token }}
200
+ GITHUB_REPO: ${{ github.repository }}
201
+ GITHUB_BRANCH: ${{ github.ref_name }}
202
+ RELEASE_VERSION: ${{ needs.release.outputs.version }}
203
+ run: >-
204
+ gh release upload
205
+ "$RELEASE_VERSION" dist/**
206
+ --repo "$GITHUB_REPO"
@@ -0,0 +1,40 @@
1
+ name: "CodeQL Analysis"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths-ignore:
7
+ - '.github/workflows/**'
8
+ pull_request:
9
+ branches: [main]
10
+ paths-ignore:
11
+ - '.github/workflows/**'
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ analyze:
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 360
18
+ permissions:
19
+ actions: read
20
+ contents: read
21
+ security-events: write
22
+
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ language: [ 'python' ]
27
+
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
31
+
32
+ - name: Initialize CodeQL
33
+ uses: github/codeql-action/init@382a50a0284c0de445104889a9d6003acb4b3c1d # v2.15.4
34
+ with:
35
+ languages: ${{ matrix.language }}
36
+
37
+ - name: Perform CodeQL Analysis
38
+ uses: github/codeql-action/analyze@382a50a0284c0de445104889a9d6003acb4b3c1d # v2.15.4
39
+ with:
40
+ category: "/language:${{matrix.language}}"
@@ -0,0 +1,17 @@
1
+ name: "Dependency Review"
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ dependency-review:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: "Checkout Repository"
14
+ uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
15
+
16
+ - name: "Dependency Review"
17
+ uses: actions/dependency-review-action@bc41886e18ea39df68b1b1245f4184881938e050 # v4.7.2
@@ -0,0 +1,8 @@
1
+ .venv/
2
+ __pycache__/
3
+ .ruff_cache/
4
+ dist/
5
+
6
+ .DS_Store
7
+ .envrc
8
+ tmp*
@@ -0,0 +1,35 @@
1
+ # .pre-commit-config.yaml
2
+ default_stages: [pre-commit]
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v6.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-yaml
10
+ - id: check-added-large-files
11
+ - id: detect-private-key
12
+ # - repo: https://github.com/gitleaks/gitleaks
13
+ # rev: v8.27.0
14
+ # hooks:
15
+ # - id: gitleaks
16
+ - repo: https://github.com/astral-sh/ruff-pre-commit
17
+ rev: v0.12.10
18
+ hooks:
19
+ - id: ruff-check
20
+ args: [--fix]
21
+ - id: ruff-format
22
+ - repo: https://github.com/astral-sh/uv-pre-commit
23
+ # uv version.
24
+ rev: 0.8.13
25
+ hooks:
26
+ - id: uv-lock
27
+ - id: uv-sync
28
+ args: ['--locked', '--all-packages']
29
+ - repo: https://github.com/executablebooks/mdformat
30
+ rev: 0.7.22
31
+ hooks:
32
+ - id: mdformat
33
+ additional_dependencies:
34
+ - mdformat-gfm
35
+ - mdformat-black
@@ -0,0 +1 @@
1
+ python 3.12.4
@@ -0,0 +1 @@
1
+ # Contributing
@@ -1,23 +1,19 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: autopkg-wrapper
3
- Version: 2024.8.1
3
+ Version: 2025.8.1
4
4
  Summary: A package used to execute some autopkg functions, primarily within the context of a GitHub Actions runner.
5
- Home-page: https://github.com/smithjw/autopkg-wrapper
6
- License: BSD-3-Clause
7
- Author: James Smith
8
- Author-email: james@smithjw.me
9
- Requires-Python: >=3.12,<4.0
10
- Classifier: License :: OSI Approved :: BSD License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.12
13
- Requires-Dist: chardet (>=5)
14
- Requires-Dist: idna (>=3)
15
- Requires-Dist: pygithub (>=2)
16
- Requires-Dist: requests (>=2)
17
- Requires-Dist: ruamel-yaml (>=0.18)
18
- Requires-Dist: toml (>=0.10)
19
- Requires-Dist: urllib3 (>=2)
20
5
  Project-URL: Repository, https://github.com/smithjw/autopkg-wrapper
6
+ Author-email: James Smith <james@smithjw.me>
7
+ License-Expression: BSD-3-Clause
8
+ License-File: LICENSE
9
+ Requires-Python: ~=3.12.0
10
+ Requires-Dist: chardet
11
+ Requires-Dist: idna
12
+ Requires-Dist: pygithub
13
+ Requires-Dist: requests
14
+ Requires-Dist: ruamel-yaml
15
+ Requires-Dist: toml
16
+ Requires-Dist: urllib3
21
17
  Description-Content-Type: text/markdown
22
18
 
23
19
  # autopkg-wrapper
@@ -56,4 +52,3 @@ An example folder structure and GitHub Actions Workflow is available within the
56
52
 
57
53
  - [`autopkg_tools` from Facebook](https://github.com/facebook/IT-CPE/tree/main/legacy/autopkg_tools)
58
54
  - [`autopkg_tools` from Facebook, modified by Gusto](https://github.com/Gusto/it-cpe-opensource/tree/main/autopkg)
59
-
@@ -0,0 +1,194 @@
1
+ name: autopkg-wrapper GitHub Actions Demo
2
+
3
+ on:
4
+ workflow_dispatch: # Triggered manually from GitHub
5
+ inputs:
6
+ debug:
7
+ description: 'Debug mode'
8
+ required: false
9
+ default: 'false'
10
+ recipes:
11
+ description: Recipe to Run
12
+ default: 'Google_Chrome.pkg'
13
+ required: false
14
+
15
+ env:
16
+ PYTHON_VERSION: 3.12.1
17
+ AUTOPKG_OVERRIDES_REPO: 'autopkg-overrides'
18
+ AUTOPKG_REPOS_DIR: 'autopkg-repos'
19
+ AUTOPKG_CACHE_DIR: 'autopkg-cache'
20
+
21
+ jobs:
22
+ cache_autopkg_recipe_repos:
23
+ name: Cache autopkg repositories
24
+ runs-on: ubuntu-latest
25
+ outputs:
26
+ cache_date: ${{ steps.cache_key.outputs.date }}
27
+ cache_repos_sha: ${{ steps.cache_key.outputs.repo_list_sha }}
28
+
29
+ steps:
30
+ - name: Checkout host repo
31
+ uses: actions/checkout@v4
32
+ with:
33
+ path: ${{ env.AUTOPKG_OVERRIDES_REPO }}
34
+
35
+ - name: Create repos cache key
36
+ id: cache_key
37
+ shell: bash
38
+ env:
39
+ GH_TOKEN: ${{ github.token }}
40
+ run: |
41
+ echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT
42
+
43
+ REPO_COMMIT_ARRAY=()
44
+ while IFS= read -r repo; do
45
+ if [ -n "$repo" ]; then
46
+ REPO="${repo:19}"
47
+ OWNER=$(echo "$REPO" | awk -F'/' '{print $1}')
48
+ NAME=$(echo "$REPO" | awk -F'/' '{print $2}')
49
+ REPO_API="repos/${OWNER}/${NAME}/commits?per_page=1"
50
+ REPO_COMMIT_SHA="$(gh api "$REPO_API" --jq '.[].sha')"
51
+ REPO_COMMIT_ARRAY+=("$REPO_COMMIT_SHA")
52
+ fi
53
+ done < "$AUTOPKG_OVERRIDES_REPO/repo_list.txt"
54
+
55
+ REPO_LIST_SHA=$(echo "${REPO_COMMIT_ARRAY[@]}" | sha256sum -t | awk '{ print $1 }')
56
+ echo "repo_list_sha=$REPO_LIST_SHA" >> $GITHUB_OUTPUT
57
+
58
+ - name: Cache autopkg repos
59
+ uses: actions/cache@v4
60
+ with:
61
+ enableCrossOsArchive: true
62
+ path: ${{ env.AUTOPKG_REPOS_DIR }}
63
+ key: cache-autopkg-repos-${{ steps.cache_key.outputs.repo_list_sha }}
64
+ restore-keys: |
65
+ cache-autopkg-repos-${{ steps.cache_key.outputs.repo_list_sha }}
66
+ cache-autopkg-repos-
67
+
68
+ - name: Clone autopkg repos
69
+ run: |
70
+ mkdir -p "$AUTOPKG_REPOS_DIR"
71
+ for repo in $(cat "$AUTOPKG_OVERRIDES_REPO/repo_list.txt"); do
72
+ REPO="${repo:19}"
73
+ OWNER="$(echo $REPO | awk -F'/' '{print $1}')"
74
+ NAME="$(echo $REPO | awk -F'/' '{print $2}')"
75
+ REPO_PATH="$AUTOPKG_REPOS_DIR/com.github.$OWNER.$NAME"
76
+
77
+ if [[ -d "$REPO_PATH" ]]; then
78
+ echo "Repo restored from cache, moving on"
79
+ else
80
+ echo "Repo not present, cloning"
81
+ git clone --depth=1 "$repo" "$REPO_PATH"
82
+ fi
83
+ done
84
+
85
+
86
+ run_autopkg_recipes:
87
+ name: Running autopkg recipes
88
+ runs-on: macos-13
89
+ needs: [cache_autopkg_recipe_repos]
90
+
91
+ steps:
92
+ - name: Checkout host repo
93
+ uses: actions/checkout@v4
94
+ with:
95
+ path: ${{ env.AUTOPKG_OVERRIDES_REPO }}
96
+
97
+ - uses: actions/setup-python@v5
98
+ with:
99
+ python-version: ${{ env.PYTHON_VERSION }}
100
+ cache: 'pip'
101
+ cache-dependency-path: |
102
+ **/requirements.txt
103
+
104
+ - name: Install requirements
105
+ run: |
106
+ pip install --upgrade pip
107
+ pip install -r "$AUTOPKG_OVERRIDES_REPO/requirements.txt"
108
+
109
+ - name: Cache autopkg repos
110
+ uses: actions/cache@v4
111
+ with:
112
+ enableCrossOsArchive: true
113
+ path: ${{ env.AUTOPKG_REPOS_DIR }}
114
+ key: cache-autopkg-repos-${{ needs.cache_autopkg_recipe_repos.outputs.cache_repos_sha }}
115
+ restore-keys: |
116
+ cache-autopkg-repos-${{ needs.cache_autopkg_recipe_repos.outputs.cache_repos_sha }}
117
+ cache-autopkg-repos-
118
+
119
+ - name: Cache autopkg packages
120
+ uses: actions/cache@v4
121
+ with:
122
+ enableCrossOsArchive: true
123
+ path: ${{ env.AUTOPKG_CACHE_DIR }}
124
+ key: cache-autopkg-packages-${{ needs.cache_autopkg_recipe_repos.outputs.cache_date }}
125
+ restore-keys: |
126
+ cache-autopkg-packages-${{ needs.cache_autopkg_recipe_repos.outputs.cache_date }}
127
+ cache-autopkg-packages-
128
+
129
+ - name: Configure autopkg directories
130
+ run: |
131
+ mkdir -p "$AUTOPKG_CACHE_DIR" "$AUTOPKG_REPOS_DIR"
132
+
133
+ - name: Validate autopkg directory structure
134
+ continue-on-error: true
135
+ run: |
136
+ echo "Contents of GITHUB_WORKSPACE: $GITHUB_WORKSPACE"
137
+ ls -la "$GITHUB_WORKSPACE"
138
+
139
+ echo "Contents of AUTOPKG_OVERRIDES_REPO: $AUTOPKG_OVERRIDES_REPO"
140
+ ls -la "$AUTOPKG_OVERRIDES_REPO"
141
+
142
+ echo "Contents of AUTOPKG_CACHE_DIR: $AUTOPKG_CACHE_DIR"
143
+ ls -la "$AUTOPKG_CACHE_DIR"
144
+
145
+ echo "Contents of AUTOPKG_REPOS_DIR: $AUTOPKG_REPOS_DIR"
146
+ ls -la "$AUTOPKG_REPOS_DIR"
147
+
148
+ - uses: robinraju/release-downloader@efa4cd07bd0195e6cc65e9e30c251b49ce4d3e51 # v1.8
149
+ with:
150
+ repository: 'autopkg/autopkg'
151
+ latest: true
152
+ # tag: 'v3.0.0RC2'
153
+ fileName: '*.pkg'
154
+ out-file-path: 'downloads'
155
+
156
+ - name: Install autopkg
157
+ run: |
158
+ # sudo installer -pkg "$GITHUB_WORKSPACE"/downloads/*.pkg -target /
159
+ for PKG in $(find "$GITHUB_WORKSPACE"/downloads -name "*.pkg"); do
160
+ sudo /usr/sbin/installer -pkg "${PKG}" -target /
161
+ done
162
+
163
+ - name: Configure AutoPkg and Git
164
+ env:
165
+ AUTOPKG_OVERRIDES_PATH: '${{ github.workspace}}/${{ env.AUTOPKG_OVERRIDES_REPO }}/overrides'
166
+ AUTOPKG_REPOS_PATH: '${{ github.workspace}}/${{ env.AUTOPKG_REPOS_DIR }}'
167
+ AUTOPKG_CACHE_PATH: '${{ github.workspace}}/${{ env.AUTOPKG_CACHE_DIR }}'
168
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
169
+ run: |
170
+ defaults write com.github.autopkg RECIPE_OVERRIDE_DIRS "$AUTOPKG_OVERRIDES_PATH"
171
+ defaults write com.github.autopkg RECIPE_REPO_DIR "$AUTOPKG_REPOS_PATH"
172
+ defaults write com.github.autopkg CACHE_DIR "$AUTOPKG_CACHE_PATH"
173
+ defaults write com.github.autopkg FAIL_RECIPES_WITHOUT_TRUST_INFO -bool YES
174
+ defaults write com.github.autopkg GITHUB_TOKEN "${GITHUB_TOKEN}"
175
+ defaults write com.github.autopkg jcds_mode -bool True
176
+ git config --global user.name "autopkg_runner"
177
+ git config --global user.email "autopkg_runner@githubactions.local"
178
+
179
+ - name: Add autopkg repos
180
+ run: |
181
+ for repo in $(cat "$AUTOPKG_OVERRIDES_REPO/repo_list.txt"); do
182
+ autopkg repo-add "$repo"
183
+ done
184
+
185
+ - name: Run autopkg recipe
186
+ run: |
187
+ ls -la
188
+ ls "$AUTOPKG_OVERRIDES_REPO"
189
+ echo "AUTOPKG_OVERRIDES_REPO: $AUTOPKG_OVERRIDES_REPO"
190
+ autopkg_wrapper
191
+ env:
192
+ DEBUG: ${{ github.event.inputs.debug }}
193
+ AUTOPKG_RECIPES: ${{ github.event.inputs.recipes }}
194
+ AUTOPKG_OVERRIDES_REPO_PATH: ${{ env.AUTOPKG_OVERRIDES_REPO }}
@@ -0,0 +1,22 @@
1
+ Identifier: local.pkg.Google_Chrome
2
+ Input:
3
+ DOWNLOAD_URL: https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg
4
+ NAME: Google Chrome
5
+ PKGPAYLOADNAME: GoogleChrome
6
+ SOFTWARETITLE: Google_Chrome
7
+ ParentRecipe: com.github.smithjw.pkg.Google_Chrome
8
+ ParentRecipeTrustInfo:
9
+ non_core_processors:
10
+ com.github.smithjw.processors/FriendlyPathDeleter:
11
+ git_hash: 2e4a63c08157f400040db145d8d8deb64160d192
12
+ path: /usr/local/autopkgci/repos/com.github.autopkg.smithjw-recipes/SharedProcessors/FriendlyPathDeleter.py
13
+ sha256_hash: eb9abb47f5c699c98d2cde6273782504015e52e6bde031d8e27dbfa0335139dd
14
+ parent_recipes:
15
+ com.github.smithjw.download.Google_Chrome:
16
+ git_hash: 00d83d45572ac9caf5d5743f07d01aecae17413a
17
+ path: /usr/local/autopkgci/repos/com.github.autopkg.smithjw-recipes/Google/Google_Chrome.download.recipe.yaml
18
+ sha256_hash: 0acfd4869db0778a652443e1b0927486b3ccfe75254e21c6206857c0def75f7f
19
+ com.github.smithjw.pkg.Google_Chrome:
20
+ git_hash: 849955822c69b5ef28685f47662cdd9348173d96
21
+ path: /usr/local/autopkgci/repos/com.github.autopkg.smithjw-recipes/Google/Google_Chrome.pkg.recipe.yaml
22
+ sha256_hash: f84fccf85d2d966c8b336ba6a64ebdabb79c398af087cb88f1c330d56f037380
@@ -0,0 +1,2 @@
1
+ https://github.com/autopkg/smithjw-recipes
2
+ https://github.com/hjuutilainen/autopkg-virustotalanalyzer
@@ -0,0 +1,3 @@
1
+ autopkg-wrapper==2025.6.1 \
2
+ --hash=sha256:2b69a42bfb90c4183fb16734f4dcc59e6891cf3ac93be78046c82ab395574ddc \
3
+ --hash=sha256:75d8f6909d576451933fed06df9a5ccc4317442a5ed75562b3c8eacdfaf3de80
File without changes
@@ -186,7 +186,7 @@ def get_override_repo_info(args):
186
186
  logging.debug(f"Override Repo Path: {override_repo_path}")
187
187
 
188
188
  override_repo_git_work_tree = f"--work-tree={override_repo_path}"
189
- override_repo_git_git_dir = f"--git-dir={override_repo_path / ".git"}"
189
+ override_repo_git_git_dir = f"--git-dir={override_repo_path / '.git'}"
190
190
  override_repo_url, override_repo_remote_ref = git.get_repo_info(
191
191
  override_repo_git_git_dir
192
192
  )
@@ -229,7 +229,7 @@ def update_recipe_repo(recipe, git_info, disable_recipe_trust_check, args):
229
229
 
230
230
  if current_branch != git_info["override_trust_branch"]:
231
231
  logging.debug(
232
- f"override_trust_branch: {git_info["override_trust_branch"]}"
232
+ f"override_trust_branch: {git_info['override_trust_branch']}"
233
233
  )
234
234
  git.create_branch(git_info)
235
235
 
@@ -356,6 +356,8 @@ def main():
356
356
  args=args,
357
357
  )
358
358
 
359
+ failed_recipes = []
360
+
359
361
  for recipe in recipe_list:
360
362
  logging.info(f"Processing Recipe: {recipe.name}")
361
363
  process_recipe(
@@ -373,12 +375,18 @@ def main():
373
375
  recipe=recipe, token=args.slack_token
374
376
  ) if args.slack_token else None
375
377
 
378
+ if recipe.error or recipe.results.get("failed"):
379
+ failed_recipes.append(recipe)
380
+
376
381
  recipe.pr_url = (
377
382
  git.create_pull_request(git_info=override_repo_info, recipe=recipe)
378
383
  if args.create_pr
379
384
  else None
380
385
  )
381
386
 
382
-
383
- if __name__ == "__main__":
384
- main()
387
+ # Create GitHub issue for failed recipes
388
+ if args.create_issues and failed_recipes and args.github_token:
389
+ issue_url = git.create_issue_for_failed_recipes(
390
+ git_info=override_repo_info, failed_recipes=failed_recipes
391
+ )
392
+ logging.info(f"Created GitHub issue for failed recipes: {issue_url}")
@@ -19,7 +19,7 @@ def send_notification(recipe, token):
19
19
  if not recipe.results["failed"]:
20
20
  task_description = "Unknown error"
21
21
  else:
22
- task_description = ("Error: {} \n" "Traceback: {} \n").format(
22
+ task_description = ("Error: {} \nTraceback: {} \n").format(
23
23
  recipe.results["failed"][0]["message"],
24
24
  recipe.results["failed"][0]["traceback"],
25
25
  )
@@ -100,7 +100,7 @@ def setup_args():
100
100
  "--branch-name",
101
101
  default=os.getenv(
102
102
  "AW_TRUST_BRANCH",
103
- f"fix/update_trust_information/{datetime.now().strftime("%Y-%m-%dT%H-%M-%S")}",
103
+ f"fix/update_trust_information/{datetime.now().strftime('%Y-%m-%dT%H-%M-%S')}",
104
104
  ),
105
105
  help="""
106
106
  Branch name to be used recipe overrides have failed their trust verification and need to be updated.
@@ -113,6 +113,11 @@ def setup_args():
113
113
  action="store_true",
114
114
  help="If enabled, autopkg_wrapper will open a PR for updated trust information",
115
115
  )
116
+ parser.add_argument(
117
+ "--create-issues",
118
+ action="store_true",
119
+ help="Create a GitHub issue for recipes that fail during processing",
120
+ )
116
121
  parser.add_argument(
117
122
  "--overrides-repo-path",
118
123
  default=os.getenv("AW_OVERRIDES_REPO_PATH", None),
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import subprocess
3
+ from datetime import datetime
3
4
 
4
5
  from github import Github
5
6
 
@@ -102,8 +103,58 @@ Please review and merge the updated trust information for this override.
102
103
 
103
104
  g = Github(git_info["github_token"])
104
105
  repo = g.get_repo(git_info["override_repo_remote_ref"])
105
- pr = repo.create_pull(title=title, body=body, head=git_info["override_trust_branch"], base="main")
106
- pr_url = f"{git_info["override_repo_url"]}/pull/{pr.number}"
106
+ pr = repo.create_pull(
107
+ title=title, body=body, head=git_info["override_trust_branch"], base="main"
108
+ )
109
+ pr_url = f"{git_info['override_repo_url']}/pull/{pr.number}"
107
110
 
108
111
  logging.debug(f"PR URL: {pr_url}")
109
112
  return pr_url
113
+
114
+
115
+ def create_issue_for_failed_recipes(git_info, failed_recipes):
116
+ """
117
+ Creates a GitHub issue listing all recipes that failed during the run.
118
+
119
+ Args:
120
+ git_info (dict): Dictionary containing Git repository information
121
+ failed_recipes (list): List of Recipe objects that failed during processing
122
+
123
+ Returns:
124
+ str: URL of the created GitHub issue, or None if no issue was created
125
+ """
126
+
127
+ if not failed_recipes:
128
+ logging.debug("No failed recipes to report")
129
+ return None
130
+
131
+ g = Github(git_info["github_token"])
132
+ repo = g.get_repo(git_info["override_repo_remote_ref"])
133
+
134
+ # Create issue title and body
135
+ current_date = datetime.now().strftime("%Y-%m-%d")
136
+ title = f"AutoPkg Recipe Failures - {current_date}"
137
+
138
+ body = "## Recipe Failure Details:\n\n"
139
+ for recipe in failed_recipes:
140
+ body += f"#### {recipe.name}\n"
141
+
142
+ if recipe.results.get("failed"):
143
+ for failure in recipe.results.get("failed", []):
144
+ body += f"- {failure.get('message', 'Unknown error')}\n"
145
+
146
+ body += "\n"
147
+
148
+ body += "\nThis issue was automatically generated by autopkg-wrapper."
149
+
150
+ # Create the issue
151
+ issue = repo.create_issue(
152
+ title=title,
153
+ body=body,
154
+ labels=["autopkg-failure"],
155
+ )
156
+
157
+ issue_url = f"{git_info['override_repo_url']}/issues/{issue.number}"
158
+ logging.debug(f"Issue URL: {issue_url}")
159
+
160
+ return issue_url
@@ -0,0 +1,32 @@
1
+ [project]
2
+ name = "autopkg-wrapper"
3
+ version = "2025.8.1"
4
+ description = "A package used to execute some autopkg functions, primarily within the context of a GitHub Actions runner."
5
+ readme = "README.md"
6
+ requires-python = "~=3.12.0"
7
+ license = "BSD-3-Clause"
8
+ authors = [{ name = "James Smith", email = "james@smithjw.me" }]
9
+ dependencies = [
10
+ "chardet",
11
+ "idna",
12
+ "pygithub",
13
+ "requests",
14
+ "ruamel-yaml",
15
+ "toml",
16
+ "urllib3",
17
+ ]
18
+
19
+ [project.urls]
20
+ Repository = "https://github.com/smithjw/autopkg-wrapper"
21
+
22
+ [project.scripts]
23
+ autopkg_wrapper = "autopkg_wrapper.autopkg_wrapper:main"
24
+
25
+ [dependency-groups]
26
+ dev = [
27
+ "uv-bump>=0.1.2",
28
+ ]
29
+
30
+ [build-system]
31
+ requires = ["hatchling"]
32
+ build-backend = "hatchling.build"
File without changes
@@ -0,0 +1,13 @@
1
+ {
2
+ "CACHE_DIR": "/Users/Shared/AutoPkg/Cache",
3
+ "MUNKI_REPO": "/Users/Shared/munki_repo",
4
+ "RECIPE_OVERRIDE_DIRS": "/Users/Shared/AutoPkg/RecipeOverrides",
5
+ "RECIPE_REPOS": {},
6
+ "RECIPE_REPO_DIR": "/Users/Shared/AutoPkg/RecipeRepos",
7
+ "RECIPE_SEARCH_DIRS": [
8
+ ".",
9
+ "~/Library/AutoPkg/Recipes",
10
+ "/Library/AutoPkg/Recipes",
11
+ "/Users/Shared/AutoPkg/Recipes"
12
+ ]
13
+ }
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CACHE_DIR</key>
6
+ <string>/Users/Shared/AutoPkg/Cache</string>
7
+ <key>MUNKI_REPO</key>
8
+ <string>/Users/Shared/munki_repo</string>
9
+ <key>RECIPE_OVERRIDE_DIRS</key>
10
+ <string>/Users/Shared/AutoPkg/RecipeOverrides</string>
11
+ <key>RECIPE_REPOS</key>
12
+ <dict />
13
+ <key>RECIPE_REPO_DIR</key>
14
+ <string>/Users/Shared/AutoPkg/RecipeRepos</string>
15
+ <key>RECIPE_SEARCH_DIRS</key>
16
+ <array>
17
+ <string>.</string>
18
+ <string>~/Library/AutoPkg/Recipes</string>
19
+ <string>/Library/AutoPkg/Recipes</string>
20
+ <string>/Users/Shared/AutoPkg/Recipes</string>
21
+ </array>
22
+ </dict>
23
+ </plist>
@@ -0,0 +1,5 @@
1
+ [
2
+ "Google_Chrome.download",
3
+ "Microsoft_Edge.download",
4
+ "Mozilla_Firefox.download"
5
+ ]
@@ -0,0 +1,3 @@
1
+ Google_Chrome.download
2
+ Microsoft_Edge.download
3
+ Mozilla_Firefox.download
@@ -0,0 +1,3 @@
1
+ - Google_Chrome.download
2
+ - Microsoft_Edge.download
3
+ - Mozilla_Firefox.download
@@ -0,0 +1,279 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = "==3.12.*"
4
+
5
+ [[package]]
6
+ name = "autopkg-wrapper"
7
+ version = "2025.8.1"
8
+ source = { editable = "." }
9
+ dependencies = [
10
+ { name = "chardet" },
11
+ { name = "idna" },
12
+ { name = "pygithub" },
13
+ { name = "requests" },
14
+ { name = "ruamel-yaml" },
15
+ { name = "toml" },
16
+ { name = "urllib3" },
17
+ ]
18
+
19
+ [package.dev-dependencies]
20
+ dev = [
21
+ { name = "uv-bump" },
22
+ ]
23
+
24
+ [package.metadata]
25
+ requires-dist = [
26
+ { name = "chardet" },
27
+ { name = "idna" },
28
+ { name = "pygithub" },
29
+ { name = "requests" },
30
+ { name = "ruamel-yaml" },
31
+ { name = "toml" },
32
+ { name = "urllib3" },
33
+ ]
34
+
35
+ [package.metadata.requires-dev]
36
+ dev = [{ name = "uv-bump", specifier = ">=0.1.2" }]
37
+
38
+ [[package]]
39
+ name = "certifi"
40
+ version = "2025.8.3"
41
+ source = { registry = "https://pypi.org/simple" }
42
+ sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" }
43
+ wheels = [
44
+ { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" },
45
+ ]
46
+
47
+ [[package]]
48
+ name = "cffi"
49
+ version = "1.17.1"
50
+ source = { registry = "https://pypi.org/simple" }
51
+ dependencies = [
52
+ { name = "pycparser" },
53
+ ]
54
+ sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" }
55
+ wheels = [
56
+ { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" },
57
+ { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" },
58
+ { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" },
59
+ { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" },
60
+ { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" },
61
+ { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" },
62
+ { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" },
63
+ { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" },
64
+ { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" },
65
+ { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" },
66
+ { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" },
67
+ ]
68
+
69
+ [[package]]
70
+ name = "chardet"
71
+ version = "5.2.0"
72
+ source = { registry = "https://pypi.org/simple" }
73
+ sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" }
74
+ wheels = [
75
+ { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" },
76
+ ]
77
+
78
+ [[package]]
79
+ name = "charset-normalizer"
80
+ version = "3.4.3"
81
+ source = { registry = "https://pypi.org/simple" }
82
+ sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" }
83
+ wheels = [
84
+ { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" },
85
+ { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" },
86
+ { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" },
87
+ { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" },
88
+ { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" },
89
+ { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" },
90
+ { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" },
91
+ { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" },
92
+ { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" },
93
+ { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" },
94
+ { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" },
95
+ { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" },
96
+ ]
97
+
98
+ [[package]]
99
+ name = "cryptography"
100
+ version = "45.0.6"
101
+ source = { registry = "https://pypi.org/simple" }
102
+ dependencies = [
103
+ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
104
+ ]
105
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/0d/d13399c94234ee8f3df384819dc67e0c5ce215fb751d567a55a1f4b028c7/cryptography-45.0.6.tar.gz", hash = "sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719", size = 744949, upload-time = "2025-08-05T23:59:27.93Z" }
106
+ wheels = [
107
+ { url = "https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74", size = 7042702, upload-time = "2025-08-05T23:58:23.464Z" },
108
+ { url = "https://files.pythonhosted.org/packages/b3/b6/cabd07410f222f32c8d55486c464f432808abaa1f12af9afcbe8f2f19030/cryptography-45.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f", size = 4206483, upload-time = "2025-08-05T23:58:27.132Z" },
109
+ { url = "https://files.pythonhosted.org/packages/8b/9e/f9c7d36a38b1cfeb1cc74849aabe9bf817990f7603ff6eb485e0d70e0b27/cryptography-45.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf", size = 4429679, upload-time = "2025-08-05T23:58:29.152Z" },
110
+ { url = "https://files.pythonhosted.org/packages/9c/2a/4434c17eb32ef30b254b9e8b9830cee4e516f08b47fdd291c5b1255b8101/cryptography-45.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5", size = 4210553, upload-time = "2025-08-05T23:58:30.596Z" },
111
+ { url = "https://files.pythonhosted.org/packages/ef/1d/09a5df8e0c4b7970f5d1f3aff1b640df6d4be28a64cae970d56c6cf1c772/cryptography-45.0.6-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2", size = 3894499, upload-time = "2025-08-05T23:58:32.03Z" },
112
+ { url = "https://files.pythonhosted.org/packages/79/62/120842ab20d9150a9d3a6bdc07fe2870384e82f5266d41c53b08a3a96b34/cryptography-45.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08", size = 4458484, upload-time = "2025-08-05T23:58:33.526Z" },
113
+ { url = "https://files.pythonhosted.org/packages/fd/80/1bc3634d45ddfed0871bfba52cf8f1ad724761662a0c792b97a951fb1b30/cryptography-45.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402", size = 4210281, upload-time = "2025-08-05T23:58:35.445Z" },
114
+ { url = "https://files.pythonhosted.org/packages/7d/fe/ffb12c2d83d0ee625f124880a1f023b5878f79da92e64c37962bbbe35f3f/cryptography-45.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42", size = 4456890, upload-time = "2025-08-05T23:58:36.923Z" },
115
+ { url = "https://files.pythonhosted.org/packages/8c/8e/b3f3fe0dc82c77a0deb5f493b23311e09193f2268b77196ec0f7a36e3f3e/cryptography-45.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05", size = 4333247, upload-time = "2025-08-05T23:58:38.781Z" },
116
+ { url = "https://files.pythonhosted.org/packages/b3/a6/c3ef2ab9e334da27a1d7b56af4a2417d77e7806b2e0f90d6267ce120d2e4/cryptography-45.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453", size = 4565045, upload-time = "2025-08-05T23:58:40.415Z" },
117
+ { url = "https://files.pythonhosted.org/packages/31/c3/77722446b13fa71dddd820a5faab4ce6db49e7e0bf8312ef4192a3f78e2f/cryptography-45.0.6-cp311-abi3-win32.whl", hash = "sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159", size = 2928923, upload-time = "2025-08-05T23:58:41.919Z" },
118
+ { url = "https://files.pythonhosted.org/packages/38/63/a025c3225188a811b82932a4dcc8457a26c3729d81578ccecbcce2cb784e/cryptography-45.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec", size = 3403805, upload-time = "2025-08-05T23:58:43.792Z" },
119
+ { url = "https://files.pythonhosted.org/packages/5b/af/bcfbea93a30809f126d51c074ee0fac5bd9d57d068edf56c2a73abedbea4/cryptography-45.0.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0", size = 7020111, upload-time = "2025-08-05T23:58:45.316Z" },
120
+ { url = "https://files.pythonhosted.org/packages/98/c6/ea5173689e014f1a8470899cd5beeb358e22bb3cf5a876060f9d1ca78af4/cryptography-45.0.6-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394", size = 4198169, upload-time = "2025-08-05T23:58:47.121Z" },
121
+ { url = "https://files.pythonhosted.org/packages/ba/73/b12995edc0c7e2311ffb57ebd3b351f6b268fed37d93bfc6f9856e01c473/cryptography-45.0.6-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9", size = 4421273, upload-time = "2025-08-05T23:58:48.557Z" },
122
+ { url = "https://files.pythonhosted.org/packages/f7/6e/286894f6f71926bc0da67408c853dd9ba953f662dcb70993a59fd499f111/cryptography-45.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3", size = 4199211, upload-time = "2025-08-05T23:58:50.139Z" },
123
+ { url = "https://files.pythonhosted.org/packages/de/34/a7f55e39b9623c5cb571d77a6a90387fe557908ffc44f6872f26ca8ae270/cryptography-45.0.6-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3", size = 3883732, upload-time = "2025-08-05T23:58:52.253Z" },
124
+ { url = "https://files.pythonhosted.org/packages/f9/b9/c6d32edbcba0cd9f5df90f29ed46a65c4631c4fbe11187feb9169c6ff506/cryptography-45.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301", size = 4450655, upload-time = "2025-08-05T23:58:53.848Z" },
125
+ { url = "https://files.pythonhosted.org/packages/77/2d/09b097adfdee0227cfd4c699b3375a842080f065bab9014248933497c3f9/cryptography-45.0.6-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5", size = 4198956, upload-time = "2025-08-05T23:58:55.209Z" },
126
+ { url = "https://files.pythonhosted.org/packages/55/66/061ec6689207d54effdff535bbdf85cc380d32dd5377173085812565cf38/cryptography-45.0.6-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016", size = 4449859, upload-time = "2025-08-05T23:58:56.639Z" },
127
+ { url = "https://files.pythonhosted.org/packages/41/ff/e7d5a2ad2d035e5a2af116e1a3adb4d8fcd0be92a18032917a089c6e5028/cryptography-45.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3", size = 4320254, upload-time = "2025-08-05T23:58:58.833Z" },
128
+ { url = "https://files.pythonhosted.org/packages/82/27/092d311af22095d288f4db89fcaebadfb2f28944f3d790a4cf51fe5ddaeb/cryptography-45.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9", size = 4554815, upload-time = "2025-08-05T23:59:00.283Z" },
129
+ { url = "https://files.pythonhosted.org/packages/7e/01/aa2f4940262d588a8fdf4edabe4cda45854d00ebc6eaac12568b3a491a16/cryptography-45.0.6-cp37-abi3-win32.whl", hash = "sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02", size = 2912147, upload-time = "2025-08-05T23:59:01.716Z" },
130
+ { url = "https://files.pythonhosted.org/packages/0a/bc/16e0276078c2de3ceef6b5a34b965f4436215efac45313df90d55f0ba2d2/cryptography-45.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b", size = 3390459, upload-time = "2025-08-05T23:59:03.358Z" },
131
+ ]
132
+
133
+ [[package]]
134
+ name = "idna"
135
+ version = "3.10"
136
+ source = { registry = "https://pypi.org/simple" }
137
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" }
138
+ wheels = [
139
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
140
+ ]
141
+
142
+ [[package]]
143
+ name = "pycparser"
144
+ version = "2.22"
145
+ source = { registry = "https://pypi.org/simple" }
146
+ sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" }
147
+ wheels = [
148
+ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" },
149
+ ]
150
+
151
+ [[package]]
152
+ name = "pygithub"
153
+ version = "2.7.0"
154
+ source = { registry = "https://pypi.org/simple" }
155
+ dependencies = [
156
+ { name = "pyjwt", extra = ["crypto"] },
157
+ { name = "pynacl" },
158
+ { name = "requests" },
159
+ { name = "typing-extensions" },
160
+ { name = "urllib3" },
161
+ ]
162
+ sdist = { url = "https://files.pythonhosted.org/packages/6a/a7/403e04aa96e2d94e1518d518d69718c2ba978c8d3ffa4ab3b101b94dbafa/pygithub-2.7.0.tar.gz", hash = "sha256:7cd6eafabb09b5369afba3586d86b1f1ad6f1326d2ff01bc47bb26615dce4cbb", size = 3707928, upload-time = "2025-07-31T11:52:53.714Z" }
163
+ wheels = [
164
+ { url = "https://files.pythonhosted.org/packages/57/76/d768dd31322173b3956692b75471ac37bf3759c7abb603152f6a9b6594a8/pygithub-2.7.0-py3-none-any.whl", hash = "sha256:40ecbfe26dc55cc34ab4b0ffa1d455e6f816ef9a2bc8d6f5ad18ce572f163700", size = 416514, upload-time = "2025-07-31T11:52:51.909Z" },
165
+ ]
166
+
167
+ [[package]]
168
+ name = "pyjwt"
169
+ version = "2.10.1"
170
+ source = { registry = "https://pypi.org/simple" }
171
+ sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" }
172
+ wheels = [
173
+ { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" },
174
+ ]
175
+
176
+ [package.optional-dependencies]
177
+ crypto = [
178
+ { name = "cryptography" },
179
+ ]
180
+
181
+ [[package]]
182
+ name = "pynacl"
183
+ version = "1.5.0"
184
+ source = { registry = "https://pypi.org/simple" }
185
+ dependencies = [
186
+ { name = "cffi" },
187
+ ]
188
+ sdist = { url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", size = 3392854, upload-time = "2022-01-07T22:05:41.134Z" }
189
+ wheels = [
190
+ { url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", size = 349920, upload-time = "2022-01-07T22:05:49.156Z" },
191
+ { url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", size = 601722, upload-time = "2022-01-07T22:05:50.989Z" },
192
+ { url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", size = 680087, upload-time = "2022-01-07T22:05:52.539Z" },
193
+ { url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", size = 856678, upload-time = "2022-01-07T22:05:54.251Z" },
194
+ { url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", size = 1133660, upload-time = "2022-01-07T22:05:56.056Z" },
195
+ { url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", size = 663824, upload-time = "2022-01-07T22:05:57.434Z" },
196
+ { url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", size = 1117912, upload-time = "2022-01-07T22:05:58.665Z" },
197
+ { url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543", size = 204624, upload-time = "2022-01-07T22:06:00.085Z" },
198
+ { url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", size = 212141, upload-time = "2022-01-07T22:06:01.861Z" },
199
+ ]
200
+
201
+ [[package]]
202
+ name = "requests"
203
+ version = "2.32.5"
204
+ source = { registry = "https://pypi.org/simple" }
205
+ dependencies = [
206
+ { name = "certifi" },
207
+ { name = "charset-normalizer" },
208
+ { name = "idna" },
209
+ { name = "urllib3" },
210
+ ]
211
+ sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
212
+ wheels = [
213
+ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
214
+ ]
215
+
216
+ [[package]]
217
+ name = "ruamel-yaml"
218
+ version = "0.18.15"
219
+ source = { registry = "https://pypi.org/simple" }
220
+ dependencies = [
221
+ { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" },
222
+ ]
223
+ sdist = { url = "https://files.pythonhosted.org/packages/3e/db/f3950f5e5031b618aae9f423a39bf81a55c148aecd15a34527898e752cf4/ruamel.yaml-0.18.15.tar.gz", hash = "sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700", size = 146865, upload-time = "2025-08-19T11:15:10.694Z" }
224
+ wheels = [
225
+ { url = "https://files.pythonhosted.org/packages/d1/e5/f2a0621f1781b76a38194acae72f01e37b1941470407345b6e8653ad7640/ruamel.yaml-0.18.15-py3-none-any.whl", hash = "sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701", size = 119702, upload-time = "2025-08-19T11:15:07.696Z" },
226
+ ]
227
+
228
+ [[package]]
229
+ name = "ruamel-yaml-clib"
230
+ version = "0.2.12"
231
+ source = { registry = "https://pypi.org/simple" }
232
+ sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315, upload-time = "2024-10-20T10:10:56.22Z" }
233
+ wheels = [
234
+ { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433, upload-time = "2024-10-20T10:12:55.657Z" },
235
+ { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362, upload-time = "2024-10-20T10:12:57.155Z" },
236
+ { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118, upload-time = "2024-10-20T10:12:58.501Z" },
237
+ { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497, upload-time = "2024-10-20T10:13:00.211Z" },
238
+ { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042, upload-time = "2024-10-21T11:26:46.038Z" },
239
+ { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831, upload-time = "2024-10-21T11:26:47.487Z" },
240
+ { url = "https://files.pythonhosted.org/packages/db/5d/36619b61ffa2429eeaefaab4f3374666adf36ad8ac6330d855848d7d36fd/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d", size = 715692, upload-time = "2024-12-11T19:58:17.252Z" },
241
+ { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777, upload-time = "2024-10-20T10:13:01.395Z" },
242
+ { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523, upload-time = "2024-10-20T10:13:02.768Z" },
243
+ ]
244
+
245
+ [[package]]
246
+ name = "toml"
247
+ version = "0.10.2"
248
+ source = { registry = "https://pypi.org/simple" }
249
+ sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" }
250
+ wheels = [
251
+ { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" },
252
+ ]
253
+
254
+ [[package]]
255
+ name = "typing-extensions"
256
+ version = "4.15.0"
257
+ source = { registry = "https://pypi.org/simple" }
258
+ sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" }
259
+ wheels = [
260
+ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
261
+ ]
262
+
263
+ [[package]]
264
+ name = "urllib3"
265
+ version = "2.5.0"
266
+ source = { registry = "https://pypi.org/simple" }
267
+ sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" }
268
+ wheels = [
269
+ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
270
+ ]
271
+
272
+ [[package]]
273
+ name = "uv-bump"
274
+ version = "0.2.0"
275
+ source = { registry = "https://pypi.org/simple" }
276
+ sdist = { url = "https://files.pythonhosted.org/packages/6f/83/9d12d51d5f35ce68e16a8c5817c83175441792cc23dcc07f7764b9e21683/uv_bump-0.2.0.tar.gz", hash = "sha256:c1688ed035884b0cca5f0fd0ca8716f61aab320a2313a4ac1dc83b8e1b1f5e55", size = 4571, upload-time = "2025-07-19T08:15:23.3Z" }
277
+ wheels = [
278
+ { url = "https://files.pythonhosted.org/packages/a8/a2/8096354e31d829b556b15f9aff9138deb9748799a63d240072e73611aba0/uv_bump-0.2.0-py3-none-any.whl", hash = "sha256:128b8d3f8597ed3905e08329d032e5dbced2776a8f0c95139fcb6f253fca527b", size = 5874, upload-time = "2025-07-19T08:15:22.357Z" },
279
+ ]
@@ -1 +0,0 @@
1
- __version__ = "2024.8.1"
@@ -1 +0,0 @@
1
- __version__ = "0.0.0"
@@ -1 +0,0 @@
1
- __version__ = "0.0.0"
@@ -1,28 +0,0 @@
1
- [tool.poetry]
2
- authors = ["James Smith <james@smithjw.me>"]
3
- description = "A package used to execute some autopkg functions, primarily within the context of a GitHub Actions runner."
4
- license = "BSD-3-Clause"
5
- name = "autopkg-wrapper"
6
- readme = "README.md"
7
- repository = "https://github.com/smithjw/autopkg-wrapper"
8
- version = "2024.8.1"
9
-
10
- [tool.poetry.scripts]
11
- # When built and installed by pip, the command autopkg_wrapper will be availble in to run within that environment
12
- autopkg_wrapper = "autopkg_wrapper.autopkg_wrapper:main"
13
-
14
- [tool.poetry.dependencies]
15
- chardet = ">=5"
16
- idna = ">=3"
17
- pygithub = ">=2"
18
- python = "^3.12"
19
- requests = ">=2"
20
- ruamel-yaml = ">=0.18"
21
- toml = ">=0.10"
22
- urllib3 = ">=2"
23
-
24
- [tool.poetry_bumpversion.file."autopkg_wrapper/__init__.py"]
25
-
26
- [build-system]
27
- build-backend = "poetry.core.masonry.api"
28
- requires = ["poetry-core"]