cgitize 6.0.1__tar.gz → 6.0.3__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 (67) hide show
  1. cgitize-6.0.3/.github/dependabot.yml +20 -0
  2. {cgitize-6.0.1 → cgitize-6.0.3}/.github/workflows/ci.yml +25 -20
  3. {cgitize-6.0.1/cgitize.egg-info → cgitize-6.0.3}/PKG-INFO +2 -2
  4. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/config.py +24 -12
  5. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/version.py +1 -1
  6. {cgitize-6.0.1 → cgitize-6.0.3/cgitize.egg-info}/PKG-INFO +2 -2
  7. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize.egg-info/requires.txt +1 -1
  8. {cgitize-6.0.1 → cgitize-6.0.3}/docker/Dockerfile +1 -1
  9. {cgitize-6.0.1 → cgitize-6.0.3}/pyproject.toml +1 -1
  10. {cgitize-6.0.1 → cgitize-6.0.3}/requirements.txt +11 -11
  11. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/git_server/Dockerfile +1 -1
  12. cgitize-6.0.1/.github/dependabot.yml +0 -6
  13. {cgitize-6.0.1 → cgitize-6.0.3}/.dockerignore +0 -0
  14. {cgitize-6.0.1 → cgitize-6.0.3}/.gitattributes +0 -0
  15. {cgitize-6.0.1 → cgitize-6.0.3}/.gitignore +0 -0
  16. {cgitize-6.0.1 → cgitize-6.0.3}/.pylintrc +0 -0
  17. {cgitize-6.0.1 → cgitize-6.0.3}/.python-version +0 -0
  18. {cgitize-6.0.1 → cgitize-6.0.3}/DEVELOPMENT.md +0 -0
  19. {cgitize-6.0.1 → cgitize-6.0.3}/LICENSE.txt +0 -0
  20. {cgitize-6.0.1 → cgitize-6.0.3}/Makefile +0 -0
  21. {cgitize-6.0.1 → cgitize-6.0.3}/README.md +0 -0
  22. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/__init__.py +0 -0
  23. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/bitbucket.py +0 -0
  24. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/cgit.py +0 -0
  25. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/git.py +0 -0
  26. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/github.py +0 -0
  27. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/gitlab.py +0 -0
  28. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/main.py +0 -0
  29. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/repo.py +0 -0
  30. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize/utils.py +0 -0
  31. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize.egg-info/SOURCES.txt +0 -0
  32. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize.egg-info/dependency_links.txt +0 -0
  33. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize.egg-info/entry_points.txt +0 -0
  34. {cgitize-6.0.1 → cgitize-6.0.3}/cgitize.egg-info/top_level.txt +0 -0
  35. {cgitize-6.0.1 → cgitize-6.0.3}/docker/README.md +0 -0
  36. {cgitize-6.0.1 → cgitize-6.0.3}/docker/cgitize.sh +0 -0
  37. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/Dockerfile +0 -0
  38. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/cmd.sh +0 -0
  39. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/etc/cgit/common +0 -0
  40. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/etc/cgitrc +0 -0
  41. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/etc/nginx/conf.d/default.conf +0 -0
  42. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/usr/lib/cgit/filters/about-formatting.sh +0 -0
  43. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/usr/lib/cgit/filters/html-converters/.gitattributes +0 -0
  44. {cgitize-6.0.1 → cgitize-6.0.3}/docker/frontend/usr/lib/cgit/filters/html-converters/md2html +0 -0
  45. {cgitize-6.0.1 → cgitize-6.0.3}/docker/get_output_dir.py +0 -0
  46. {cgitize-6.0.1 → cgitize-6.0.3}/docker/in_cron.sh +0 -0
  47. {cgitize-6.0.1 → cgitize-6.0.3}/docker-compose.yml +0 -0
  48. {cgitize-6.0.1 → cgitize-6.0.3}/docs/api.md +0 -0
  49. {cgitize-6.0.1 → cgitize-6.0.3}/docs/auth.md +0 -0
  50. {cgitize-6.0.1 → cgitize-6.0.3}/examples/cgitize.toml +0 -0
  51. {cgitize-6.0.1 → cgitize-6.0.3}/examples/docker/cgitize.toml +0 -0
  52. {cgitize-6.0.1 → cgitize-6.0.3}/prelude.mk +0 -0
  53. {cgitize-6.0.1 → cgitize-6.0.3}/setup.cfg +0 -0
  54. {cgitize-6.0.1 → cgitize-6.0.3}/test/__init__.py +0 -0
  55. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/.dockerignore +0 -0
  56. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/cgitize/.gitignore +0 -0
  57. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/cgitize/etc/cgitize.toml +0 -0
  58. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/docker-compose.yml +0 -0
  59. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/git_server/setup_repo.sh +0 -0
  60. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/docker/test.sh +0 -0
  61. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/example/test.sh +0 -0
  62. {cgitize-6.0.1 → cgitize-6.0.3}/test/integration/local/test.sh +0 -0
  63. {cgitize-6.0.1 → cgitize-6.0.3}/test/set_credentials.sh +0 -0
  64. {cgitize-6.0.1 → cgitize-6.0.3}/test/unit/__init__.py +0 -0
  65. {cgitize-6.0.1 → cgitize-6.0.3}/test/unit/test_bitbucket.py +0 -0
  66. {cgitize-6.0.1 → cgitize-6.0.3}/test/unit/test_github.py +0 -0
  67. {cgitize-6.0.1 → cgitize-6.0.3}/test/unit/test_gitlab.py +0 -0
