Feature/initial functionality#1
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@jdaugherty @matrei this is a mixup of grails-plugins/grails-server-timing and gpc/grails-export common functionality. |
There was a problem hiding this comment.
Pull request overview
This PR bootstraps a Grails plugin repository with Gradle build logic, plugin/example/docs projects, release and dependency automation, and project metadata.
Changes:
- Adds multi-project Gradle setup, convention plugins, wrapper, SDK metadata, and publishing/docs configuration.
- Adds initial plugin descriptor, example Grails app, assets, documentation, and contributor/project metadata.
- Adds GitHub automation for CI, releases, release notes, dependency updates, contributor updates, and version index generation.
Reviewed changes
Copilot reviewed 65 out of 84 changed files in this pull request and generated 37 comments.
Show a summary per file
| File | Description |
|---|---|
settings.gradle |
Defines composite build, repositories, root/project names, and example app discovery. |
build.gradle |
Applies root-level docs and publish convention plugins. |
gradle.properties |
Defines shared project, Grails, tooling, and Gradle settings. |
.sdkmanrc |
Pins Java, Gradle, and Groovy SDK versions. |
.gitignore |
Adds standard Gradle/IDE/system ignore rules. |
.editorconfig |
Adds repository formatting rules. |
README.md |
Adds project overview and installation instructions. |
CONTRIBUTING.md |
Adds contributor setup, build, testing, and process docs. |
AGENTS.md |
Adds AI/developer guidance for repository structure and conventions. |
LICENSE.txt |
Adds Apache 2.0 license text. |
project.yml |
Adds project metadata, contributors, and version metadata. |
gradlew |
Adds POSIX Gradle wrapper script. |
gradlew.bat |
Adds Windows Gradle wrapper script. |
gradle/wrapper/gradle-wrapper.properties |
Configures Gradle wrapper distribution. |
gradle/publish.gradle |
Adds legacy publishing/docs Gradle script. |
gradle/documentation.gradle |
Adds legacy documentation Gradle script. |
build-logic/settings.gradle |
Configures convention-plugin composite build repositories. |
build-logic/build.gradle |
Adds dependencies for convention plugins. |
build-logic/src/main/groovy/config.app-run.gradle |
Adds debug JVM flags for bootRun. |
build-logic/src/main/groovy/config.compile.gradle |
Configures Java/Groovy compilation. |
build-logic/src/main/groovy/config.docs.gradle |
Adds root documentation aggregation tasks. |
build-logic/src/main/groovy/config.example-app.gradle |
Composes example app build conventions. |
build-logic/src/main/groovy/config.grails-assets.gradle |
Configures asset pipeline and WebJar assets. |
build-logic/src/main/groovy/config.grails-plugin.gradle |
Configures Grails plugin and asset packaging. |
build-logic/src/main/groovy/config.project-metadata.gradle |
Loads metadata from project.yml. |
build-logic/src/main/groovy/config.publish-root.gradle |
Configures root publishing workaround and publishable projects. |
build-logic/src/main/groovy/config.publish.gradle |
Adds signing-disable behavior for publishing. |
build-logic/src/main/groovy/config.testing.gradle |
Configures test logging and JUnit Platform tests. |
plugin/build.gradle |
Adds plugin module dependencies and publishing metadata. |
plugin/src/main/groovy/grails/plugins/template/PluginTemplateGrailsPlugin.groovy |
Adds Grails plugin descriptor. |
plugin/grails-app/conf/plugin.yml |
Adds plugin configuration namespace. |
plugin/grails-app/assets/stylesheets/export.css |
Adds plugin export-related stylesheet. |
plugin/grails-app/assets/images/skin/readme.txt |
Adds attribution for bundled Silk icons. |
examples/app1/build.gradle |
Adds example app build and dependencies. |
examples/app1/grails-app/conf/application.yml |
Adds example app Grails, server, MIME, view, and datasource config. |
examples/app1/grails-app/conf/logback.xml |
Adds example app logging configuration. |
examples/app1/grails-app/init/grails/plugins/template/Application.groovy |
Adds example app entry point. |
examples/app1/grails-app/controllers/grails/plugins/template/TestController.groovy |
Adds example test controller. |
examples/app1/grails-app/controllers/grails/plugins/template/UrlMappings.groovy |
Adds example app URL mappings. |
examples/app1/grails-app/views/layouts/main.gsp |
Adds example app main layout. |
examples/app1/grails-app/views/test/index.gsp |
Adds example runtime status page. |
examples/app1/grails-app/assets/stylesheets/application.css |
Adds example app CSS manifest. |
examples/app1/grails-app/assets/stylesheets/errors.css |
Adds error page styles. |
examples/app1/grails-app/assets/stylesheets/grails.css |
Adds scaffold/table styles. |
examples/app1/grails-app/assets/stylesheets/welcome.css |
Adds welcome page styles. |
examples/app1/grails-app/assets/images/advancedgrails.svg |
Adds example app icon asset. |
examples/app1/grails-app/assets/images/community.svg |
Adds example app icon asset. |
examples/app1/grails-app/assets/images/documentation.svg |
Adds example app icon asset. |
examples/app1/grails-app/assets/images/grails.svg |
Adds Grails logo asset. |
examples/app1/grails-app/assets/images/java.svg |
Adds Java logo asset. |
examples/app1/grails-app/assets/images/spring-boot.svg |
Adds Spring Boot logo asset. |
examples/app1/grails-app/assets/images/spring.svg |
Adds Spring logo asset. |
docs/build.gradle |
Configures Asciidoctor documentation build. |
docs/src/docs/index.adoc |
Adds documentation root page. |
docs/src/docs/index.tmpl |
Adds GitHub Pages version-index template. |
docs/src/docs/introduction.adoc |
Adds introduction section. |
docs/src/docs/introduction/acknowledgements.adoc |
Adds contributor acknowledgements. |
docs/src/docs/introduction/license.adoc |
Adds license documentation. |
docs/src/docs/introduction/sourceCode.adoc |
Adds source-code/issues documentation. |
.skills/repository-structure.md |
Adds repository structure guidance. |
.skills/plugin-project.md |
Adds plugin project guidance. |
.skills/gradle-best-practices.md |
Adds Gradle convention guidance. |
.skills/example-apps.md |
Adds example app guidance. |
.github/dependabot.yml |
Adds Dependabot configuration. |
.github/renovate.json |
Adds Renovate configuration. |
.github/release-drafter.yml |
Adds release note drafting configuration. |
.github/dependency-graph/external-references.yml |
Adds external Maven package association. |
.github/scripts/update-contributors.groovy |
Adds contributor metadata update script. |
.github/scripts/update-versions.groovy |
Adds version metadata and pages index generation script. |
.github/workflows/ci.yml |
Adds CI, snapshot publishing, docs publishing, and index update workflow. |
.github/workflows/release-notes.yml |
Adds Release Drafter workflow. |
.github/workflows/release.yml |
Adds release publishing/docs/version bump workflow. |
.github/workflows/update-contributors.yml |
Adds contributor update workflow. |
.github/workflows/update-versions.yml |
Adds version index update workflow. |
Comments suppressed due to low confidence (2)
examples/app1/grails-app/conf/application.yml:88
- The test datasource repeats the unsupported
MVCC=TRUEH2 setting, so integration tests will fail during datasource initialization on the H2 version pulled in by Grails 7.
examples/app1/grails-app/conf/application.yml:92 - The production datasource also uses the removed H2
MVCC=TRUEURL parameter. If this profile is started, H2 will reject the connection URL before the app can boot.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # only run the publishing task on this repo (not on forks) | ||
| if: github.repository_owner == 'gpc' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') | ||
| needs: build | ||
| name: "Publish Snapshot" |
cdd5fa0 to
921eab6
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 72 out of 91 changed files in this pull request and generated 22 comments.
Comments suppressed due to low confidence (4)
CONTRIBUTING.md:118
- These coding standards mention metric-name validation and
System.nanoTime()timing requirements, but the template plugin introduced here has no metrics or timing feature. This appears to be copied from a different plugin and will send contributors toward irrelevant requirements.
- Metric names must conform to [RFC 7230 token rules](https://tools.ietf.org/html/rfc7230#section-3.2.6)
- Use `System.nanoTime()` for timing precision
.skills/repository-structure.md:126
- The documented example-app dependency still uses
project(':grails-export'), but the actual plugin project is named:grails-plugin-templateinsettings.gradle. Following this guidance would make a new example app fail dependency resolution.
All tests requiring a running Grails application live in example apps under `examples/`. Each app:
- Depends on the plugin via `implementation project(':grails-export')`
- Contains test controllers and views that exercise the plugin
- Contains integration tests under `src/integration-test/`
.skills/repository-structure.md:19
- The documented workflow list includes
code-coverage.ymlandcode-style.yml, but this PR only addsci.yml,release.yml,release-notes.yml, and update workflows. Referencing workflows that do not exist makes the repository guide inaccurate.
│ │ ├── ci.yml # Build, test, publish snapshots
│ │ ├── code-coverage.yml # Create a code coverage report
│ │ ├── code-style.yml # Check code style
│ │ ├── release.yml # Multi-stage release pipeline
│ │ └── release-notes.yml # Automated release draft notes
gradle/publish.gradle:66
- This uses the removed Gradle
<<task action syntax, so the script will fail on the Gradle 8.14.4 wrapper if it is applied. Since the active build already uses convention plugins for docs publishing, remove or modernize this legacy script to avoid giving maintainers a broken path.
| backends 'html5', 'pdf' | ||
| } | ||
|
|
||
| task docs(dependsOn: [asciidoc]) << { |
| plugins { | ||
| id 'config.app-run' | ||
| id 'config.compile' | ||
| id 'config.grails-assets' | ||
| id 'config.testing' |
| coverageProjects.get().each { | ||
| it.tasks.withType(Test).configureEach { test -> | ||
| jacocoAggregatedReport.configure { JacocoReport report -> | ||
| report.executionData(test) | ||
| } | ||
| } |
| same "printed page" as the copyright notice for easier | ||
| identification within third-party archives. | ||
|
|
||
| Copyright 2009 Andreas Schmitt |
| package grails.plugins.template | ||
|
|
||
| class TestController { | ||
| def exportService |
| <asset:stylesheet src="application.css"/> | ||
| <asset:stylesheet src="export.css"/> |
| <module name="ImportOrderCheck"> | ||
| <!-- Import groups: JAVA, JAVAX, GROOVY, JAKARTA, OTHER, SPRING, GRAILS, STATIC --> | ||
| <property name="groups" | ||
| value="java,javax,/^(groovy|org\.apache\.groovy|org\.codehaus\.groovy)\..+/,jakarta,*,/(^io\.spring|org\.springframework)\..+/,/^(grails|org\.apache\.grails|org\.grails)\..+/"/> | ||
| <property name="ordered" value="true"/> | ||
| <property name="option" value="bottom"/> | ||
| <property name="separated" value="true"/> | ||
| <property name="sortStaticImportsAlphabetically" value="true"/> | ||
| </module> |
| project: | ||
| name: "grails-plugin-template" | ||
| title: "Grails Plugin Template" | ||
| description: "A Grails plugin Template, that can be used either as a starting point for a new grails project, or as base for existing plugins that needs a uniform release process" |
| def description = '''\ | ||
| A Grails plugin Template, that can be used either as a starting point for a new grails project, or as base for existing plugins that needs a uniform release process | ||
| ''' |
| title = "Grails Export Plugin" | ||
| desc = "This plugin offers export functionality supporting different formats e.g. CSV, Excel, Open Document Spreadsheet, PDF and XML and can be extended to add additional formats." | ||
|
|
||
| developers = [ graemerocher: 'Graeme Rocher', |
3561960 to
135dcff
Compare
* Missing codestyle and codecoverage added, fixing codenarc violations * correct plugin test task path and load project metadata in docs build * allow publish jobs for both grails-plugins and gpc orgs * Potential fix for pull request finding * correct contributor name typo and duplicated wording in docs * correct typo in documentation URL (templatae -> template)
135dcff to
886878f
Compare
This pull request adds comprehensive automation and configuration for dependency management, release drafting, CI/CD workflows, and project metadata. The main changes introduce Dependabot and Renovate for automated dependency updates, configure release note generation, set up CI workflows for building and publishing, and add scripts for updating contributors and version information in
project.yml.The most important changes are:
Dependency management automation:
.github/dependabot.ymland.github/renovate.jsonto enable automated dependency updates for Gradle and GitHub Actions, with grouping and scheduling rules for efficient PR management. [1] [2]Release notes and metadata:
.github/release-drafter.ymlto automate release note generation and labeling, and added.github/workflows/release-notes.ymlto trigger the release drafter workflow on relevant events. [1] [2].github/dependency-graph/external-references.ymlto associate the repository with published Maven packages for GitHub's dependency graph.CI/CD workflows:
.github/workflows/ci.ymlto define build, test, publish, and documentation generation steps, including concurrency controls and environment setup.Project automation scripts:
.github/scripts/update-contributors.groovyand.github/scripts/update-versions.groovyto automate updating the list of contributors and version metadata inproject.yml, supporting release and documentation workflows. [1] [2]