Skip to content

Feature/initial functionality#1

Open
sbglasius wants to merge 4 commits into
mainfrom
feature/initial-functionality
Open

Feature/initial functionality#1
sbglasius wants to merge 4 commits into
mainfrom
feature/initial-functionality

Conversation

@sbglasius
Copy link
Copy Markdown
Collaborator

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:

  • Added .github/dependabot.yml and .github/renovate.json to enable automated dependency updates for Gradle and GitHub Actions, with grouping and scheduling rules for efficient PR management. [1] [2]

Release notes and metadata:

  • Introduced .github/release-drafter.yml to automate release note generation and labeling, and added .github/workflows/release-notes.yml to trigger the release drafter workflow on relevant events. [1] [2]
  • Added .github/dependency-graph/external-references.yml to associate the repository with published Maven packages for GitHub's dependency graph.

CI/CD workflows:

  • Added .github/workflows/ci.yml to define build, test, publish, and documentation generation steps, including concurrency controls and environment setup.

Project automation scripts:

  • Added .github/scripts/update-contributors.groovy and .github/scripts/update-versions.groovy to automate updating the list of contributors and version metadata in project.yml, supporting release and documentation workflows. [1] [2]

sbglasius and others added 2 commits May 13, 2026 15:08
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sbglasius sbglasius requested review from jdaugherty and matrei May 13, 2026 15:29
@sbglasius
Copy link
Copy Markdown
Collaborator Author

@jdaugherty @matrei this is a mixup of grails-plugins/grails-server-timing and gpc/grails-export common functionality.
I hope this will make it to become a common ground for most plugins in grails-plugins and gpc
It has taken inspiration from https://github.com/micronaut-projects/micronaut-project-template/

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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=TRUE H2 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=TRUE URL 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.

Comment thread build-logic/src/main/groovy/config.publish.gradle
Comment thread plugin/src/main/groovy/grails/plugins/template/PluginTemplateGrailsPlugin.groovy Outdated
Comment thread docs/src/docs/introduction/acknowledgements.adoc Outdated
Comment thread docs/src/docs/introduction/sourceCode.adoc Outdated
Comment thread gradle/publish.gradle
Comment thread .skills/gradle-best-practices.md Outdated
Comment thread .skills/plugin-project.md Outdated
Comment thread .skills/example-apps.md Outdated
Comment thread .github/scripts/update-contributors.groovy
Comment thread .github/workflows/ci.yml
# 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"
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-template in settings.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.yml and code-style.yml, but this PR only adds ci.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]) << {
Comment on lines +1 to +5
plugins {
id 'config.app-run'
id 'config.compile'
id 'config.grails-assets'
id 'config.testing'
Comment on lines +59 to +64
coverageProjects.get().each {
it.tasks.withType(Test).configureEach { test ->
jacocoAggregatedReport.configure { JacocoReport report ->
report.executionData(test)
}
}
Comment thread LICENSE.txt
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
Comment on lines +8 to +9
<asset:stylesheet src="application.css"/>
<asset:stylesheet src="export.css"/>
Comment on lines +27 to +35
<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>
Comment thread project.yml
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"
Comment on lines +15 to +17
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
'''
Comment thread gradle/publish.gradle
Comment on lines +21 to +24
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',
@sbglasius sbglasius force-pushed the feature/initial-functionality branch from 3561960 to 135dcff Compare May 14, 2026 11:43
* 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)
@sbglasius sbglasius force-pushed the feature/initial-functionality branch from 135dcff to 886878f Compare May 22, 2026 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants