Skip to content

Commit

Permalink
feat: build java musl lib
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Phelps <[email protected]>
  • Loading branch information
markphelps committed Oct 3, 2024
1 parent f172ee0 commit b4489e2
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 23 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/package-java-sdk.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
name: Package Java SDK
on:
push:
tags: ["flipt-client-java-**"]
tags:
- "flipt-client-java-**"
- "flipt-client-java-musl-**"

permissions:
contents: write
Expand All @@ -18,6 +20,6 @@ jobs:
build:
uses: ./.github/workflows/package-ffi-sdks.yml
with:
sdks: java
sdks: ${{ startsWith(github.ref, 'refs/tags/flipt-client-java-musl-') && 'java-musl' || 'java' }}
engine-tag: "latest"
secrets: inherit
104 changes: 104 additions & 0 deletions flipt-client-java/build.musl.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import java.nio.file.Files

plugins {
id 'java-library'
id 'maven-publish'
id 'signing'
id "com.diffplug.spotless" version "6.25.0"
}

group = 'io.flipt'
version = '0.0.1'
description = 'Flipt Client SDK'


java {
sourceCompatibility = 1.8
targetCompatibility = 1.8
withSourcesJar()
withJavadocJar()
}

repositories {
mavenCentral()
}

dependencies {
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.2'
implementation 'net.java.dev.jna:jna-platform:5.15.0'
testImplementation platform('org.junit:junit-bom:5.11.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}

spotless {
java {
importOrder()

removeUnusedImports()

cleanthat()

googleJavaFormat()

formatAnnotations()
}
}

test {
useJUnitPlatform()
}

publishing {
publications {
maven(MavenPublication) {
artifactId = 'flipt-client-java-musl'
from components.java

pom {
name = 'Flipt Client Java SDK'
description = 'Flipt Client Java SDK'
url = 'https://github.com/flipt-io/flipt-client-sdks/tree/main/flipt-client-java'

licenses {
license {
name = 'MIT'
url = 'https://opensource.org/license/mit/'
}
}

developers {
developer {
id = 'flipt-io'
name = 'Flipt'
email = '[email protected]'
}
}

scm {
connection = 'scm:git:git://github.com/flipt-io/flipt-client-sdks.git'
developerConnection = 'scm:git:ssh://github.com/flipt-io/flipt-client-sdks.git'
url = 'https://github.com/flipt-io/flipt-client-sdks/tree/main/flipt-client-java'
}
}
}
}
repositories {
maven {
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username "$System.env.MAVEN_USERNAME"
password "$System.env.MAVEN_PASSWORD"
}
}
}
}

signing {
def signingKey = System.getenv('PGP_PRIVATE_KEY')
def signingPassphrase = System.getenv('PGP_PASSPHRASE')
useInMemoryPgpKeys(signingKey, signingPassphrase)
sign publishing.publications.maven
}
85 changes: 64 additions & 21 deletions package/ffi/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@ var (
tag string
engineTag string
sdksToFn = map[string]buildFn{
"python": pythonBuild,
"go": goBuild,
"go-musl": goMuslBuild,
"node": nodeBuild,
"ruby": rubyBuild,
"java": javaBuild,
"dart": dartBuild,
"python": pythonBuild,
"go": goBuild,
"go-musl": goMuslBuild,
"node": nodeBuild,
"ruby": rubyBuild,
"java": javaBuild,
"java-musl": javaMuslBuild,
"dart": dartBuild,
}
sema = make(chan struct{}, 5)
// defaultExclude is the default exclude for all builds to prevent
Expand Down Expand Up @@ -377,6 +378,14 @@ func rubyBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger
}

func javaBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger.Directory, opts ...buildOptionsFn) error {
buildOpts := buildOptions{
libc: glibc,
}

for _, opt := range opts {
opt(&buildOpts)
}

// the directory structure of the tmp directory is as follows:
// tmp/linux_x86_64/
// tmp/linux_arm64/
Expand All @@ -394,25 +403,51 @@ func javaBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger
// we can do this on the host and then copy the files into the container

rename := map[string]string{
"linux_x86_64": "linux-x86-64",
"linux_arm64": "linux-aarch64",
"darwin_x86_64": "darwin-x86-64",
"darwin_arm64": "darwin-aarch64",
"linux_x86_64": "linux-x86-64",
"linux_arm64": "linux-aarch64",
"darwin_x86_64": "darwin-x86-64",
"darwin_arm64": "darwin-aarch64",
"linux_arm64_musl": "linux-aarch64",
"linux_x86_64_musl": "linux-x86-64",
}

for old, new := range rename {
// if the directory does not exist, skip it
if _, err := os.Stat(fmt.Sprintf("tmp/%s", old)); os.IsNotExist(err) {
continue
}

// remove directory if it exists
if err := os.RemoveAll(fmt.Sprintf("tmp/%s", new)); err != nil {
return err
}

if err := os.Rename(fmt.Sprintf("tmp/%s", old), fmt.Sprintf("tmp/%s", new)); err != nil {
return err
}
}

container := client.Container().From("gradle:8.5.0-jdk11").
WithDirectory("/src", hostDirectory.Directory("flipt-client-java")).
WithDirectory("/src/src/main/resources", hostDirectory.Directory("tmp"), dagger.ContainerWithDirectoryOpts{
Exclude: defaultExclude,
}).
WithWorkdir("/src").
WithExec([]string{"gradle", "-x", "test", "build"})
WithDirectory("/src", hostDirectory.Directory("flipt-client-java"))

if buildOpts.libc == glibc {
container = container.
WithDirectory("/src/src/main/resources", hostDirectory.Directory("tmp"), dagger.ContainerWithDirectoryOpts{
Exclude: defaultExclude,
}).
WithWorkdir("/src").
WithExec([]string{"gradle", "-x", "test", "build"})
} else {
container = container.
WithDirectory("/src/src/main/resources/linux-aarch64", hostDirectory.Directory("tmp/linux-aarch64"), dagger.ContainerWithDirectoryOpts{
Exclude: []string{"**/*.rlib", "**/*.a", "**/*.d"},
}).
WithDirectory("/src/src/main/resources/linux-x86-64", hostDirectory.Directory("tmp/linux-x86-64"), dagger.ContainerWithDirectoryOpts{
Exclude: []string{"**/*.rlib", "**/*.a", "**/*.d"},
}).
WithWorkdir("/src").
WithExec([]string{"gradle", "-x", "test", "--build-file", "build.musl.gradle", "build"})
}

var err error

Expand Down Expand Up @@ -445,17 +480,25 @@ func javaBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger
pgpPassphrase = client.SetSecret("pgp-passphrase", os.Getenv("PGP_PASSPHRASE"))
)

