Skip to content

Commit c01e7b4

Browse files
authored
Merge pull request #41 from toolsplus/feature/implement-host-deletion
Update Atlassian Connect Play version
2 parents f0eb42d + 608a8e4 commit c01e7b4

File tree

19 files changed

+403
-161
lines changed

19 files changed

+403
-161
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ jobs:
55
build:
66
runs-on: ubuntu-latest
77
steps:
8-
- uses: actions/checkout@v3
9-
- uses: actions/setup-java@v3
8+
- uses: actions/checkout@v4
9+
- uses: actions/setup-java@v4
1010
with:
1111
distribution: 'temurin'
1212
java-version: '21'
1313
cache: 'sbt'
14+
- uses: sbt/setup-sbt@v1
1415
- name: Compile, test
1516
run: sbt clean coverage test integration/test coverageReport
1617
- name: Upload coverage to Codecov

.scalafmt.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
style = default
2-
maxColumn = 80
1+
version = 3.9.9
2+
runner.dialect = scala213
33
project.git = true

build.sbt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import ReleaseTransformations._
1+
import ReleaseTransformations.*
2+
import xerial.sbt.Sonatype.sonatypeCentralHost
23

34
val commonSettings = Seq(
45
organization := "io.toolsplus",
5-
scalaVersion := "2.13.14",
6+
scalaVersion := "2.13.16",
67
)
78

