Skip to content

Commit 1daf5fa

Browse files
authored
ci: publish edc-build to Gradle Plugin Portal (#354)
* build: prepare release to the gradle plugin portal * refactor: permit edc-build and autodoc to work separately
1 parent ddc04b2 commit 1daf5fa

File tree

23 files changed

+124
-143
lines changed

23 files changed

+124
-143
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
required: true
8+
description: version to be released
9+
10+
jobs:
11+
release:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: eclipse-edc/.github/.github/actions/setup-build@main
16+
- uses: eclipse-edc/.github/.github/actions/import-gpg-key@main
17+
with:
18+
gpg-private-key: ${{ secrets.ORG_GPG_PRIVATE_KEY }}
19+
- run: |
20+
./gradlew -Pversion=${{ inputs.version }} \
21+
-Psigning.gnupg.executable=gpg \
22+
-Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" \
23+
:plugins:edc-build:publishPlugins
24+
env:
25+
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
26+
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
27+
28+
- name: Create GitHub Release
29+
uses: ncipollo/release-action@v1
30+
with:
31+
generateReleaseNotes: true
32+
tag: edc-build-v${{ inputs.version }}
33+
token: ${{ secrets.GITHUB_TOKEN }}
34+
removeArtifacts: true
35+
makeLatest: true
36+
37+
- uses: sarisia/actions-status-discord@v1
38+
if: always()
39+
with:
40+
webhook: ${{ secrets.DISCORD_GITHUB_CI_WEBHOOK }}
41+
title: "Release edc-build-v${{ inputs.version }} plugin"
42+
username: GitHub Actions

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[![documentation](https://img.shields.io/badge/documentation-8A2BE2?style=flat-square)](https://eclipse-edc.github.io)
44
[![discord](https://img.shields.io/badge/discord-chat-brightgreen.svg?style=flat-square&logo=discord)](https://discord.gg/n4sD9qtjMQ)
55
[![latest version](https://img.shields.io/maven-central/v/org.eclipse.edc/boot?logo=apache-maven&style=flat-square&label=latest%20version)](https://search.maven.org/artifact/org.eclipse.edc/boot)
6+
[![latest version (plugin)](https://img.shields.io/gradle-plugin-portal/v/org.eclipse.edc.edc-build)](https://plugins.gradle.org/plugin/org.eclipse.edc.edc-build)
67
[![license](https://img.shields.io/github/license/eclipse-edc/GradlePlugins?style=flat-square&logo=apache)](https://www.apache.org/licenses/LICENSE-2.0)
78
<br>
89
[![build](https://img.shields.io/github/actions/workflow/status/eclipse-edc/GradlePlugins/verify.yaml?branch=main&logo=GitHub&style=flat-square&label=ci)](https://github.com/eclipse-edc/GradlePlugins/actions/workflows/verify.yaml?query=branch%3Amain)
@@ -11,7 +12,20 @@
1112

1213
---
1314

14-
This repository contains various plugins for the EDC Gradle build.
15+
This repository contains various plugins for the EDC Gradle plugins.
16+
17+
There are 2 plugins: `edc-build` and `autodoc`
18+
19+
### edc-build
20+
Is a plugin that provides basic capabilities to check/build/publish edc related modules.
21+
22+
The plugin is published on the https://plugins.gradle.org/plugin/org.eclipse.edc.edc-build with its own version number,
23+
detached from the EDC version.
24+
25+
### autodoc
26+
Is a plugin that permits automatic documentation generation for EDC related modules.
27+
28+
Its version is aligned with the EDC one.
1529

1630
## Documentation
1731

buildSrc/build.gradle.kts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ gradlePlugin {
4747
id = "${group}.edc-build"
4848
implementationClass = "${group}.plugins.edcbuild.EdcBuildPlugin"
4949
}
50+
51+
create("autodoc") {
52+
id = "${group}.autodoc"
53+
implementationClass = "${group}.plugins.autodoc.AutodocPlugin"
54+
}
5055
}
5156
}
5257

@@ -60,9 +65,6 @@ sourceSets {
6065
"../plugins/autodoc/autodoc-plugin/src/main",
6166
"../plugins/autodoc/autodoc-converters/src/main",
6267
"../plugins/edc-build/src/main",
63-
"../plugins/module-names/src/main",
64-
"../plugins/openapi-merger/src/main",
65-
"../plugins/test-summary/src/main"
6668
)
6769
}
6870
}

plugins/autodoc/autodoc-plugin/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ gradlePlugin {
1515
website.set("https://projects.eclipse.org/projects/technology.edc")
1616
vcsUrl.set("https://github.com/eclipse-edc/GradlePlugins.git")
1717

18-
// Define the plugin
1918
plugins {
2019
create("autodoc") {
2120
displayName = "autodoc"

plugins/autodoc/autodoc-plugin/src/main/java/org/eclipse/edc/plugins/autodoc/AutodocPlugin.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,24 @@
2020
import org.eclipse.edc.plugins.autodoc.tasks.MarkdownRendererTask.ToMarkdown;
2121
import org.eclipse.edc.plugins.autodoc.tasks.MergeManifestsTask;
2222
import org.eclipse.edc.plugins.autodoc.tasks.ResolveManifestTask;
23+
import org.gradle.api.GradleException;
2324
import org.gradle.api.Plugin;
2425
import org.gradle.api.Project;
26+
import org.gradle.api.publish.PublishingExtension;
27+
import org.gradle.api.publish.maven.MavenPublication;
2528

2629
import java.util.List;
2730

31+
import static java.util.Optional.ofNullable;
32+
2833
/**
2934
* Gradle plugin that injects an {@code annotationProcessor} dependency to any Gradle project so that the autodoc processor can run during compile.
3035
*/
3136
public class AutodocPlugin implements Plugin<Project> {
3237

3338
public static final String GROUP_NAME = "autodoc";
3439
public static final String AUTODOC_TASK_NAME = "autodoc";
35-
private final List<String> exclusions = List.of("version-catalog", "edc-build", "module-names", "openapi-merger", "test-summary", "autodoc-plugin", "autodoc-processor", "autodoc-converters");
40+
private final List<String> exclusions = List.of("version-catalog", "edc-build", "autodoc-plugin", "autodoc-processor", "autodoc-converters");
3641

3742
@Override
3843
public void apply(Project project) {
@@ -58,5 +63,34 @@ public void apply(Project project) {
5863
t.setDescription(AutodocBomTask.DESCRIPTION);
5964
t.setGroup(GROUP_NAME);
6065
});
66+
67+
project.afterEvaluate(p -> {
68+
var manifestFile = p.getLayout().getBuildDirectory().file("edc.json");
69+
70+
if (!manifestFile.isPresent()) {
71+
return;
72+
}
73+
74+
publishingExtension(project).getPublications().stream()
75+
.filter(MavenPublication.class::isInstance)
76+
.map(MavenPublication.class::cast)
77+
.map(MavenPublication::getArtifacts)
78+
.forEach(artifacts -> {
79+
var manifestArtifact = p.getArtifacts().add("archives", manifestFile, artifact -> {
80+
artifact.builtBy(AUTODOC_TASK_NAME);
81+
artifact.setClassifier("manifest");
82+
artifact.setType("json");
83+
});
84+
85+
artifacts.artifact(manifestArtifact);
86+
});
87+
});
88+
6189
}
90+
91+
private static PublishingExtension publishingExtension(Project target) {
92+
return ofNullable(target.getExtensions().findByType(PublishingExtension.class))
93+
.orElseThrow(() -> new GradleException(PublishingExtension.class.getSimpleName() + " expected but was null"));
94+
}
95+
6296
}

plugins/edc-build/build.gradle.kts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
`java-gradle-plugin`
2+
alias(libs.plugins.publish)
33
}
44

55
val group: String by project
@@ -10,37 +10,31 @@ repositories {
1010
}
1111

1212
dependencies {
13-
implementation(project(":plugins:autodoc:autodoc-plugin"))
14-
implementation(project(":plugins:test-summary"))
15-
implementation(project(":plugins:module-names"))
16-
implementation(project(":plugins:openapi-merger"))
17-
1813
implementation(libs.plugin.nexus.publish)
1914
implementation(libs.plugin.checksum)
2015
implementation(libs.plugin.swagger)
21-
implementation(libs.plugin.openapi.merger)
16+
implementation(libs.plugin.openapi.merger.app)
17+
implementation(libs.plugin.openapi.merger) {
18+
constraints {
19+
implementation(libs.swagger.parser) {
20+
because("OpenAPI merger plugin uses an old version that caused this issue: https://github.com/eclipse-edc/GradlePlugins/issues/183")
21+
}
22+
}
23+
}
2224
}
2325

2426
gradlePlugin {
2527
website.set("https://projects.eclipse.org/projects/technology.edc")
2628
vcsUrl.set("https://github.com/eclipse-edc/GradlePlugins.git")
27-
// Define the plugins
29+
2830
plugins {
29-
create("edc-build-base") {
30-
displayName = "edc-build-base"
31-
description =
32-
"Meta-plugin that provides the capabilities of the EDC build"
33-
id = "${group}.edc-build-base"
34-
implementationClass = "org.eclipse.edc.plugins.edcbuild.EdcBuildBasePlugin"
35-
tags.set(listOf("build", "verification", "test"))
36-
}
3731
create("edc-build") {
32+
id = "${group}.edc-build"
3833
displayName = "edc-build"
3934
description =
4035
"Plugin that applies the base capabilities and provides default configuration for the EDC build"
41-
id = "${group}.edc-build"
4236
implementationClass = "org.eclipse.edc.plugins.edcbuild.EdcBuildPlugin"
43-
tags.set(listOf("build", "verification", "test"))
37+
tags = listOf("build", "verification", "test")
4438
}
4539
}
4640
}

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/EdcBuildBasePlugin.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
package org.eclipse.edc.plugins.edcbuild;
1616

1717
import io.github.gradlenexus.publishplugin.NexusPublishPlugin;
18-
import org.eclipse.edc.plugins.autodoc.AutodocPlugin;
19-
import org.eclipse.edc.plugins.modulenames.ModuleNamesPlugin;
20-
import org.eclipse.edc.plugins.openapimerger.OpenApiMergerPlugin;
21-
import org.eclipse.edc.plugins.testsummary.TestSummaryPlugin;
18+
import org.eclipse.edc.plugins.edcbuild.plugins.ModuleNamesPlugin;
19+
import org.eclipse.edc.plugins.edcbuild.plugins.OpenApiMergerPlugin;
20+
import org.eclipse.edc.plugins.edcbuild.plugins.TestSummaryPlugin;
2221
import org.gradle.api.Plugin;
2322
import org.gradle.api.Project;
2423
import org.gradle.api.plugins.JavaLibraryPlugin;
@@ -36,7 +35,6 @@ public class EdcBuildBasePlugin implements Plugin<Project> {
3635
private static void defineCapabilities(Project target) {
3736

3837
target.getPlugins().apply(JavaLibraryPlugin.class);
39-
target.getPlugins().apply(AutodocPlugin.class);
4038
target.getPlugins().apply(CheckstylePlugin.class);
4139
target.getPlugins().apply(MavenPublishPlugin.class);
4240
target.getPlugins().apply(JavaPlugin.class);

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/MavenArtifactConvention.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
package org.eclipse.edc.plugins.edcbuild.conventions;
1717

18-
import org.eclipse.edc.plugins.autodoc.AutodocExtension;
1918
import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension;
2019
import org.eclipse.edc.plugins.edcbuild.extensions.MavenPomExtension;
2120
import org.gradle.api.Action;
@@ -24,10 +23,8 @@
2423
import org.gradle.api.publish.PublishingExtension;
2524
import org.gradle.api.publish.maven.MavenPom;
2625
import org.gradle.api.publish.maven.MavenPublication;
27-
import org.jetbrains.annotations.NotNull;
2826

2927
import java.io.File;
30-
import java.nio.file.Path;
3128

3229
import static org.eclipse.edc.plugins.edcbuild.conventions.ConventionFunctions.requireExtension;
3330

@@ -53,12 +50,6 @@ public void apply(Project target) {
5350
.map(p -> (MavenPublication) p)
5451
.peek(mavenPub -> mavenPub.pom(pom -> setPomInformation(pomExt, target, pom)))
5552
.forEach(mavenPub -> {
56-
addArtifactIfExist(target, getManifestFile(target), mavenPub, artifact -> {
57-
artifact.setClassifier("manifest");
58-
artifact.setType("json");
59-
artifact.builtBy("autodoc");
60-
});
61-
6253
var openapiFiles = target.getLayout().getBuildDirectory().getAsFile().get().toPath()
6354
.resolve("docs").resolve("openapi").toFile()
6455
.listFiles((dir, name) -> name.endsWith(".yaml"));
@@ -88,14 +79,6 @@ private void addArtifactIfExist(Project project, File location, MavenPublication
8879
}
8980
}
9081

91-
private static @NotNull File getManifestFile(Project target) {
92-
var autodocExt = requireExtension(target, AutodocExtension.class);
93-
var projectBuildDirectory = target.getLayout().getBuildDirectory().getAsFile();
94-
var pathToManifest = autodocExt.getOutputDirectory().convention(projectBuildDirectory).get().getAbsolutePath();
95-
var manifestFileName = "edc.json";
96-
return Path.of(pathToManifest, manifestFileName).toFile();
97-
}
98-
9982
private static void setPomInformation(MavenPomExtension pomExt, Project project, MavenPom pom) {
10083
// these properties are mandatory!
10184
var projectName = pomExt.getProjectName().getOrElse(project.getName());

plugins/module-names/src/main/java/org/eclipse/edc/plugins/modulenames/CheckModuleNamesAction.java renamed to plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/plugins/CheckModuleNamesAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*
1313
*/
1414

15-
package org.eclipse.edc.plugins.modulenames;
15+
package org.eclipse.edc.plugins.edcbuild.plugins;
1616

1717
import org.gradle.api.Action;
1818
import org.gradle.api.GradleException;
@@ -59,4 +59,4 @@ public void execute(Project project) {
5959
throw new GradleException("Duplicate module names found: \n" + message);
6060
}
6161
}
62-
}
62+
}

plugins/openapi-merger/src/main/java/org/eclipse/edc/plugins/openapimerger/tasks/MergeApiSpecByPathTask.java renamed to plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/plugins/MergeApiSpecByPathTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*
1313
*/
1414

15-
package org.eclipse.edc.plugins.openapimerger.tasks;
15+
package org.eclipse.edc.plugins.edcbuild.plugins;
1616

1717
import com.rameshkp.openapi.merger.gradle.task.OpenApiMergerTask;
1818
import org.gradle.api.tasks.options.Option;

0 commit comments

Comments
 (0)