@@ -0,0 +1,20 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: docker
4
+ directories:
5
+ - '**/*'
6
+ schedule:
7
+ interval: weekly
8
+ - package-ecosystem: docker-compose
9
+ directories:
10
+ - '**/*'
11
+ schedule:
12
+ interval: weekly
13
+ - package-ecosystem: github-actions
14
+ directory: /
15
+ schedule:
16
+ interval: weekly
17
+ - package-ecosystem: pip
18
+ directory: /
19
+ schedule:
20
+ interval: weekly
@@ -4,7 +4,6 @@ on:
4
4
  push:
5
5
  paths-ignore:
6
6
  - '*.md'
7
- pull_request:
8
7
  workflow_dispatch:
9
8
 
10
9
  jobs:
@@ -68,7 +67,7 @@ jobs:
68
67
  - name: Install dependencies
69
68
  run: pip install -q -r requirements.txt
70
69
  - name: Set up ssh-agent
71
- uses: webfactory/ssh-agent@v0.9.1
70
+ uses: webfactory/ssh-agent@v0.10.0
72
71
  with:
73
72
  ssh-private-key: '${{ secrets.SSH_KEY }}'
74
73
  - name: Integration test (example config)
@@ -84,14 +83,13 @@ jobs:
84
83
  - {service: backend, file: docker/Dockerfile, image: cgitize}
85
84
  - {service: frontend, context: docker/frontend, image: cgitize-frontend}
86
85
  name: 'Publish / Docker Hub / ${{ matrix.service }}'
87
- if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/'))
88
86
  steps:
89
87
  - name: Checkout
90
88
  uses: actions/checkout@v6
91
89
  # https://github.com/docker/metadata-action#semver
92
90
  - id: meta
93
91
  name: Docker Hub metadata
94
- uses: docker/metadata-action@v5
92
+ uses: docker/metadata-action@v6
95
93
  with:
96
94
  images: '${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.image }}'
97
95
  flavor: |
@@ -102,31 +100,38 @@ jobs:
102
100
  type=semver,pattern={{major}}.{{minor}}
103
101
  type=semver,pattern={{major}}
104
102
  - name: Set up QEMU
105
- uses: docker/setup-qemu-action@v3
103
+ uses: docker/setup-qemu-action@v4
106
104
  - name: Set up Docker Buildx
107
- uses: docker/setup-buildx-action@v3
108
- - name: Login to Docker Hub
109
- uses: docker/login-action@v3
110
- with:
111
- username: '${{ secrets.DOCKERHUB_USERNAME }}'
112
- password: '${{ secrets.DOCKERHUB_TOKEN }}'
113
- - id: platforms
114
- name: Which platforms?
105
+ uses: docker/setup-buildx-action@v4
106
+ - name: Push? Which platforms?
107
+ id: params
115
108
  # Building for ARM for every commit in master is too time-consuming.
116
109
  run: |
117
- if [ '${{ github.ref }}' = 'refs/heads/master' ]; then
110
+ if ${{ github.ref == 'refs/heads/master' }}; then
111
+ echo 'push=true' >> "$GITHUB_OUTPUT"
118
112
  echo 'platforms=amd64' >> "$GITHUB_OUTPUT"