89
val integrationTestSettings = Seq(
@@ -23,13 +24,8 @@ lazy val publishSettings = Seq(
2324
pomIncludeRepository := { _ =>
2425
false
2526
},
26-
publishTo := {
27-
val nexus = "https://oss.sonatype.org/"
28-
if (isSnapshot.value)
29-
Some("snapshots" at nexus + "content/repositories/snapshots")
30-
else
31-
Some("releases" at nexus + "service/local/staging/deploy/maven2")
32-
},
27+
ThisBuild / publishTo := sonatypePublishToBundle.value,
28+
ThisBuild / sonatypeCredentialHost := sonatypeCentralHost,
3329
autoAPIMappings := true,
3430
scmInfo := Some(
3531
ScmInfo(
@@ -46,6 +42,7 @@ lazy val publishSettings = Seq(
4642
)
4743

4844
lazy val noPublishSettings = Seq(
45+
publish / skip := true,
4946
publish := {},
5047
publishLocal := {},
5148
publishArtifact := false,
@@ -62,9 +59,9 @@ releaseProcess := Seq[ReleaseStep](
6259
commitReleaseVersion,
6360
tagRelease,
6461
releaseStepCommand("publishSigned"),
62+
releaseStepCommand("sonatypeBundleRelease"),
6563
setNextVersion,
6664
commitNextVersion,
67-
releaseStepCommand("sonatypeReleaseAll"),
6865
pushChanges
6966
)
7067

@@ -78,15 +75,15 @@ def moduleSettings(project: Project) = {
7875
lazy val `atlassian-connect-play-slick` = project
7976
.in(file("."))
8077
.settings(libraryDependencies ++= Dependencies.root)
81-
.settings(commonSettings: _*)
78+
.settings(commonSettings)
8279
.settings(publishSettings)
8380
.settings(moduleSettings(project))
8481

8582
lazy val `integration` = project
8683
.in(file("integration"))
8784
.settings(libraryDependencies ++= Dependencies.integration)
88-
.settings(commonSettings: _*)
89-
.settings(integrationTestSettings: _*)
85+
.settings(commonSettings)
86+
.settings(integrationTestSettings)
9087
.settings(
9188
publish / skip := true,
9289
)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# --- !Ups
2+
CREATE TABLE atlassian_host
3+
(
4+
client_key VARCHAR PRIMARY KEY NOT NULL,
5+
"key" VARCHAR NOT NULL,
6+
oauth_client_id VARCHAR,
7+
installation_id VARCHAR,
8+
shared_secret VARCHAR NOT NULL,
9+
base_url VARCHAR NOT NULL,
10+
display_url VARCHAR NOT NULL,
11+
display_url_servicedesk_help_center VARCHAR NOT NULL,
12+
product_type VARCHAR NOT NULL,
13+
description VARCHAR NOT NULL,
14+
service_entitlement_number VARCHAR,
15+
entitlement_id VARCHAR,
16+
entitlement_number VARCHAR,
17+
installed BOOLEAN NOT NULL,
18+
ttl TIMESTAMP
19+
);
20+
CREATE UNIQUE INDEX uq_ac_host_client_key
21+
ON atlassian_host (client_key);
22+
CREATE INDEX uq_ac_host_base_url
23+
ON atlassian_host (base_url);
24+
CREATE INDEX uq_ac_host_installation_id
25+
ON atlassian_host (installation_id);
26+
27+
CREATE TABLE forge_installation
28+
(
29+
installation_id VARCHAR PRIMARY KEY,
30+
client_key VARCHAR NOT NULL
31+
);
32+
CREATE UNIQUE INDEX uq_forge_installation_installation_id
33+
ON forge_installation (installation_id);
34+
ALTER TABLE forge_installation
35+
ADD CONSTRAINT fk_forge_installation_atlassian_host FOREIGN KEY (client_key) REFERENCES atlassian_host (client_key) ON UPDATE CASCADE ON DELETE CASCADE;
36+
37+
# --- !Downs
38+
DROP TABLE forge_installation;
39+
DROP TABLE atlassian_host;

integration/src/test/scala/io/toolsplus/atlassian/connect/play/slick/PostgresContainerTest.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ trait PostgresContainerTest
1414
extends GuiceOneAppPerTest
1515
with TestContainerForAll { self: TestSuite =>
1616

17-
val postgresVersion = "15.5"
17+
val postgresVersion = "15.12"
1818

1919
override val containerDef: PostgreSQLContainer.Def =
2020
PostgreSQLContainer.Def(
2121
DockerImageName.parse(s"postgres:$postgresVersion"),
2222
databaseName = "intercom",
2323
username = "test",
24-
password = "test",
24+
password = "test"
2525
)
2626

2727
override def newAppForTest(td: TestData): Application = withContainers {
@@ -37,7 +37,8 @@ trait PostgresContainerTest
3737
def withEvolutions[T](block: => T): T =
3838
Evolutions.withEvolutions(
3939
dbApi.database("default"),
40-
ClassLoaderEvolutionsReader.forPrefix("evolutions/")) {
40+
ClassLoaderEvolutionsReader.forPrefix("evolutions/")
41+
) {
4142
block
4243
}
4344

integration/src/test/scala/io/toolsplus/atlassian/connect/play/slick/SlickAtlassianHostRepositoryIt.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.toolsplus.atlassian.connect.play.slick
22

3-
import io.toolsplus.atlassian.connect.play.api.models.DefaultAtlassianHost
43
import io.toolsplus.atlassian.connect.play.slick.fixtures.AtlassianHostFixture
54
import org.scalatest.DoNotDiscover
65
import org.scalatest.concurrent.Eventually
@@ -47,7 +46,7 @@ class SlickAtlassianHostRepositoryIt
4746

4847
await {
4948
hostRepo.all()
50-
} mustEqual Seq(host)
49+
} must contain theSameElementsAs Seq(host)
5150
}
5251
}
5352

@@ -78,7 +77,7 @@ class SlickAtlassianHostRepositoryIt
7877

7978
await {
8079
hostRepo.all()
81-
} mustBe Seq(host)
80+
} must contain theSameElementsAs Seq(host)
8281
}
8382
}
8483

@@ -99,7 +98,7 @@ class SlickAtlassianHostRepositoryIt
9998

10099
await {
101100
hostRepo.all()
102-
} mustBe Seq(updated)
101+
} must contain theSameElementsAs Seq(updated)
103102
}
104103
}
105104

@@ -128,7 +127,7 @@ class SlickAtlassianHostRepositoryIt
128127

