Skip to content

Commit 7c25662

Browse files
authored
Merge pull request #429 from apache/feature/bsky.domain.name
Added Bsky atproto-did to identify @grails.apache.org as BSky account name
2 parents b6fae6b + a7489e5 commit 7c25662

4 files changed

Lines changed: 102 additions & 5 deletions

File tree

buildSrc/src/main/groovy/website/gradle/GrailsWebsiteExtension.groovy

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@
1818
*/
1919
package website.gradle
2020

21-
import javax.inject.Inject
22-
2321
import groovy.transform.CompileStatic
24-
2522
import org.gradle.api.file.DirectoryProperty
2623
import org.gradle.api.file.ProjectLayout
2724
import org.gradle.api.file.RegularFileProperty
@@ -30,17 +27,21 @@ import org.gradle.api.provider.ListProperty
3027
import org.gradle.api.provider.Property
3128
import org.gradle.api.provider.ProviderFactory
3229

30+
import javax.inject.Inject
31+
3332
@CompileStatic
3433
class GrailsWebsiteExtension {
3534

3635
public static final String NAME = 'grailsWebsite'
3736

3837
final RegularFileProperty htaccess
38+
final RegularFileProperty bskyAtProtoDid
3939
final RegularFileProperty modules
4040
final RegularFileProperty profiles
4141
final RegularFileProperty questions
4242
final RegularFileProperty releases
4343
final RegularFileProperty template
44+
final RegularFileProperty social
4445

4546
final DirectoryProperty assetsDir
4647
final DirectoryProperty minutesDir
@@ -61,6 +62,9 @@ class GrailsWebsiteExtension {
6162
htaccess = objects.fileProperty()
6263
htaccess.convention(layout.buildDirectory.file('dist/.htaccess'))
6364

65+
bskyAtProtoDid = objects.fileProperty()
66+
bskyAtProtoDid.convention(layout.buildDirectory.file('dist/.well-known/atproto-did'))
67+
6468
modules = objects.fileProperty()
6569
modules.convention(layout.projectDirectory.file('conf/modules.yml'))
6670

@@ -73,6 +77,9 @@ class GrailsWebsiteExtension {
7377
releases = objects.fileProperty()
7478
releases.convention(layout.projectDirectory.file('conf/releases.yml'))
7579

80+
social = objects.fileProperty()
81+
social.convention(layout.projectDirectory.file('conf/social.yml'))
82+
7683
template = objects.fileProperty()
7784
template.convention(layout.projectDirectory.file('templates/document.html'))
7885

@@ -104,8 +111,8 @@ class GrailsWebsiteExtension {
104111

105112
url = objects.property(String)
106113
url.convention(
107-
providers.environmentVariable('GRAILS_WS_URL')
108-
.orElse('https://grails.apache.org')
114+
providers.environmentVariable('GRAILS_WS_URL')
115+
.orElse('https://grails.apache.org')
109116
)
110117

111118
// List property with convention

buildSrc/src/main/groovy/website/gradle/GrailsWebsitePlugin.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import org.gradle.api.Project
2525

2626
import website.gradle.tasks.AssetsTask
2727
import website.gradle.tasks.BlogTask
28+
import website.gradle.tasks.BskyAtProtoDidTask
2829
import website.gradle.tasks.DocumentationTask
2930
import website.gradle.tasks.DownloadTask
3031
import website.gradle.tasks.GrailsWebsiteTask
@@ -55,6 +56,7 @@ class GrailsWebsitePlugin implements Plugin<Project> {
5556
DownloadTask.register(project, siteExt)
5657
GuidesTask.register(project, siteExt)
5758
HtaccessTask.register(project, siteExt)
59+
BskyAtProtoDidTask.register(project, siteExt)
5860
MinutesTask.register(project, siteExt)
5961
PluginsTask.register(project, siteExt)
6062
ProfilesTask.register(project, siteExt)
@@ -68,6 +70,7 @@ class GrailsWebsitePlugin implements Plugin<Project> {
6870
it.dependsOn(MinutesTask.NAME)
6971
it.dependsOn(PluginsTask.NAME)
7072
it.dependsOn(HtaccessTask.NAME)
73+
it.dependsOn(BskyAtProtoDidTask.NAME)
7174
}
7275

7376
RenderSiteTask.register(project, siteExt).configure {
@@ -85,6 +88,7 @@ class GrailsWebsitePlugin implements Plugin<Project> {
8588
it.finalizedBy(BlogTask.NAME)
8689
it.finalizedBy(MinutesTask.NAME)
8790
it.finalizedBy(HtaccessTask.NAME)
91+
it.finalizedBy(BskyAtProtoDidTask.NAME)
8892
it.finalizedBy(PluginsTask.NAME)
8993
it.finalizedBy(SitemapTask.NAME)
9094
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package website.gradle.tasks
20+
21+
import groovy.transform.CompileStatic
22+
import org.gradle.api.GradleException
23+
import org.gradle.api.Project
24+
import org.gradle.api.file.RegularFileProperty
25+
import org.gradle.api.tasks.CacheableTask
26+
import org.gradle.api.tasks.InputFile
27+
import org.gradle.api.tasks.Internal
28+
import org.gradle.api.tasks.OutputFile
29+
import org.gradle.api.tasks.PathSensitive
30+
import org.gradle.api.tasks.PathSensitivity
31+
import org.gradle.api.tasks.TaskAction
32+
import org.gradle.api.tasks.TaskProvider
33+
import org.yaml.snakeyaml.Yaml
34+
import website.gradle.GrailsWebsiteExtension
35+
36+
@CompileStatic
37+
@CacheableTask
38+
abstract class BskyAtProtoDidTask extends GrailsWebsiteTask {
39+
40+
@Internal
41+
final String description = 'Generates the .well-known/atproto-did file for Bsky'
42+
43+
public static final String NAME = 'genBskyAtProtoDid'
44+
45+
@InputFile
46+
@PathSensitive(PathSensitivity.RELATIVE)
47+
abstract RegularFileProperty getSocial()
48+
49+
@OutputFile
50+
abstract RegularFileProperty getBskyAtProtoDid()
51+
52+
static TaskProvider<BskyAtProtoDidTask> register(
53+
Project project,
54+
GrailsWebsiteExtension siteExt,
55+
String name = NAME
56+
) {
57+
project.tasks.register(name, BskyAtProtoDidTask) {
58+
it.social.set(siteExt.social)
59+
it.bskyAtProtoDid.set(siteExt.bskyAtProtoDid)
60+
}
61+
}
62+
63+
@TaskAction
64+
void generateAtProtoDid() {
65+
bskyAtProtoDid.get().asFile.tap {
66+
parentFile.mkdirs()
67+
text = getBskyAtProtoDidText()
68+
}
69+
}
70+
71+
private Map getSocialProperties() {
72+
File socialFile = social.get().asFile
73+
socialFile.withInputStream { is -> new Yaml().load(is) } as Map
74+
}
75+
76+
private String getBskyAtProtoDidText() {
77+
try {
78+
socialProperties['bsky']['did']
79+
} catch (NullPointerException ignore) {
80+
throw new GradleException('Missing property [bsky.did]')
81+
}
82+
}
83+
}

conf/social.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
bsky:
2+
handle: '@grails.apache.org'
3+
did: 'did:plc:5ad34hau6u4tw25cuh3cewwl'

0 commit comments

Comments
 (0)