119
- else
113
+ elif ${{ startsWith(github.ref, 'refs/tags/') }}; then
114
+ echo 'push=true' >> "$GITHUB_OUTPUT"
120
115
  echo 'platforms=amd64,armhf,arm64' >> "$GITHUB_OUTPUT"
116
+ else
117
+ echo 'push=false' >> "$GITHUB_OUTPUT"
118
+ echo 'platforms=amd64' >> "$GITHUB_OUTPUT"
121
119
  fi
120
+ - name: Login to Docker Hub
121
+ # https://github.com/orgs/community/discussions/163013
122
+ if: steps.params.outputs.push == 'true'
123
+ uses: docker/login-action@v4
124
+ with:
125
+ username: '${{ secrets.DOCKERHUB_USERNAME }}'
126
+ password: '${{ secrets.DOCKERHUB_TOKEN }}'
122
127
  - name: Build and publish
123
- uses: docker/build-push-action@v6
128
+ uses: docker/build-push-action@v7
124
129
  with:
125
130
  context: '${{ matrix.context }}'
126
131
  file: '${{ matrix.file }}'
127
132
  labels: '${{ steps.meta.outputs.labels }}'
128
- platforms: '${{ steps.platforms.outputs.platforms }}'
129
- push: true
133
+ platforms: '${{ steps.params.outputs.platforms }}'
134
+ push: '${{ steps.params.outputs.push }}'
130
135
  tags: '${{ steps.meta.outputs.tags }}'
131
136
 
132
137
  publish_pypi:
@@ -147,13 +152,13 @@ jobs:
147
152
  - name: Build package
148
153
  run: python -m build
149
154
  - name: Publish as artifact
150
- uses: actions/upload-artifact@v6
155
+ uses: actions/upload-artifact@v7
151
156
  with:
152
157
  name: dist
153
158
  path: dist
154
159
  if-no-files-found: error
155
160
  - name: Publish to PyPI
156
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
161
+ if: startsWith(github.ref, 'refs/tags/')
157
162
  uses: pypa/gh-action-pypi-publish@release/v1
158
163
  with:
159
164
  user: __token__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgitize
3
- Version: 6.0.1
3
+ Version: 6.0.3
4
4
  Summary: Self-host your repositories using cgit
5
5
  Author-email: Egor Tensin <egor@tensin.name>
6
6
  License: MIT
@@ -17,7 +17,7 @@ Requires-Dist: atlassian-python-api~=4.0
17
17
  Requires-Dist: importlib-metadata~=4.0; python_version < "3.8"
18
18
  Requires-Dist: PyGithub~=2.0
19
19
  Requires-Dist: python-gitlab~=6.0
20
- Requires-Dist: tomli~=1.0
20
+ Requires-Dist: tomli<3,>=1
21
21
  Dynamic: license-file
22
22
 
23
23
  cgitize
@@ -66,17 +66,26 @@ class ServiceSection(Section, ABC):
66
66
  self.repositories = RepositoriesSection(self.impl.get('repositories', {}))
67
67
  self.users = UsersSection(self.impl.get('users', {}))
68
68
 
69
- def enum_repositories(self, cfg):
70
- api = self.connect_to_service()
69
+ def _enum_explicit_repositories(self, cfg, api):
71
70
  for r in self.repositories.enum_repositories():
72
71
  r = HostedRepo(r)
73
72
  yield api.convert_repo(api.get_repo(r), cfg, r.dir)
73
+
74
+ def _enum_user_repositories(self, cfg, api, user):
75
+ for r in api.get_user_repos(user):
76
+ r = api.convert_repo(r, cfg, user.dir)
77
+ if r.name in user.skip:
78
+ continue
79
+ yield r
80
+
81
+ def _sort_repos(self, repos):
82
+ return sorted(repos, key=lambda repo: repo.name)
83
+
84
+ def enum_repositories(self, cfg):
85
+ api = self.connect_to_service()
86
+ yield from self._sort_repos(self._enum_explicit_repositories(cfg, api))
74
87
  for u in self.users.enum_users():
75
- for r in api.get_user_repos(u):
76
- r = api.convert_repo(r, cfg, u.dir)
77
- if r.name in u.skip:
78
- continue
79
- yield r
88
+ yield from self._sort_repos(self._enum_user_repositories(cfg, api, u))
80
89
 
81
90
  @abstractmethod
82
91
  def connect_to_service(self):
@@ -100,15 +109,18 @@ class GitHubSection(ServiceSection):
100
109
  def url_auth(self):
101
110
  return self.token
102
111
 
