diff --git a/.github/ISSUE_TEMPLATE/module.yml b/.github/ISSUE_TEMPLATE/module.yml new file mode 100644 index 0000000..f5c3137 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/module.yml @@ -0,0 +1,43 @@ +name: Module completion +description: Track a TableauSharp module from API design through prerelease readiness. +title: "module: Complete SDK surface" +labels: ["enhancement"] +body: + - type: input + id: module + attributes: + label: Module + description: The SDK module or service area this issue tracks. + placeholder: Workbooks and Views + validations: + required: true + - type: textarea + id: scope + attributes: + label: Scope + description: Public API, Tableau REST endpoints, models, and examples included in this module. + placeholder: | + - List workbooks + - Get workbook by ID + - Publish workbook + validations: + required: true + - type: checkboxes + id: completion-gate + attributes: + label: Completion gate + description: Complete these items before publishing a prerelease for this module. + options: + - label: Public API reviewed for naming, cancellation tokens, async behavior, and Tableau REST parity. + - label: Request and response models document required, optional, and nullable fields. + - label: Unit tests cover request construction, response parsing, auth headers, validation, and error paths. + - label: Integration tests exist for at least one happy-path Tableau call and are skipped unless credentials are configured. + - label: Examples project includes a runnable sample for the module. + - label: README or docs include minimal usage for the module. + - label: CI passes restore, build, test, and pack. + - label: Publish workflow dry run succeeds for the target prerelease version. + - type: textarea + id: notes + attributes: + label: Notes + description: Known gaps, Tableau version assumptions, or release risks. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..96722ca --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,20 @@ +## Summary + +- + +## Module Completion Gate + +- [ ] Public API reviewed for naming, cancellation tokens, async behavior, and Tableau REST parity. +- [ ] Request and response models document required, optional, and nullable fields. +- [ ] Unit tests cover request construction, response parsing, auth headers, validation, and error paths. +- [ ] Integration tests exist for at least one happy-path Tableau call and are skipped unless credentials are configured. +- [ ] Examples project includes a runnable sample for the module. +- [ ] README or docs include minimal usage for the module. +- [ ] CI passes restore, build, test, and pack. +- [ ] Publish workflow dry run succeeds for the target prerelease version. + +For non-module PRs, mark unrelated items as `N/A` and keep the verification section concrete. + +## Verification + +- diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84a0cf2..f3bcde7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,6 +5,12 @@ on: branches: [master] pull_request: branches: [master] + workflow_dispatch: + inputs: + module: + description: 'Module being validated, for example Workbooks and Views' + required: false + type: string jobs: build-and-test: @@ -20,6 +26,10 @@ jobs: with: dotnet-version: '8.0.x' + - name: Module gate context + if: ${{ github.event_name == 'workflow_dispatch' && inputs.module != '' }} + run: echo "Validating module gate for ${{ inputs.module }}" + - name: Restore run: dotnet restore TableauSharp.sln diff --git a/README.md b/README.md index 7a7ffaa..e354061 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ For now, clone the repository: git clone https://github.com/teesofttech/TableauSharp.git ``` -Maintainers can publish prerelease packages from GitHub Actions. See [Release Process](docs/release.md). +Maintainers can publish prerelease packages from GitHub Actions after the [Module Completion Gate](docs/module-completion.md) is met. See [Release Process](docs/release.md). --- diff --git a/docs/module-completion.md b/docs/module-completion.md new file mode 100644 index 0000000..a77bbd4 --- /dev/null +++ b/docs/module-completion.md @@ -0,0 +1,41 @@ +# Module Completion Gate + +Use this gate before publishing a prerelease for a completed TableauSharp module and moving to the next module. + +## Required Before Prerelease + +- Public API reviewed for naming, cancellation tokens, async behavior, and Tableau REST parity. +- Request and response models identify required, optional, and nullable fields. +- Unit tests cover request construction, response parsing, auth headers, validation, and error paths. +- Integration tests cover at least one happy-path real Tableau call when credentials are configured. +- Examples project includes a runnable sample for the module. +- README or docs include minimal usage for the module. +- CI passes restore, build, test, and pack. +- Publish workflow dry run succeeds for the target prerelease version. + +## Integration Test Policy + +Integration tests are required for module completeness, but they must be opt-in. They should skip automatically unless real Tableau credentials are configured in the environment. + +Do not block ordinary pull requests or community contributions on unavailable Tableau credentials. Before a module prerelease, maintainers should run the integration tests in an environment that has credentials and record the result in the PR or release notes. + +## CI Gate + +Every PR runs the standard CI gate: + +```bash +dotnet restore TableauSharp.sln +dotnet build TableauSharp.sln --no-restore -c Release +dotnet test TableauSharp.sln --no-build -c Release +dotnet pack src/TableauSharp/TableauSharp.csproj --no-build -c Release -p:ContinuousIntegrationBuild=true +``` + +Maintainers can also run the CI workflow manually and provide the module name to make the validation run visible in GitHub Actions. + +## Publishing Sequence + +1. Complete the module issue checklist. +2. Merge the module PR after CI passes. +3. Run the **Publish to NuGet** workflow as a dry run for the prerelease version. +4. Publish from a version tag or run the workflow with `dry_run` set to `false`. +5. Move to the next module issue. diff --git a/docs/release.md b/docs/release.md index 96dc886..0392a13 100644 --- a/docs/release.md +++ b/docs/release.md @@ -6,6 +6,7 @@ TableauSharp publishes prerelease NuGet packages from GitHub Actions. - `NUGET_API_KEY` repository secret with permission to push `TableauSharp`. - Passing CI on `master`. +- Completed [Module Completion Gate](module-completion.md) for the module being released. - A prerelease version, for example `0.1.0-alpha.1`. ## Validate Locally