129128
await {
130129
hostRepo.all()
131-
} mustBe Seq(host, updated)
130+
} must contain theSameElementsAs Seq(host, updated)
132131
}
133132
}
134133

integration/src/test/scala/io/toolsplus/atlassian/connect/play/slick/fixtures/AtlassianHostFixture.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ trait AtlassianHostFixture extends AtlassianHostGen {
88
"a890cfe7-3518-3920-b0b5-6fa412a7f3d4",
99
"io.toolsplus.atlassian.connect.play.scala.seed",
1010
None,
11-
Some("ari:cloud:ecosystem::installation/e786c5a3-819e-43cd-9cc9-d38a470a5df6"),
11+
Some(
12+
"ari:cloud:ecosystem::installation/e786c5a3-819e-43cd-9cc9-d38a470a5df6"
13+
),
1214
"LkbauUXN71J8jxRi9Nbf+8dwGtXxqta+Fu6k86aF+0IIzxkZ/GlggElYVoCqQg",
1315
"https://example.atlassian.net",
1416
"https://example.atlassian.net",
@@ -18,7 +20,9 @@ trait AtlassianHostFixture extends AtlassianHostGen {
1820
None,
1921
None,
2022
None,
21-
installed = true
23+
installed = true,
24+
None
2225
)
23-
val host: DefaultAtlassianHost = atlassianHostGen.sample.getOrElse(defaultHost)
26+
val host: DefaultAtlassianHost =
27+
atlassianHostGen.sample.getOrElse(defaultHost)
2428
}
Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package io.toolsplus.atlassian.connect.play.slick.generators
22

3-
import io.toolsplus.atlassian.connect.play.api.models.Predefined.ClientKey
3+
import com.fortysevendeg.scalacheck.datetime.GenDateTime.genDateTimeWithinRange
4+
import com.fortysevendeg.scalacheck.datetime.instances.jdk8._
45
import io.toolsplus.atlassian.connect.play.api.models.DefaultAtlassianHost
6+
import io.toolsplus.atlassian.connect.play.api.models.Predefined.ClientKey
57
import org.scalacheck.Gen
68
import org.scalacheck.Gen.{alphaStr, numStr, option, _}
79

10+
import java.time.temporal.ChronoUnit
11+
import java.time.{Duration, Instant}
12+
813
trait AtlassianHostGen {
914

1015
def clientKeyGen: Gen[ClientKey] = alphaNumStr
@@ -25,22 +30,28 @@ trait AtlassianHostGen {
2530
entitlementId <- option(numStr)
2631
entitlementNumber <- option(numStr)
2732
installed <- oneOf(true, false)
28-
} yield
29-
DefaultAtlassianHost(
30-
clientKey,
31-
key,
32-
oauthClientId,
33-
installationId,
34-
sharedSecret,
35-
baseUrl,
36-
baseUrl,
37-
baseUrl,
38-
productType,
39-
description,
40-
serviceEntitlementNumber,
41-
entitlementId,
42-
entitlementNumber,
43-
installed
44-
)
33+
ttl <-
34+
if (installed) const(None)
35+
else
36+
genDateTimeWithinRange(Instant.now(), Duration.ofDays(30))
37+
.map(_.truncatedTo(ChronoUnit.MICROS))
38+
.map(Some(_))
39+
} yield DefaultAtlassianHost(
40+
clientKey,
41+
key,
42+
oauthClientId,
43+
installationId,
44+
sharedSecret,
45+
baseUrl,
46+
baseUrl,
47+
baseUrl,
48+
productType,
49+
description,
50+
serviceEntitlementNumber,
51+
entitlementId,
52+
entitlementNumber,
53+
installed,
54+
ttl
55+
)
4556

4657
}

project/Dependencies.scala

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import sbt._
1+
import sbt.*
22