112
+ def _enum_org_repositories(self, cfg, api, org):
113
+ for repo in api.get_org_repos(org):
114
+ repo = api.convert_repo(repo, cfg, org.dir)
115
+ if repo.name in org.skip:
116
+ continue
117
+ yield repo
118
+
103
119
  def enum_repositories(self, cfg):
104
120
  yield from super().enum_repositories(cfg)
105
121
  api = self.connect_to_service()
106
122
  for org in self.orgs.enum_orgs():
107
- for repo in api.get_org_repos(org):
108
- repo = api.convert_repo(repo, cfg, org.dir)
109
- if repo.name in org.skip:
110
- continue
111
- yield repo
123
+ yield from self._sort_repos(self._enum_org_repositories(cfg, api, org))
112
124
 
113
125
  def connect_to_service(self):
114
126
  username = self.username
@@ -1,5 +1,5 @@
1
1
  try:
2
- import importlib.metadata as metadata
2
+ from importlib import metadata
3
3
  except ImportError:
4
4
  import importlib_metadata as metadata
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cgitize
3
- Version: 6.0.1
3
+ Version: 6.0.3
4
4
  Summary: Self-host your repositories using cgit
5
5
  Author-email: Egor Tensin <egor@tensin.name>
6
6
  License: MIT
@@ -17,7 +17,7 @@ Requires-Dist: atlassian-python-api~=4.0
17
17
  Requires-Dist: importlib-metadata~=4.0; python_version < "3.8"
18
18
  Requires-Dist: PyGithub~=2.0
19
19
  Requires-Dist: python-gitlab~=6.0
20
- Requires-Dist: tomli~=1.0
20
+ Requires-Dist: tomli<3,>=1
21
21
  Dynamic: license-file
22
22
 
23
23
  cgitize
@@ -1,7 +1,7 @@
1
1
  atlassian-python-api~=4.0
2
2
  PyGithub~=2.0
3
3
  python-gitlab~=6.0
4
- tomli~=1.0
4
+ tomli<3,>=1
5
5
 
6
6
  [:python_version < "3.8"]
7
7
  importlib-metadata~=4.0
@@ -1,4 +1,4 @@
1
- FROM python:3.13-alpine AS base
1
+ FROM python:3.14-alpine AS base
2
2
 
3
3
  FROM base AS deps
4
4
 
@@ -16,7 +16,7 @@ dependencies = [
16
16
  'importlib-metadata ~= 4.0 ; python_version < "3.8"',
17
17
  "PyGithub ~= 2.0",
18
18
  "python-gitlab ~= 6.0",
19
- "tomli ~= 1.0",
19
+ "tomli >= 1,< 3",
20
20
  ]
21
21
 
22
22
  classifiers = [
@@ -1,23 +1,23 @@
1
1
  atlassian-python-api==4.0.7
2
2
  beautifulsoup4==4.14.3
3
- certifi==2026.1.4
3
+ certifi==2026.2.25
4
4
  cffi==2.0.0
5
- charset-normalizer==3.4.4
6
- cryptography==46.0.3
5
+ charset-normalizer==3.4.6
6
+ cryptography==46.0.6
7
7
  Deprecated==1.3.1
8
8
  idna==3.11
9
- jmespath==1.0.1
9
+ jmespath==1.1.0
10
10
  oauthlib==3.3.1
11
- pycparser==2.23
12
- PyGithub==2.8.1
13
- PyJWT==2.10.1
11
+ pycparser==3.0
12
+ PyGithub==2.9.0
13
+ PyJWT==2.12.1
14
14
  PyNaCl==1.6.2
15
15
  python-gitlab==6.5.0
16
- requests==2.32.5
16
+ requests==2.33.0
17
17
  requests-oauthlib==2.0.0
18
18
  requests-toolbelt==1.0.0
19
- soupsieve==2.8.1
20
- tomli==1.2.3
19
+ soupsieve==2.8.3
20
+ tomli==2.4.1
21
21
  typing_extensions==4.15.0
22
22
  urllib3==2.6.3
23
- wrapt==2.0.1
23
+ wrapt==2.1.2
@@ -1,4 +1,4 @@
1
- FROM alpine:3.22
1
+ FROM alpine:3.23
2
2
 
3
3
  RUN apk add -q --no-cache bash git openssh-server tini && \
4
4
  echo 'root:root' | chpasswd && \
@@ -1,6 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: github-actions
4
- directory: /
5
- schedule:
6
- interval: weekly
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes