Skip to content

Commit b0a1feb

Browse files
authored
Merge pull request #12 from micronaut-projects/auto-fetch-modules
Use GraphQL on CI to get the list of modules
2 parents c064b4b + f88f30e commit b0a1feb

File tree

2 files changed

+128
-71
lines changed

2 files changed

+128
-71
lines changed

.github/workflows/gradle.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,30 @@ jobs:
2929
- name: Setup Gradle
3030
uses: gradle/gradle-build-action@v2
3131

32+
- name: Fetch all micronaut-projects modules
33+
id: module-fetch
34+
run: |
35+
MODULES=$(gh api graphql --paginate -f query='query {
36+
search(query: "user:micronaut-projects archived:false", type: REPOSITORY, first: 100) {
37+
nodes {
38+
... on Repository {
39+
name
40+
defaultBranchRef {
41+
name
42+
}
43+
}
44+
}
45+
}
46+
}' --template '{{range .data.search.nodes}}{{.name}}{{"@"}}{{.defaultBranchRef.name}}{{","}}{{end}}')
47+
echo "Fetched modules: $MODULES"
48+
echo "MICRONAUT_MODULES=$MODULES" >> $GITHUB_OUTPUT
49+
env:
50+
GH_TOKEN: ${{ github.token }}
51+
3252
- name: Execute Gradle build
3353
run: ./gradlew allReports graphBuilder
3454
env:
55+
MICRONAUT_MODULES: ${{ steps.module-fetch.outputs.MICRONAUT_MODULES }}
3556
GH_TOKEN_PUBLIC_REPOS_READONLY: ${{ secrets.GH_TOKEN_PUBLIC_REPOS_READONLY }}
3657
GH_USERNAME: ${{ secrets.GH_USERNAME }}
3758
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}

build.gradle.kts

Lines changed: 107 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -2,77 +2,113 @@ plugins {
22
id("io.micronaut.build.license-report")
33
}
44