_, err = container.WithSecretVariable("MAVEN_USERNAME", mavenUsername).
container = container.WithSecretVariable("MAVEN_USERNAME", mavenUsername).
WithSecretVariable("MAVEN_PASSWORD", mavenPassword).
WithSecretVariable("MAVEN_PUBLISH_REGISTRY_URL", mavenRegistryUrl).
WithSecretVariable("PGP_PRIVATE_KEY", pgpPrivateKey).
WithSecretVariable("PGP_PASSPHRASE", pgpPassphrase).
WithExec([]string{"gradle", "publish"}).
Sync(ctx)
WithSecretVariable("PGP_PASSPHRASE", pgpPassphrase)

if buildOpts.libc == glibc {
_, err = container.WithExec([]string{"gradle", "publish"}).Sync(ctx)
} else {
_, err = container.WithExec([]string{"gradle", "-b", "build.musl.gradle", "publish"}).Sync(ctx)
}

return err
}

func javaMuslBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger.Directory, opts ...buildOptionsFn) error {
return javaBuild(ctx, client, hostDirectory, append(opts, withMusl())...)
}

func dartBuild(ctx context.Context, client *dagger.Client, hostDirectory *dagger.Directory, opts ...buildOptionsFn) error {
container := client.Container().From("dart:stable").
WithDirectory("/src", hostDirectory.Directory("flipt-client-dart"), dagger.ContainerWithDirectoryOpts{
Expand Down

0 comments on commit b4489e2

Please sign in to comment.