33
object Dependencies {
44
val root = Seq(
@@ -8,7 +8,8 @@ object Dependencies {
88
Library.scalaTest % "test",
99
Library.scalaCheck % "test",
1010
Library.scalaTestPlusScalaCheck % "test",
11-
Library.h2 % "test",
11+
Library.scalaCheckDateTime % "test",
12+
Library.h2 % "test"
1213
)
1314

1415
val integration = Seq(
@@ -19,29 +20,39 @@ object Dependencies {
1920
Library.testcontainersScala % "test",
2021
Library.testcontainersScalaPostgresql % "test",
2122
Library.scalaTestPlusScalaCheck % "test",
23+
Library.scalaCheckDateTime % "test"
2224
)
2325
}
2426

2527
object Version {
26-
val atlassianConnectPlay = "0.8.0"
27-
val playSlick = "6.1.0"
28-
val scalaTestPlusPlay = "7.0.1"
29-
val scalaCheck = "1.18.0"
28+
val atlassianConnectPlay = "0.9.0"
29+
val playSlick = "6.2.0"
30+
val scalaTestPlusPlay = "7.0.2"
31+
val scalaCheck = "1.18.1"
3032
val scalaTestPlusScalaCheck = "3.2.18.0"
31-
val h2 = "1.4.197"
32-
val postgres = "42.6.0"
33-
val testcontainersScala = "0.41.3"
33+
val scalaCheckDateTime = "0.7.0"
34+
val h2 = "2.3.232"
35+
val postgres = "42.7.7"
36+
val testcontainersScala = "0.43.0"
3437
}
3538

3639
object Library {
37-
val atlassianConnectApi = "io.toolsplus" %% "atlassian-connect-play-api" % Version.atlassianConnectPlay
40+
val atlassianConnectApi =
41+
"io.toolsplus" %% "atlassian-connect-play-api" % Version.atlassianConnectPlay
3842
val playSlick = "org.playframework" %% "play-slick" % Version.playSlick
39-
val playSlickEvolutions = "org.playframework" %% "play-slick-evolutions" % Version.playSlick
40-
val scalaTest = "org.scalatestplus.play" %% "scalatestplus-play" % Version.scalaTestPlusPlay
43+
val playSlickEvolutions =
44+
"org.playframework" %% "play-slick-evolutions" % Version.playSlick
45+
val scalaTest =
46+
"org.scalatestplus.play" %% "scalatestplus-play" % Version.scalaTestPlusPlay
4147
val scalaCheck = "org.scalacheck" %% "scalacheck" % Version.scalaCheck
42-
val scalaTestPlusScalaCheck = "org.scalatestplus" %% "scalacheck-1-17" % Version.scalaTestPlusScalaCheck
48+
val scalaTestPlusScalaCheck =
49+
"org.scalatestplus" %% "scalacheck-1-17" % Version.scalaTestPlusScalaCheck
50+
val scalaCheckDateTime =
51+
"com.47deg" %% "scalacheck-toolbox-datetime" % Version.scalaCheckDateTime
4352
val h2 = "com.h2database" % "h2" % Version.h2
4453
val postgres = "org.postgresql" % "postgresql" % Version.postgres
45-
val testcontainersScala = "com.dimafeng" %% "testcontainers-scala-scalatest" % Version.testcontainersScala
46-
val testcontainersScalaPostgresql = "com.dimafeng" %% "testcontainers-scala-postgresql" % Version.testcontainersScala
54+
val testcontainersScala =
55+
"com.dimafeng" %% "testcontainers-scala-scalatest" % Version.testcontainersScala
56+
val testcontainersScalaPostgresql =
57+
"com.dimafeng" %% "testcontainers-scala-postgresql" % Version.testcontainersScala
4758
}

project/plugins.sbt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.12")
2-
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.0")
3-
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.13")
4-
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.2")
5-
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.1")
1+
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.3.1")
2+
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.5")
3+
addSbtPlugin("com.github.sbt" % "sbt-release" % "1.4.0")
4+
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.12.2")
5+
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")

0 commit comments

Comments
 (0)