12 Commits

Author SHA1 Message Date
7e2a9caaf3 fix(build): bump dnsmasq to 2.91-r0 (#14)
All checks were successful
Release / Tag release (push) Successful in 12s
Release / Create Release (push) Successful in 4s
Release / Publish Docker Images (push) Successful in 58s
The proposed change updates the `dnsmasq` version in the Dockerfile.

Specifically, the line:

```diff
-RUN apk --no-cache add dnsmasq=2.90-r3
+RUN apk --no-cache add dnsmasq=2.91-r0
```

is modified.  This line installs the `dnsmasq` package using Alpine Package Keeper (apk). The change updates the version of `dnsmasq` from `2.90-r3` to `2.91-r0`. This likely incorporates bug fixes, security updates, or new features present in the newer version.

Reviewed-on: #14
2025-05-30 22:46:51 +02:00
622eedb7c0 fix(ci): fix release workflow (#13)
Some checks failed
Release / Tag release (push) Successful in 11s
Release / Create Release (push) Successful in 9s
Release / Publish Docker Images (push) Failing after 48s
Okay, here's a breakdown of the changes introduced by the provided Git diff:

**Overall Goal:**

The primary goal of this change is to automate the release process using a scheduled trigger (cron) and pre-existing tags, decoupling it from direct `push` events and leveraging a separate job to generate the release tag. This makes the release process more controlled and predictable.

**Key Changes:**

1.  **Trigger Mechanism Changed:**

    *   The trigger for the workflow has been altered from `push` events on `master` or `main` branches to a scheduled `cron` job.
    *   `on:` section now contains only `workflow_dispatch` and `schedule`:
        ```yaml
        on:
          workflow_dispatch:
          schedule:
            - cron: '0 9 * * 0'
        ```
    *   The `cron` expression `'0 9 * * 0'` means the workflow will run every Sunday at 9:00 AM UTC.

2.  **Tag Creation Job Introduced:**

    *   A new job named `tag` has been added. This job is responsible for creating the release tag.
    *   It reuses a workflow from `https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/release-with-tag.yaml@main`. This implies that workflow handles the logic for determining the tag name and creating the tag in the repository.

        ```yaml
        tag:
          name: Tag release
          uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/release-with-tag.yaml@main
        ```

3.  **`create_release` Job Modified:**

    *   The `create_release` job now depends on the `tag` job (`needs: tag`).
    *   It now uses a different reusable workflow: `https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release-preexisting-tag.yaml@main`. This new workflow is designed to create a release based on a pre-existing tag.
    *   It receives the tag name and changelog from the `tag` job outputs:

        ```yaml
        create_release:
          name: Create Release
          needs: tag
          uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release-preexisting-tag.yaml@main
          with:
            tag: ${{ needs.tag.outputs.tag_name }}
            body: ${{ needs.tag.outputs.changelog }}
          secrets:
            ACTIONS_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
        ```

4.  **`print_release` Job Removed:**

    *   The `print_release` job has been removed. This job simply echoed the release name and was likely used for debugging or informational purposes.  It's not essential to the release process itself.

5.  **`create_docker` Job Updated:**

    *   The `create_docker` job now depends on both `tag` and `create_release` jobs.
    *   The `ref` in the `actions/checkout` step is updated to use `needs.tag.outputs.tag_name` to checkout the tag created in the `tag` job.
    *   The `tags` value in the `docker/metadata-action` step is also updated to use `needs.tag.outputs.tag_name`.

        ```yaml
        create_docker:
          name: Publish Docker Images
          runs-on: ubuntu-latest
          needs: [tag, create_release]
          steps:
            # ... other steps ...
            - name: Checkout code
              uses: actions/checkout@v4.2.2
              with:
                fetch-depth: 0
                ref: ${{ needs.tag.outputs.tag_name }}
            # ... other steps ...
            - name: Extract Docker metadata
              id: meta
              uses: docker/metadata-action@v5
              with:
                tags: type=semver,pattern=v{{version}},value=${{ needs.tag.outputs.tag_name }}
                images: |
                  ghcr.io/${{ vars.GHCR_USERNAME }}/${{ steps.split.outputs.repo }}
                  ${{ vars.PACKAGES_REGISTRY_URL }}/${{ gitea.repository }}
        ```

**Impact and Reasoning:**

*   **Scheduled Releases:**  The shift to a cron schedule ensures releases happen regularly and predictably, rather than being tied directly to code commits.
*   **Decoupled Tag Creation:** The `tag` job isolates the tag creation logic.  This could involve automated version bumping based on commit messages or other criteria (details are in the reusable workflow it uses).  This separation of concerns makes the overall workflow more maintainable.
*   **Using Pre-existing Tags for Release:** The `create_release-preexisting-tag.yaml` workflow suggests that the release creation is now based on the tag created by the `tag` job. This is useful because the tag might contain metadata like the version number, which is then used to create the release.
*   **Docker Image Publishing Based on Tag:** The `create_docker` job ensures that Docker images are built and published based on the release tag, maintaining consistency between the release and the published artifacts.

In summary, the changes represent a move towards a more automated and structured release process driven by a schedule and a separate tag creation step.

Reviewed-on: #13
2025-05-30 22:42:25 +02:00
a02480ca07 chore(deps): update alpine docker tag to v3.22 (#12)
Some checks failed
Release / Create Release (push) Successful in 23s
Release / Print Release (push) Successful in 6s
Release / Publish Docker Images (push) Failing after 1m24s
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| alpine | final | minor | `3.21` -> `3.22` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy45IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: #12
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
Co-committed-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
2025-05-30 22:29:35 +02:00
7981877152 chore(deps): update sonarsource/sonarqube-scan-action action to v5.2.0 (#11)
Some checks failed
Release / Create Release (push) Successful in 1m11s
Release / Print Release (push) Successful in 20s
Release / Publish Docker Images (push) Failing after 5m2s
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [SonarSource/sonarqube-scan-action](https://github.com/SonarSource/sonarqube-scan-action) | action | minor | `v5.1.0` -> `v5.2.0` |

---

### Release Notes

<details>
<summary>SonarSource/sonarqube-scan-action (SonarSource/sonarqube-scan-action)</summary>

### [`v5.2.0`](https://github.com/SonarSource/sonarqube-scan-action/releases/tag/v5.2.0)

[Compare Source](https://github.com/SonarSource/sonarqube-scan-action/compare/v5.1.0...v5.2.0)

#### What's Changed

-   SQSCANGHA-90 remove mend dead conf by [@&#8203;pierre-guillot-gh](https://github.com/pierre-guillot-gh) in https://github.com/SonarSource/sonarqube-scan-action/pull/184
-   SQSCANGHA-89 Attempt to fix command injection by [@&#8203;henryju](https://github.com/henryju) in https://github.com/SonarSource/sonarqube-scan-action/pull/186
-   SQSCANGHA-93 Fix madhead/semver-utils' version by [@&#8203;csaba-feher-sonarsource](https://github.com/csaba-feher-sonarsource) in https://github.com/SonarSource/sonarqube-scan-action/pull/187
-   SQSCANGHA-94 Update version update logic by [@&#8203;csaba-feher-sonarsource](https://github.com/csaba-feher-sonarsource) in https://github.com/SonarSource/sonarqube-scan-action/pull/188
-   SQSCANGHA-92 Validate scanner version by [@&#8203;csaba-feher-sonarsource](https://github.com/csaba-feher-sonarsource) in https://github.com/SonarSource/sonarqube-scan-action/pull/189

**Full Changelog**: https://github.com/SonarSource/sonarqube-scan-action/compare/v5...v5.2.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4wLjkiLCJ1cGRhdGVkSW5WZXIiOiI0MC4wLjkiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInR5cGUvZGVwZW5kZW5jaWVzIl19-->

Reviewed-on: #11
Co-authored-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
Co-committed-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
2025-05-06 21:19:11 +02:00
0121c607be chore(deps): update sonarsource/sonarqube-scan-action action to v5.1.0 (#10)
Some checks failed
Release / Create Release (push) Successful in 30s
Release / Print Release (push) Successful in 5s
Release / Publish Docker Images (push) Failing after 1m56s
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [SonarSource/sonarqube-scan-action](https://github.com/SonarSource/sonarqube-scan-action) | action | minor | `v5.0.0` -> `v5.1.0` |

---

### Release Notes

<details>
<summary>SonarSource/sonarqube-scan-action (SonarSource/sonarqube-scan-action)</summary>

### [`v5.1.0`](https://github.com/SonarSource/sonarqube-scan-action/releases/tag/v5.1.0)

[Compare Source](https://github.com/SonarSource/sonarqube-scan-action/compare/v5.0.0...v5.1.0)

#### What's Changed

-   Update SonarScanner CLI to 7.1.0.4889 to support sonar.region=us by [@&#8203;github-actions](https://github.com/github-actions) in https://github.com/SonarSource/sonarqube-scan-action/pull/183

**Full Changelog**: https://github.com/SonarSource/sonarqube-scan-action/compare/v5.0.0...v5.1.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMTEuNCIsInVwZGF0ZWRJblZlciI6IjM5LjIxMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: #10
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
Co-committed-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
2025-03-24 16:45:34 +01:00
34853ccd5d chore(deps): update sonarsource/sonarqube-scan-action action to v5 (#7)
Some checks failed
Release / Create Release (push) Successful in 8s
Release / Print Release (push) Successful in 2s
Release / Publish Docker Images (push) Failing after 38s
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [SonarSource/sonarqube-scan-action](https://github.com/SonarSource/sonarqube-scan-action) | action | major | `v4.2.1` -> `v5.0.0` |

---

### Release Notes

<details>
<summary>SonarSource/sonarqube-scan-action (SonarSource/sonarqube-scan-action)</summary>

### [`v5.0.0`](https://github.com/SonarSource/sonarqube-scan-action/releases/tag/v5.0.0)

[Compare Source](https://github.com/SonarSource/sonarqube-scan-action/compare/v4.2.1...v5.0.0)

#### What's Changed

-   SQSCANGHA-81 Update SonarScanner CLI to 7.0.2.4839 by [@&#8203;github-actions](https://github.com/github-actions) in https://github.com/SonarSource/sonarqube-scan-action/pull/175

**Full Changelog**: https://github.com/SonarSource/sonarqube-scan-action/compare/v4...v5.0.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzEuMyIsInVwZGF0ZWRJblZlciI6IjM5LjE3MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: #7
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
Co-committed-by: Renovate [BOT] <renovate-bot@git.tainton.uk>
2025-02-17 12:02:10 +01:00
c4d44f4299 fix(ci): update renovate.json (#9)
Some checks failed
Release / Print Release (push) Has been cancelled
Release / Publish Docker Images (push) Has been cancelled
Release / Create Release (push) Has been cancelled
Reviewed-on: #9
2025-02-17 11:54:10 +01:00
7bb6af0145 Update .gitea/workflows/release.yml
All checks were successful
Validate PR Title / validate (pull_request) Successful in 1m55s
CI / ci (pull_request) Successful in 4m18s
Release / Create Release (push) Successful in 12s
Release / Print Release (push) Successful in 3s
Release / Publish Docker Images (push) Successful in 51s
2025-02-09 23:04:10 +01:00
c69ca9762e Update .gitea/workflows/release.yml
Some checks failed
Validate PR Title / validate (pull_request) Successful in 32s
CI / ci (pull_request) Successful in 1m18s
Release / Test (push) Failing after 31m59s
Release / Create Release (push) Has been cancelled
Release / Print Release (push) Has been cancelled
Release / Publish Docker Images (push) Has been cancelled
2025-02-09 22:13:04 +01:00
7c0587314e feat(ci): switch to self-hosted SonarQube
Some checks failed
Validate PR Title / validate (pull_request) Successful in 37s
CI / ci (pull_request) Successful in 1m35s
Release / Test (push) Failing after 1s
Release / Create Release (push) Has been skipped
Release / Print Release (push) Has been skipped
Release / Publish Docker Images (push) Has been skipped
2025-02-09 21:08:54 +00:00
c3e96dff4e feat(dependencies): Enable Renovate
All checks were successful
Release / Test (push) Successful in 2m41s
Release / Create Release (push) Successful in 10s
Release / Print Release (push) Successful in 3s
Release / Publish Docker Images (push) Successful in 53s
2025-01-15 23:14:48 +00:00
5a17bbdb7b fix(release): add docker build directly to workflow
Some checks failed
CI / validate_pr_title (pull_request) Failing after 1s
CI / ci (pull_request) Failing after 33s
Release / Test (push) Successful in 46s
Release / Create Release (push) Successful in 11s
Release / Print Release (push) Successful in 3s
Release / Publish Docker Images (push) Successful in 58s
2025-01-15 22:43:13 +00:00
11 changed files with 153 additions and 32 deletions

View File

@ -8,15 +8,31 @@ on:
- reopened
jobs:
validate_pr_title:
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/conventional-commit.yml@main
with:
commit_message: ${{ gitea.event.pull_request.title }}
ci:
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/ci-docker.yml@main
with:
python-version: 3.13
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
- uses: hadolint/hadolint-action@v3.1.0
with:
dockerfile: Dockerfile
output-file: hadolint.out
format: sonarqube
no-fail: true
- name: SonarQube Scan
uses: SonarSource/sonarqube-scan-action@v5.2.0
env:
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }}
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
- name: Snyk Vulnerability Scan
uses: snyk/actions/python@master
continue-on-error: true # Sometimes vulns aren't immediately fixable
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: test --all-projects

View File

@ -0,0 +1,16 @@
name: Validate PR Title
on:
pull_request:
types:
- opened
- edited
- synchronize
- reopened
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: https://git.tainton.uk/actions/conventional-commits-check-action@v1.2.4
with:
commit-message: ${{ gitea.event.pull_request.title }}

View File

@ -3,29 +3,100 @@ on:
workflow_dispatch:
push:
branches:
- master
- main
# schedule:
# - cron: '0 9 * * 0'
jobs:
test:
name: Test
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/ci-docker.yml@main
with:
python-version: 3.13
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
tag:
name: Tag release
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/release-with-tag.yaml@main
create_release:
name: Create Release
needs: test
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release.yml@main
needs: tag
uses: https://git.tainton.uk/actions/gha-workflows/.gitea/workflows/create-release-preexisting-tag.yaml@main
with:
tag: ${{ needs.tag.outputs.tag_name }}
body: ${{ needs.tag.outputs.changelog }}
secrets:
ACTIONS_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
print_release:
name: Print Release
create_docker:
name: Publish Docker Images
runs-on: ubuntu-latest
needs: create_release
needs: [tag, create_release]
steps:
- run: echo "Created release ${{ needs.create_release.outputs.release_name }}."
- name: Update Docker configuration
continue-on-error: true
run: |
mkdir -p /etc/default
mkdir -p /etc/docker
touch -a /etc/default/docker
touch -a /etc/docker/daemon.json
echo "DOCKER_OPTS=\"--insecure-registry ${{ vars.PACKAGES_REGISTRY_URL }}\"" >> /etc/default/docker
echo "{\"insecure-registries\": [\"${{ vars.PACKAGES_REGISTRY_URL }}\"]}" > /etc/docker/daemon.json
- name: Get repo name
id: split
run: echo "repo=${REPO##*/}" >> "$GITEA_OUTPUT"
env:
REPO: ${{ gitea.repository }}
- name: Check out repository
uses: actions/checkout@v4.2.2
with:
fetch-depth: 0
ref: ${{ needs.tag.outputs.tag_name }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Gitea Container Registry
uses: docker/login-action@v3
with:
registry: ${{ vars.PACKAGES_REGISTRY_URL }}
username: ${{ vars.ACTIONS_USERNAME }}
password: ${{ secrets.ACTIONS_TOKEN }}
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ vars.GHCR_USERNAME }}
password: ${{ secrets.GHCR_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
tags: type=semver,pattern=v{{version}},value=${{ needs.tag.outputs.tag_name }}
images: |
ghcr.io/${{ vars.GHCR_USERNAME }}/${{ steps.split.outputs.repo }}
${{ vars.PACKAGES_REGISTRY_URL }}/${{ gitea.repository }}
- name: Print metadata
run: |
printf "Annotations:\n${{ steps.meta.outputs.annotations }}"
echo ""
printf "Labels:\n${{ steps.meta.outputs.labels }}"
echo ""
printf "Tags:\n${{ steps.meta.outputs.tags }}"
- name: Build images
uses: docker/build-push-action@v6
with:
context: .
push: false
load: true
annotations: ${{ steps.meta.outputs.annotations }}
labels: ${{ steps.meta.outputs.labels }}
tags: ${{ steps.meta.outputs.tags }}
- name: Push images
run: |
strtags="${{ steps.meta.outputs.tags }}"
readarray -t lines <<<"$strtags"
for element in "${lines[@]}"; do docker push "$element"; done
unset strtags lines

View File

@ -1,4 +1,4 @@
FROM alpine:3.21 AS build
FROM alpine:3.22 AS build
LABEL maintainer="Luke Tainton <luke@tainton.uk>"
FROM build AS webproc
@ -9,7 +9,7 @@ RUN apk add --no-cache curl && \
chmod +x /usr/local/bin/webproc
FROM build AS dnsmasq
RUN apk --no-cache add dnsmasq=2.90-r3
RUN apk --no-cache add dnsmasq=2.91-r0
COPY --from=webproc /usr/local/bin/webproc /usr/local/bin/webproc
ENTRYPOINT ["webproc","-o","restart","-c","/etc/dnsmasq.conf","-c","/etc/hosts","-c","/etc/resolv.conf","--","dnsmasq","-k","--log-facility=-"]
EXPOSE 53/udp 8080/tcp

20
renovate.json Normal file
View File

@ -0,0 +1,20 @@
{
"assignAutomerge": false,
"assigneesFromCodeOwners": false,
"dependencyDashboardAutoclose": true,
"extends": ["config:recommended", "docker:enableMajor"],
"ignorePaths": ["**/.archive/**"],
"labels": ["type/dependencies"],
"platformCommit": "enabled",
"rebaseWhen": "behind-base-branch",
"rollbackPrs": true,
"vulnerabilityAlerts": {
"commitMessagePrefix": "[SECURITY] ",
"enabled": true,
"labels": ["security"],
"prCreation": "immediate"
},
"lockFileMaintenance": {
"enabled": true
}
}

View File

@ -1,7 +1,5 @@
sonar.organization=luketainton
sonar.projectKey=luketainton_docker-dnsmasq
sonar.projectKey=docker-dnsmasq
sonar.projectName=docker-dnsmasq
sonar.projectVersion=1.0
sonar.docker.hadolint.reportPaths=hadolint.out
sonar.sources=Dockerfile
sonar.exclusions=,.github/**,.gitignore,CODEOWNERS,CHANGELOG.md,LICENSE.md,README.md,renovate.json
sonar.exclusions=.archive/**,.gitea/**,config/**,.gitignore,README.md,renovate.json,docker-compose.yml