Skip to content
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

Pimp this repo #34

Merged
merged 2 commits into from
Jan 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -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("<PLUGIN_PROJECT_PATH>/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
```
29 changes: 29 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
name: Bug report
about: Reporting bugs and other issues
labels: bug
---
<!-- The bug you're experiencing might have already be reported! -->
<!-- Please search in the [issues](https://github.com/coditory/gradle-integration-test-plugin/issues) before creating one. -->

## Context
<!-- How has this issue affected you? What are you trying to accomplish? -->
<!-- Providing context helps us come up with a solution that is most useful in the real world -->

## Expected Behavior
<!-- Tell us what should happen -->

## Observed Behavior
<!-- Tell us what happens instead of the expected behavior -->

## Steps to Reproduce
<!-- Provide a link to a live example, or an unambiguous set of steps to -->
<!-- reproduce this bug. Include code to reproduce, if relevant -->

## Your Environment
<!-- Include as many relevant details about the environment you experienced the bug in -->
* 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):
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
18 changes: 18 additions & 0 deletions .github/ISSUE_TEMPLATE/feature-request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: Feature request
about: Suggest new features/changes
labels: feature
---
<!-- Your feature request may already be reported! -->
<!-- Please search in the [issues](https://github.com/coditory/gradle-integration-test-plugin/issues) before creating a new one. -->

## Context
<!--- What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->

## Expected Behavior
<!--- If you're suggesting a change/improvement, tell us how it should work -->
<!--- Propose a solution -->

## Current Behavior
<!--- If suggesting a change/improvement, explain the difference from the current behavior if it exists -->
7 changes: 7 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -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).
7 changes: 6 additions & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,9 @@ updates:
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "monthly"
interval: "weekly"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
29 changes: 29 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -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/**"
5 changes: 1 addition & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
@@ -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 }}
27 changes: 27 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -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'
12 changes: 6 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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"
Expand Down
7 changes: 6 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -8,5 +8,10 @@ gradleEnterprise {
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"

if (!System.getenv("CI").isNullOrEmpty()) {
publishAlways()
tag("CI")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
Expand Down