5+
// When using the environment variable, these are the modules to ignore
6+
val blockList = listOf(
7+
"micronaut-build",
8+
"micronaut-build-plugins",
9+
"micronaut-comparisons",
10+
"micronaut-crac-tests",
11+
"micronaut-docs",
12+
"micronaut-docs-deploy",
13+
"micronaut-docs-index",
14+
"micronaut-examples",
15+
"micronaut-fuzzing",
16+
"micronaut-guides",
17+
"micronaut-guides-old",
18+
"micronaut-guides-poc",
19+
"micronaut-helidon", // Not sure what this is, but it fails locally with permissions errors
20+
"micronaut-lambda-todo",
21+
"micronaut-maven-plugin",
22+
"micronaut-oauth2",
23+
"micronaut-profiles",
24+
"micronaut-project-template",
25+
"micronaut-starter-ui",
26+
)
27+
28+
// For local dev with no env var, these are the modules to pull
29+
val defaultModules = listOf(
30+
"micronaut-acme",
31+
"micronaut-aot",
32+
"micronaut-aws",
33+
"micronaut-azure",
34+
"micronaut-build",
35+
"micronaut-cache",
36+
"micronaut-camel",
37+
"micronaut-cassandra",
38+
"micronaut-coherence",
39+
"micronaut-core@4.0.x",
40+
"micronaut-couchbase",
41+
"micronaut-crac",
42+
"micronaut-data",
43+
"micronaut-discovery-client",
44+
"micronaut-elasticsearch",
45+
"micronaut-gcp",
46+
"micronaut-gradle-plugin",
47+
"micronaut-graphql",
48+
"micronaut-groovy",
49+
"micronaut-grpc",
50+
"micronaut-hibernate-validator",
51+
"micronaut-ignite",
52+
"micronaut-jackson-xml",
53+
"micronaut-jms",
54+
"micronaut-jmx",
55+
"micronaut-kafka",
56+
"micronaut-kotlin",
57+
"micronaut-kubernetes",
58+
"micronaut-liquibase",
59+
"micronaut-logging",
60+
"micronaut-micrometer",
61+
"micronaut-mongodb",
62+
"micronaut-mqtt",
63+
"micronaut-multitenancy",
64+
"micronaut-nats",
65+
"micronaut-neo4j",
66+
"micronaut-object-storage",
67+
"micronaut-openapi",
68+
"micronaut-oracle-cloud",
69+
"micronaut-picocli",
70+
"micronaut-platform",
71+
"micronaut-problem-json",
72+
"micronaut-pulsar",
73+
"micronaut-rabbitmq",
74+
"micronaut-reactor",
75+
"micronaut-redis",
76+
"micronaut-rss",
77+
"micronaut-rxjava2",
78+
"micronaut-rxjava3",
79+
"micronaut-security",
80+
"micronaut-serialization",
81+
"micronaut-servlet",
82+
"micronaut-session",
83+
"micronaut-spring",
84+
"micronaut-sql",
85+
"micronaut-starter",
86+
"micronaut-test",
87+
"micronaut-test-resources",
88+
"micronaut-toml",
89+
"micronaut-validation",
90+
"micronaut-views",
91+
)
92+
593
micronautProjects {
6-
listOf(
7-
"micronaut-acme",
8-
"micronaut-aot",
9-
"micronaut-aws",
10-
"micronaut-azure",
11-
"micronaut-build",
12-
"micronaut-cache",
13-
"micronaut-camel",
14-
"micronaut-cassandra",
15-
"micronaut-coherence",
16-
"micronaut-core@4.0.x",
17-
"micronaut-couchbase",
18-
"micronaut-crac",
19-
"micronaut-data",
20-
"micronaut-discovery-client",
21-
"micronaut-elasticsearch",
22-
"micronaut-gcp",
23-
"micronaut-gradle-plugin",
24-
"micronaut-graphql",
25-
"micronaut-groovy",
26-
"micronaut-grpc",
27-
"micronaut-hibernate-validator",
28-
"micronaut-ignite",
29-
"micronaut-jackson-xml",
30-
"micronaut-jms",
31-
"micronaut-jmx",
32-
"micronaut-kafka",
33-
"micronaut-kotlin",
34-
"micronaut-kubernetes",
35-
"micronaut-liquibase",
36-
"micronaut-logging",
37-
"micronaut-micrometer",
38-
"micronaut-mongodb",
39-
"micronaut-mqtt",
40-
"micronaut-multitenancy",
41-
"micronaut-nats",
42-
"micronaut-neo4j",
43-
"micronaut-object-storage",
44-
"micronaut-openapi",
45-
"micronaut-oracle-cloud",
46-
"micronaut-picocli",
47-
"micronaut-platform",
48-
"micronaut-problem-json",
49-
"micronaut-pulsar",
50-
"micronaut-rabbitmq",
51-
"micronaut-reactor",
52-
"micronaut-redis",
53-
"micronaut-rss",
54-
"micronaut-rxjava2",
55-
"micronaut-rxjava3",
56-
"micronaut-security",
57-
"micronaut-serialization",
58-
"micronaut-servlet",
59-
"micronaut-session",
60-
"micronaut-spring",
61-
"micronaut-sql",
62-
"micronaut-starter",
63-
"micronaut-test",
64-
"micronaut-test-resources",
65-
"micronaut-toml",
66-
"micronaut-validation",
67-
"micronaut-views",
68-
).map {
69-
val (name, branch) = if (it.contains('@')) {
70-
it.split('@')
71-
} else {
72-
listOf(it, "master")
94+
project.providers
95+
.environmentVariable("MICRONAUT_MODULES") // Env var from GH Action
96+
.map { it.split(',') }
97+
.map {
98+
it
99+
.filter { moduleBranch -> moduleBranch.startsWith("micronaut-") } // Has to start with 'micronaut-'
100+
.filterNot { moduleBranch -> moduleBranch.contains("-ghsa-") } // Not a security module fork
101+
.filterNot { moduleBranch -> blockList.contains(moduleBranch.split("@").first()) }
102+
}
103+
.getOrElse(defaultModules) // Fallback to the default modules if no env var
104+
.map {
105+
val (name, branch) = if (it.contains('@')) {
106+
it.split('@')
107+
} else {
108+
listOf(it, "master")
109+
}
110+
Pair("https://github.com/micronaut-projects/${name}.git", branch)
111+
}.forEach {
112+
checkout(it.first, it.second)
73113
}
74-
Pair("https://github.com/micronaut-projects/${name}.git", branch)
75-
}.forEach {
76-
checkout(it.first, it.second)
77-
}
78114
}

0 commit comments

Comments
 (0)