From 4ed12c6cdf5a3c7dea52f2cfd1e8b5f70afd4dd3 Mon Sep 17 00:00:00 2001 From: ogesaku Date: Tue, 17 Jan 2023 23:57:18 +0100 Subject: [PATCH 1/2] Update dependencies and pimp this repo with github community config files --- .github/CONTRIBUTING.md | 77 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 29 +++++++++ .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature-request.md | 18 ++++++ .github/PULL_REQUEST_TEMPLATE.md | 7 +++ .github/dependabot.yml | 7 ++- .github/labeler.yml | 29 +++++++++ .github/workflows/build.yml | 5 +- .github/workflows/pull-request.yml | 45 +++++++++++++ .github/workflows/stale.yml | 27 ++++++++ build.gradle.kts | 12 ++-- settings.gradle.kts | 7 ++- 12 files changed, 252 insertions(+), 12 deletions(-) create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature-request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/labeler.yml create mode 100644 .github/workflows/pull-request.yml create mode 100644 .github/workflows/stale.yml diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..0753b39 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,77 @@ +# Contributing + +## Commit messages +Before writing a commit message read [this article](https://chris.beams.io/posts/git-commit/). + +## Build +Before pushing any changes make sure project builds without errors with: +``` +./gradlew build +``` + +## Code conventions +This repository follows the [Kotlin coding conventions](https://kotlinlang.org/docs/reference/coding-conventions.html). +That are enforced by ktlint and [.editorconfig](../.editorconfig). + +You can check style with: +``` +./gradlew ktlintCheck +``` + +## Unit tests +We use [JUnit 5](https://junit.org/junit5/docs/current/user-guide/) for testing. +Please use the `Spec.kt` suffix on new test classes. + +## Validate changes locally +Before submitting a pull request test your changes on a local project. +There are few ways for testing locally a gradle plugin: + +**Publish plugin to the local maven repository** +Publish plugin to local repository with: +```sh +./gradlew publishToMavenLocal +``` + +...and add section to `settings.gradle.kts` to the sample project (that uses the tested plugin): +```kt +// Instruct a sample project to use maven local to find the plugin +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } +} +``` + +**Import plugin jar** +Add plugin jar to the sample project (that uses the tested plugin): + +```kt +buildscript { + dependencies { + classpath(files("/build/libs/integration-test-plugin.jar")) + } +} + +apply(plugin = "com.coditory.build") +``` + +## Validating plugin module metadata +The easiest way to validate plugin's module metadata is to publish the plugin to a dummy local repository. + +Add to `build.gradle.kts`: +``` +publishing { + repositories { + maven { + name = "localPluginRepository" + url = uri("./local-plugin-repository") + } + } +} +``` + +...and publish the plugin with: +``` +./gradlew publish -Pversion=0.0.1 +``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..bf8bac9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Reporting bugs and other issues +labels: bug +--- + + + +## Context + + + +## Expected Behavior + + +## Observed Behavior + + +## Steps to Reproduce + + + +## Your Environment + +* Plugin version: +* Java (and/or Kotlin) version: +* Gradle version: +* Gradle scan link (add `--scan` option when running the gradle task): +* Link to your project (if it's a public repository): diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000..279005b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,18 @@ +--- +name: Feature request +about: Suggest new features/changes +labels: feature +--- + + + +## Context + + + +## Expected Behavior + + + +## Current Behavior + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..14ebae2 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ +Thanks for submitting a pull request! + +- Please check that there is no similar [pull request](https://github.com/coditory/gradle-integration-test-plugin/pulls) already submitted +- Please provide enough information so that others can review your pull request +- Add a [reference](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository) to a related [issue](https://github.com/coditory/gradle-integration-test-plugin/issues) if possible + +For more information, see the [CONTRIBUTING guide](https://github.com/coditory/gradle-integration-test-plugin/blob/main/.github/CONTRIBUTING.md). diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dfa800a..9af0acf 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,4 +3,9 @@ updates: - package-ecosystem: "gradle" directory: "/" schedule: - interval: "monthly" + interval: "weekly" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000..e7d2412 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,29 @@ +source: + - "src/**" + +build: + - "**/*.gradle" + - "**/*.gradle.kts" + +ci: + - ".github/**" + +documentation: + - "**/*.md" + - "docs/**" + +license: + - "LICENSE" + +gradle: + - "gradlew" + - "gradlew.bat" + - ".gradle/**" + - "gradle/**" + +git: + - ".gitignore" + +style: + - ".editorconfig" + - ".idea/codeStyles/**" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e43ee2..a4a9914 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,13 +1,10 @@ name: Build -on: - workflow_dispatch: - push: +on: [pull_request, push, workflow_dispatch] jobs: build: runs-on: ubuntu-latest - if: github.event_name != 'push' || startsWith(github.ref, 'refs/tags/') == false steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 0000000..c65dc47 --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,45 @@ +name: "Pull Request" + +on: [ pull_request_target ] + +jobs: + label-pr: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - uses: actions/labeler@v4 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + + dependabot: + needs: [ build ] + runs-on: ubuntu-latest + if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }} + permissions: + pull-requests: write + contents: write + steps: + - name: Dependabot metadata + id: dependabot-metadata + uses: dependabot/fetch-metadata@v1.3.1 + + - name: Enable auto-merge for Dependabot PRs + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable auto-merge Dependabot PRs + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Approve patch and minor updates + if: ${{ steps.dependabot-metadata.outputs.update-type != 'version-update:semver-major' }} + run: gh pr review $PR_URL --approve -b "Pull request **approved** because **it includes a patch or minor update**" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..80d3d6f --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,27 @@ +name: 'Stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v7 + with: + # PRs + stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 10 days.' + days-before-pr-stale: 120 + close-pr-message: 'This PR was closed because it has been stalled for 10 days with no activity.' + days-before-pr-close: 10 + exempt-all-pr-assignees: true + exempt-pr-labels: 'awaiting-approval,work-in-progress' + stale-pr-label: 'stale' + # Issues + stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days.' + days-before-issue-stale: 60 + close-issue-message: 'This issue was closed because it has been stalled for 5 days with no activity.' + days-before-issue-close: 5 + exempt-issue-assignees: true + exempt-issue-labels: 'awaiting-approval,work-in-progress' + stale-issue-label: 'stale' diff --git a/build.gradle.kts b/build.gradle.kts index 3be1c3e..0c0747a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - kotlin("jvm") version "1.6.20" + kotlin("jvm") version "1.8.0" id("jacoco") id("com.github.kt3k.coveralls") version "2.12.0" id("com.gradle.plugin-publish") version "1.0.0" @@ -19,11 +19,11 @@ ktlint { } dependencies { - compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20") - testImplementation("org.assertj:assertj-core:3.23.1") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.1") - testImplementation("org.junit.jupiter:junit-jupiter-params:5.9.1") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.1") + compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0") + testImplementation("org.assertj:assertj-core:3.24.2") + testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2") + testImplementation("org.junit.jupiter:junit-jupiter-params:5.9.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") } group = "com.coditory.gradle" diff --git a/settings.gradle.kts b/settings.gradle.kts index ac90517..5937aae 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("com.gradle.enterprise").version("3.11.1") + id("com.gradle.enterprise").version("3.12.2") } rootProject.name = "integration-test-plugin" @@ -8,5 +8,10 @@ gradleEnterprise { buildScan { termsOfServiceUrl = "https://gradle.com/terms-of-service" termsOfServiceAgree = "yes" + + if (!System.getenv("CI").isNullOrEmpty()) { + publishAlways() + tag("CI") + } } } From 4bf5568af612326b49a6ce04f8e307bc58cdd6d0 Mon Sep 17 00:00:00 2001 From: ogesaku Date: Wed, 18 Jan 2023 00:13:17 +0100 Subject: [PATCH 2/2] Fix kotlin integration when another plugin applies integration-plugin --- .../gradle/integration/IntegrationTestTaskConfiguration.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/coditory/gradle/integration/IntegrationTestTaskConfiguration.kt b/src/main/kotlin/com/coditory/gradle/integration/IntegrationTestTaskConfiguration.kt index 9ba7aeb..61be061 100644 --- a/src/main/kotlin/com/coditory/gradle/integration/IntegrationTestTaskConfiguration.kt +++ b/src/main/kotlin/com/coditory/gradle/integration/IntegrationTestTaskConfiguration.kt @@ -10,7 +10,6 @@ import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.testing.Test import org.gradle.language.base.plugins.LifecycleBasePlugin -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension internal object IntegrationTestTaskConfiguration { fun apply(project: Project) { @@ -70,7 +69,10 @@ internal object IntegrationTestTaskConfiguration { } private fun configureKotlinCompilation(project: Project) { - val kotlin = project.extensions.getByType(KotlinJvmProjectExtension::class.java) + // coditory/gradle-build-plugin fails with `extensions.getByType` + // it's a special case when another kotlin plugin applies this plugin in tests + val kotlin = project.extensions.findByType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension::class.java) + ?: return kotlin.target.compilations.getByName(INTEGRATION_CONFIG_PREFIX) { val test = kotlin.target.compilations.getByName(SourceSet.TEST_SOURCE_SET_NAME) it.associateWith(test)