-
Notifications
You must be signed in to change notification settings - Fork 49
Docs: provide option to skip analysis in doc-check #282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -31,6 +31,14 @@ on: | |
| type: string | ||
| description: "Additional arguments that should be passed to docc" | ||
| default: "" | ||
| docs_check_targets: | ||
| type: string | ||
| description: "List of targets to check for documentation. Defaults to empty string." | ||
| default: "" | ||
| docs_check_analyze: | ||
| type: boolean | ||
| description: "Boolean to pass --analyze to the docs check. Defaults to true." | ||
| default: true | ||
| docs_check_macos_enabled: | ||
| type: boolean | ||
| description: "Boolean to enable the macOS docs check job. Defaults to false." | ||
|
|
@@ -51,6 +59,14 @@ on: | |
| type: string | ||
| description: "Additional arguments that should be passed to docc for the macOS docs check job." | ||
| default: "" | ||
| docs_check_macos_targets: | ||
| type: string | ||
| description: "List of targets to check for documentation. Defaults to empty string." | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here |
||
| default: "" | ||
| docs_check_macos_analyze: | ||
| type: boolean | ||
| description: "Boolean to pass --analyze to the macOS docs check. Defaults to true." | ||
| default: true | ||
| unacceptable_language_check_enabled: | ||
| type: boolean | ||
| description: "Boolean to enable the acceptable language check job. Defaults to true." | ||
|
|
@@ -99,13 +115,17 @@ on: | |
| type: string | ||
| description: "Linux command to execute before building the Swift package" | ||
| default: "" | ||
| concurrency_group_suffix: | ||
| type: string | ||
| description: "Optional suffix appended to the concurrency group. Use this when calling soundness.yml from a matrix so that matrix entries don't cancel each other." | ||
| default: "" | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| ## We are cancelling previously triggered workflow runs | ||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }}-soundness | ||
| group: ${{ github.workflow }}-${{ github.ref }}-soundness-${{ inputs.concurrency_group_suffix }} | ||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
|
|
@@ -187,8 +207,19 @@ jobs: | |
| - name: Run documentation check | ||
| env: | ||
| ADDITIONAL_DOCC_ARGUMENTS: ${{ inputs.docs_check_additional_arguments }} | ||
| DOCC_ANALYZE: ${{ inputs.docs_check_analyze }} | ||
| DOCS_TARGETS: ${{ inputs.docs_check_targets}} | ||
| SCRIPT_ROOT: ${{ steps.script_path.outputs.root }} | ||
| run: ${SCRIPT_ROOT}/.github/workflows/scripts/check-docs.sh | ||
| run: | | ||
| analyze_arg="" | ||
| doc_target_arg="" | ||
| if [[ "${DOCS_TARGETS}" != "" ]] ; then | ||
| doc_target_arg="--doc-targets ${DOCS_TARGETS}" | ||
| fi | ||
| if [[ "${DOCC_ANALYZE}" != "true" ]]; then | ||
| analyze_arg="--no-analyze" | ||
| fi | ||
| "${SCRIPT_ROOT}/.github/workflows/scripts/check-docs.sh" ${analyze_arg} ${doc_target_arg} --additional-docc-arguments ${ADDITIONAL_DOCC_ARGUMENTS} | ||
|
|
||
| docs-check-macos: | ||
| name: Documentation check (macOS) | ||
|
|
@@ -226,8 +257,19 @@ jobs: | |
| - name: Run documentation check | ||
| env: | ||
| ADDITIONAL_DOCC_ARGUMENTS: ${{ inputs.docs_check_macos_additional_arguments }} | ||
| DOCC_ANALYZE: ${{ inputs.docs_check_macos_analyze }} | ||
| DOCS_TARGETS: ${{ inputs.docs_check_macos_targets}} | ||
| SCRIPT_ROOT: ${{ steps.script_path.outputs.root }} | ||
| run: ${SCRIPT_ROOT}/.github/workflows/scripts/check-docs.sh | ||
| run: | | ||
| analyze_arg="" | ||
| doc_target_arg="" | ||
| if [[ "${DOCS_TARGETS}" != "" ]] ; then | ||
| doc_target_arg="--doc-targets ${DOCS_TARGETS}" | ||
| fi | ||
| if [[ "${DOCC_ANALYZE}" != "true" ]]; then | ||
| analyze_arg="--no-analyze" | ||
| fi | ||
| "${SCRIPT_ROOT}/.github/workflows/scripts/check-docs.sh" ${analyze_arg} ${doc_target_arg} --additional-docc-arguments ${ADDITIONAL_DOCC_ARGUMENTS} | ||
|
|
||
| unacceptable-language-check: | ||
| name: Unacceptable language check | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,162 @@ | ||
| # Documentation Check | ||
|
|
||
| The Soundness workflow can verify that your Swift package's [DocC](https://www.swift.org/documentation/docc/) documentation builds without warnings. Two jobs are available: | ||
|
|
||
| - **`docs-check`** — runs on Linux. Enabled by default. | ||
| - **`docs-check-macos`** — runs on a self-hosted macOS runner. Opt-in. | ||
|
|
||
| Running both lets you catch documentation issues that only surface on one toolchain. | ||
|
|
||
| Documentation warnings (and, by default, DocC analyzer findings) cause the job to fail. | ||
|
|
||
| ## Requirements | ||
|
|
||
| ### For both jobs | ||
|
|
||
| 1. **A `Package.swift`** (or any `Package*.swift`) at the repository root. | ||
|
|
||
| 2. **At least one documentation target**, supplied via either: | ||
| - the `docs_check_targets` / `docs_check_macos_targets` input, **or** | ||
| - a `documentation_targets` entry in a `.spi.yml` file at the repository root. | ||
|
Comment on lines
+19
to
+20
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we swap this since I expect the second one to be the one we want folks to use |
||
|
|
||
| If neither is provided, the job exits successfully without checking anything. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This might be a bit unexpected. Shouldn't this fail the job? |
||
|
|
||
| The `.spi.yml` file is also where you can declare per-target DocC parameters via `custom_documentation_parameters`. Read the [official documentation](https://swiftpackageindex.com/SwiftPackageIndex/SPIManifest/1.12.0/documentation/spimanifest/commonusecases) for the full schema. For example: | ||
|
|
||
| ```yaml | ||
| version: 1 | ||
| builder: | ||
| configs: | ||
| - documentation_targets: [MyLibrary, MyOtherLibrary] | ||
| custom_documentation_parameters: | ||
| - --include-extended-types | ||
| ``` | ||
|
|
||
| Target names must match real SwiftPM target names declared in `Package.swift`. | ||
|
|
||
| You do not need to add `swift-docc-plugin` to your package — CI provides it for you. | ||
|
|
||
| ### Additional requirement for the macOS job | ||
|
|
||
| A self-hosted runner must be registered with the label set `[self-hosted, macos, <version>, <arch>]` matching the values you pass to `docs_check_macos_version` and `docs_check_macos_arch`, with the requested Xcode version installed. | ||
|
|
||
| ## Enabling the check | ||
|
|
||
| Add (or extend) a workflow file under `.github/workflows/` in your repository: | ||
|
|
||
| ```yaml | ||
| name: Pull request | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: [main] | ||
|
|
||
| jobs: | ||
| soundness: | ||
| name: Soundness | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@<to-be-updated>> | ||
| with: | ||
| docs_check_enabled: true | ||
| ``` | ||
|
|
||
| This enables the Linux documentation check along with the other soundness checks. The macOS variant remains off unless you opt in. | ||
|
|
||
| ## Configuration | ||
|
|
||
| ### Linux job (`docs-check`) | ||
|
|
||
| | Input | Type | Default | Description | | ||
| |---|---|---|---| | ||
| | `docs_check_enabled` | boolean | `true` | Enable or disable the job. | | ||
| | `docs_check_container_image` | string | `swift:6.2-noble` | Docker image used to run the check. | | ||
| | `docs_check_targets` | string | `""` | Space-separated list of documentation targets to check. When empty, targets are read from `.spi.yml` (if present). | | ||
| | `docs_check_additional_arguments` | string | `""` | Extra arguments to pass to DocC. | | ||
| | `docs_check_analyze` | boolean | `true` | Set to `false` to skip DocC's analyzer pass. | | ||
| | `linux_pre_build_command` | string | `""` | Shell command to run before the check (e.g., installing system dependencies). | | ||
|
|
||
| ### macOS job (`docs-check-macos`) | ||
|
|
||
| | Input | Type | Default | Description | | ||
| |---|---|---|---| | ||
| | `docs_check_macos_enabled` | boolean | `false` | Enable or disable the job. | | ||
| | `docs_check_macos_version` | string | `tahoe` | macOS version label of the runner to target. | | ||
| | `docs_check_macos_arch` | string | `ARM64` | Architecture label of the runner to target. | | ||
| | `docs_check_macos_xcode_version` | string | `26.0` | Xcode version to use. | | ||
| | `docs_check_macos_targets` | string | `""` | Space-separated list of documentation targets to check. When empty, targets are read from `.spi.yml` (if present). | | ||
| | `docs_check_macos_additional_arguments` | string | `""` | Extra arguments to pass to DocC. | | ||
| | `docs_check_macos_analyze` | boolean | `true` | Set to `false` to skip DocC's analyzer pass. | | ||
|
|
||
| The macOS job requires a self-hosted runner registered with the label set `[self-hosted, macos, <version>, <arch>]`. | ||
|
|
||
| ## Common scenarios | ||
|
|
||
| ### Enable the macOS check | ||
|
|
||
| ```yaml | ||
| jobs: | ||
| soundness: | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main | ||
| with: | ||
| docs_check_macos_enabled: true | ||
| docs_check_macos_version: "tahoe" | ||
| docs_check_macos_arch: "ARM64" | ||
| docs_check_macos_xcode_version: "26.0" | ||
| ``` | ||
|
|
||
| ### Check only specific targets | ||
|
|
||
| By default the check documents every target listed in `.spi.yml`. To override that list without editing `.spi.yml`, provide the target names explicitly: | ||
|
|
||
| ```yaml | ||
| jobs: | ||
| soundness: | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main | ||
| with: | ||
| docs_check_targets: "MyLibrary MyOtherLibrary" | ||
| ``` | ||
|
|
||
| ### Pin a different Swift toolchain or pass extra DocC flags | ||
|
|
||
| ```yaml | ||
| jobs: | ||
| soundness: | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main | ||
| with: | ||
| docs_check_container_image: "swift:nightly-noble" | ||
| docs_check_additional_arguments: "--include-extended-types" | ||
| linux_pre_build_command: "apt-get update && apt-get install -y libxml2-dev" | ||
| ``` | ||
|
|
||
| ### Skip the DocC analyzer | ||
|
|
||
| ```yaml | ||
| jobs: | ||
| soundness: | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main | ||
| with: | ||
| docs_check_analyze: false | ||
| ``` | ||
|
|
||
| ### Disable the check | ||
|
|
||
| If you want to skip the documentation check entirely (regardless of whether your package has documentation targets), turn it off: | ||
|
|
||
| ```yaml | ||
| jobs: | ||
| soundness: | ||
| uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main | ||
| with: | ||
| docs_check_enabled: false | ||
| ``` | ||
|
|
||
| If you simply have no documentation targets to check, you can leave the job enabled — it will exit successfully without doing anything. | ||
|
|
||
| ## Troubleshooting | ||
|
|
||
| | Symptom | Likely cause | | ||
| |---|---| | ||
| | Job logs `No '.spi.yml' found, no documentation targets to check.` and exits successfully. | Neither `docs_check_targets` nor a `.spi.yml` was provided. Add one of them if you expected the check to run. | | ||
| | `Package.swift not found.` | The check expects a SwiftPM package at the repo root. | | ||
| | Warnings cause the job to fail. | Intentional. Resolve the DocC warnings, or pass DocC flags via `.spi.yml`'s `custom_documentation_parameters` to suppress them. | | ||
| | macOS job stays queued. | No self-hosted runner matches the requested labels. Verify the `version` and `arch` inputs against your runner inventory. | | ||
| | macOS job cannot find Xcode. | The requested Xcode version is not installed on the runner. | | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| version: 1 | ||
| builder: | ||
| configs: | ||
| - documentation_targets: | ||
| - theDocs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Empty string means that it looks at
.spi.ymlright?