Skip to content

Commit 644406e

Browse files
authored
1.2.0 release (#6)
* Working on BitbucketContainer. Basic deployment now works * Added runOnFirstStartup to containers Started added network related methods to Container.groovy, testing in progress * Started adding networking to Containers interface * Minor bugfixes * Updated to use the new JiraInstanceManager and bitbucketinstancemanager Added Deployment for Bitbucket H2 * JsmAndBitbucketH2Deployment.groovy Now deploys JSM and Bitbucket in parallel Perhaps create a new interface superDeployment * Container.groovy * Most of the static methods and fields have been removed in interface and sub-classes * Added createContainer() with cmd and run parameters * Renamed inspect() method to inspectContainer() to not interfere with native groovy method * stopAndRemoveContainer() now kills container after timeout * A lot of work on networking for containers AlpineContainer.groovy * Now has createSleepyContainer() * Container.groovy * getIP is now getIPs to support multiple IPs and to resolve the IP in a more dependable fashion * Networking is now done is so is testing of it * Added networking to Deployments * Working on Groovy 2 and 3 versions of the library. Working on a standard class for spock testing Implemented changes due to updates to underlying docker client library * Configured more of the tests to us DevStackSpec * Working on git actions * Workflow fixes * Minor tweaks * Cleanup * Bumped version to 1.1.0 * Fixed bug in workflow * Minor fixes and tweaks * Added dependency on JiraShortcuts JsmContainer.groovy and JsmH2Deployment.groovy now dynamically sets container port based on base url * BitbucketContainer.groovy and BitbucketH2Deployment.groovy now works with custom url and port * Updated version to 1.2.0 * Updated github action workflow * Working on BitbucketContainer. Basic deployment now works * Added runOnFirstStartup to containers Started added network related methods to Container.groovy, testing in progress * Started adding networking to Containers interface * Minor bugfixes * Updated to use the new JiraInstanceManager and bitbucketinstancemanager Added Deployment for Bitbucket H2 * JsmAndBitbucketH2Deployment.groovy Now deploys JSM and Bitbucket in parallel Perhaps create a new interface superDeployment * Container.groovy * Most of the static methods and fields have been removed in interface and sub-classes * Added createContainer() with cmd and run parameters * Renamed inspect() method to inspectContainer() to not interfere with native groovy method * stopAndRemoveContainer() now kills container after timeout * A lot of work on networking for containers AlpineContainer.groovy * Now has createSleepyContainer() * Container.groovy * getIP is now getIPs to support multiple IPs and to resolve the IP in a more dependable fashion * Networking is now done is so is testing of it * Added networking to Deployments * Working on Groovy 2 and 3 versions of the library. Working on a standard class for spock testing Implemented changes due to updates to underlying docker client library * Configured more of the tests to us DevStackSpec * Working on git actions * Workflow fixes * Minor tweaks * Cleanup * Bumped version to 1.1.0 * Fixed bug in workflow * Minor fixes and tweaks * Added dependency on JiraShortcuts JsmContainer.groovy and JsmH2Deployment.groovy now dynamically sets container port based on base url * BitbucketContainer.groovy and BitbucketH2Deployment.groovy now works with custom url and port * Updated version to 1.2.0 * Updated github action workflow * Added jarRepositories.xml * JsmAndBitbucketH2DeploymentTest.groovy added jiraAppsToInstall
1 parent 21093cf commit 644406e

17 files changed

Lines changed: 242 additions & 141 deletions

.github/workflows/publish-maven-package.yml

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,50 @@ jobs:
2121
with:
2222
java-version: '11'
2323
distribution: 'temurin'
24-
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
25-
settings-path: ${{ github.workspace }} # location for the settings.xml file
24+
cache: "maven"
2625

2726
#Manually first (once) set up an orphaned branch:
2827
# git switch --orphan packages
2928
# git commit --allow-empty -m "Initial commit on packages branch"
3029
# git push origin packages:packages
3130

32-
- name: Install Package to packages branch
31+
- name: Cache local Maven repository
32+
uses: actions/cache@v2
33+
with:
34+
path: ~/.m2/repository
35+
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
36+
restore-keys: |
37+
${{ runner.os }}-maven-
38+
39+
- name: Installing parent pom file
3340
run: |
34-
mkdir localm2
41+
42+
3543
mkdir -p repository/com/eficode/devstack
3644
3745
echo Installing parent pom file
38-
mvn install:install-file -Dpackaing=pom -Dfile=pom.xml -DpomFile=pom.xml -Dmaven.repo.local=localm2/ -DcreateChecksum=true
46+
mvn install:install-file -Dpackaing=pom -Dfile=pom.xml -DpomFile=pom.xml -DcreateChecksum=true
47+
48+
- name: Installing Groovy 2.5 Version
49+
run: |
3950
4051
echo Compiling, Packaging and Installing Groovy 2.5 version of library to local m2 directory
41-
mvn install -f pom-2.5.xml -Dmaven.repo.local=localm2/ -DcreateChecksum=true
52+
mvn install -f pom-2.5.xml -DcreateChecksum=true
53+
54+
- name: Installing Groovy 3 Version
55+
run: |
4256
4357
echo Compiling, Packaging and Installing Groovy 3.0 version of library to local m2 directory
44-
mvn install -f pom-3.0.xml -Dmaven.repo.local=localm2/ -DcreateChecksum=true
45-
58+
mvn install -f pom-3.0.xml -DcreateChecksum=true
59+
60+
61+
- name: Copying JAR files
62+
run: |
4663
echo Copying the new JAR files to repository which will be added to git branch "packages"
47-
rsync -avh --checksum localm2/com/eficode/devstack repository/com/eficode/devstack
48-
64+
rsync -avh --checksum ~/.m2/repository/com/eficode/devstack/ repository/com/eficode/devstack/
65+
66+
- name: Committing and pushing JAR files
67+
run: |
4968
5069
git config user.name github-actions
5170
git config user.email github-actions@github.com

.idea/jarRepositories.xml

Lines changed: 60 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pom-2.5.xml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66

77
<name>DevStack for Groovy 2.5</name>
88
<artifactId>devstack</artifactId>
9-
<version>1.1.0-SNAPSHOT-groovy-2.5</version>
9+
<version>1.2.0-SNAPSHOT-groovy-2.5</version>
1010
<packaging>jar</packaging>
1111

1212

1313
<parent>
1414
<groupId>com.eficode</groupId>
1515
<artifactId>devstack</artifactId>
16-
<version>1.1.0-SNAPSHOT</version>
16+
<version>1.2.0-SNAPSHOT</version>
1717
<relativePath>pom.xml</relativePath>
1818
</parent>
1919

@@ -32,6 +32,13 @@
3232
</dependency>
3333

3434

35+
<dependency>
36+
<groupId>com.eficode.atlassian</groupId>
37+
<artifactId>JiraShortcuts</artifactId>
38+
<version>2.0-SNAPSHOT-groovy-2.5</version>
39+
</dependency>
40+
41+
3542

3643
<dependency>
3744
<groupId>com.eficode.atlassian</groupId>

pom-3.0.xml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66

77
<name>DevStack for Groovy 3</name>
88
<artifactId>devstack</artifactId>
9-
<version>1.1.0-SNAPSHOT-groovy-3.0</version>
9+
<version>1.2.0-SNAPSHOT-groovy-3.0</version>
1010
<packaging>jar</packaging>
1111

1212

1313
<parent>
1414
<groupId>com.eficode</groupId>
1515
<artifactId>devstack</artifactId>
16-
<version>1.1.0-SNAPSHOT</version>
16+
<version>1.2.0-SNAPSHOT</version>
1717
<relativePath>pom.xml</relativePath>
1818
</parent>
1919

@@ -31,12 +31,17 @@
3131
<scope>test</scope>
3232
</dependency>
3333

34+
<dependency>
35+
<groupId>com.eficode.atlassian</groupId>
36+
<artifactId>JiraShortcuts</artifactId>
37+
<version>2.0-SNAPSHOT-groovy-3.0</version>
38+
</dependency>
3439

3540

3641
<dependency>
3742
<groupId>com.eficode.atlassian</groupId>
3843
<artifactId>bitbucketinstancemanager</artifactId>
39-
<version>0.0.3-SNAPSHOT-groovy-2.5</version>
44+
<version>0.0.3-SNAPSHOT-groovy-3.0</version>
4045
<classifier>standalone</classifier>
4146
</dependency>
4247

pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.eficode</groupId>
88
<artifactId>devstack</artifactId>
9-
<version>1.1.0-SNAPSHOT</version>
9+
<version>1.2.0-SNAPSHOT</version>
1010

1111
<name>DevStack - Parent pom</name>
1212

@@ -54,6 +54,7 @@
5454
<version>1.1.0-SNAPSHOT</version>
5555
</dependency>
5656

57+
5758
<dependency>
5859
<groupId>de.gesellix</groupId>
5960
<artifactId>docker-client</artifactId>
@@ -99,6 +100,10 @@
99100
<id>eficode-github-BitbucketInstanceManagerRest</id>
100101
<url>https://github.com/eficode/BitbucketInstanceManagerRest/raw/packages/repository/</url>
101102
</repository>
103+
<repository>
104+
<id>eficode-github-JiraShortcuts</id>
105+
<url>https://github.com/eficode/JiraShortcuts/raw/packages/repository/</url>
106+
</repository>
102107
</repositories>
103108

104109
<build>

src/main/groovy/com/eficode/devstack/container/Container.groovy

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import org.slf4j.LoggerFactory
3030
import java.nio.file.Files
3131
import java.nio.file.Path
3232
import java.time.Duration
33+
import java.util.regex.Matcher
34+
import java.util.regex.Pattern
3335

3436
trait Container {
3537

@@ -58,8 +60,6 @@ trait Container {
5860
}
5961

6062

61-
62-
6363
abstract String createContainer(ArrayList<String> cmd, ArrayList<String> entrypoint)
6464

6565
abstract String createContainer()
@@ -126,7 +126,7 @@ trait Container {
126126
ArrayList<ContainerSummary> containers = dockerClient.ps().content
127127

128128
ContainerSummary matchingContainer = containers.find { it.names.first() == "/" + self.containerName }
129-
this.containerId = matchingContainer.id
129+
this.containerId = matchingContainer?.id
130130
log.info("\tGot:" + this.containerId)
131131

132132
return containerId
@@ -147,6 +147,7 @@ trait Container {
147147
}
148148

149149
setContainerNetworks([network])
150+
150151
dockerClient.startContainer(self.containerId)
151152

152153

@@ -192,13 +193,12 @@ trait Container {
192193
ContainerInspectResponse inspectResponse = inspectContainer()
193194
ArrayList<String> ips = inspectResponse.networkSettings.networks.values().ipAddress
194195

195-
if (inspectResponse.networkSettings.ipAddress != null ) {
196+
if (inspectResponse.networkSettings.ipAddress != null) {
196197
ips.add(inspectResponse.networkSettings.ipAddress)
197198
ips.unique(true)
198199
}
199200

200201

201-
202202
return ips
203203
}
204204

@@ -233,7 +233,8 @@ trait Container {
233233
}
234234
return false
235235
} else {
236-
return false
236+
log.info("\tContainer not setup, nothing to remove")
237+
return true
237238
}
238239

239240

@@ -417,12 +418,12 @@ trait Container {
417418
Map<String, EndpointSettings> rawResponse = inspectContainer().networkSettings.networks
418419

419420
ArrayList<Network> networks = []
420-
rawResponse.keySet().each {networkId ->
421+
rawResponse.keySet().each { networkId ->
421422
Network network = getNetwork(networkId)
422423

423424
if (network != null) {
424425
networks.add(network)
425-
}else if (networkId) {
426+
} else if (networkId) {
426427
//Handle networks that the container is attached to but that have been deleted
427428
Network deletedNetwork = new Network()
428429
deletedNetwork.id = networkId
@@ -437,7 +438,7 @@ trait Container {
437438
ArrayList<Network> getContainerBridgeNetworks() {
438439

439440

440-
return getContainerNetworks().findAll {it.driver == "bridge"}
441+
return getContainerNetworks().findAll { it.driver == "bridge" }
441442

442443
}
443444

@@ -448,7 +449,7 @@ trait Container {
448449
* @param network
449450
* @return true on success
450451
*/
451-
boolean connectContainerToNetwork(Network network) throws InputMismatchException{
452+
boolean connectContainerToNetwork(Network network) throws InputMismatchException {
452453

453454

454455
log.info("Connecting container $containerId to network:" + network.name)
@@ -493,7 +494,7 @@ trait Container {
493494
* @param newNetworks A list of the networks that the container should be connected to
494495
* @return true on success
495496
*/
496-
boolean setContainerNetworks(ArrayList<Network> newNetworks) throws InputMismatchException, AssertionError{
497+
boolean setContainerNetworks(ArrayList<Network> newNetworks) throws InputMismatchException, AssertionError {
497498

498499
log.info("Setting container networks")
499500
log.info("\tBeginning by disconnecting any networks it should no longer be connected to")
@@ -508,7 +509,7 @@ trait Container {
508509
}
509510
log.info("\tFinished disconnecting container from unwanted networks, now connecting to new networks")
510511

511-
ArrayList<Network>connectedNetworks = containerNetworks
512+
ArrayList<Network> connectedNetworks = containerNetworks
512513
newNetworks.each { wantedNetwork ->
513514

514515
if (connectedNetworks.id.find { wantedNetwork.id }) {
@@ -591,6 +592,24 @@ trait Container {
591592
}
592593

593594

595+
/**
596+
* Gets the port from a URL
597+
* @param url
598+
* @return
599+
*/
600+
String extractPortFromUrl(String url) {
601+
Pattern pattern = Pattern.compile(".*?:(\\d+)")
602+
603+
Matcher matcher = pattern.matcher(url)
604+
if (matcher.find() && matcher.groupCount() > 0) {
605+
return matcher.group(1)
606+
} else if (url.startsWith("https")) {
607+
return "443"
608+
} else {
609+
return "80"
610+
}
611+
612+
}
594613

595614
String extractDomainFromUrl(String url) {
596615
String out = url.replaceFirst(/^https?:\/\//, "") //Remove protocol
@@ -600,5 +619,4 @@ trait Container {
600619
}
601620

602621

603-
604622
}

src/main/groovy/com/eficode/devstack/container/impl/BitbucketContainer.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ class BitbucketContainer implements Container{
4848

4949
}
5050

51-
String createBbContainer(String containerName = this.containerName, String imageName = containerImage, String imageTag = containerImageTag, long maxRamMB = jvmMaxRam, String mainPort = containerMainPort) {
51+
String createBbContainer(String containerName = this.containerName, String imageName = containerImage, String imageTag = containerImageTag, long maxRamMB = jvmMaxRam, String mainPort = containerMainPort, String baseUrl = this.containerName) {
5252

5353
assert dockerClient.ping().content as String == "OK", "Error Connecting to docker service"
5454

5555

5656
ContainerCreateRequest containerCreateRequest = new ContainerCreateRequest().tap { c ->
5757

5858
c.image = imageName + ":" + imageTag
59-
c.env = ["JVM_MAXIMUM_MEMORY=" + maxRamMB.toString() + "m", "JVM_MINIMUM_MEMORY=" + ((maxRamMB / 2) as String) + "m"]
59+
c.env = ["JVM_MAXIMUM_MEMORY=" + maxRamMB.toString() + "m", "JVM_MINIMUM_MEMORY=" + ((maxRamMB / 2) as String) + "m", "SETUP_BASEURL=" + baseUrl]
6060
c.exposedPorts = [(mainPort + "/tcp"): [:]]
61-
c.hostConfig = new HostConfig().tap { h -> h.portBindings = [(mainPort + "/tcp"): [new PortBinding("0.0.0.0", (mainPort.toString()))]] }
61+
c.hostConfig = new HostConfig().tap { h -> h.portBindings = [("7990/tcp"): [new PortBinding("0.0.0.0", (mainPort.toString()))]] }
6262
c.hostname = containerName
6363

6464
}
@@ -76,7 +76,7 @@ class BitbucketContainer implements Container{
7676

7777
boolean runOnFirstStartup() {
7878
log.debug("\tUpdating apt and installing dependencies")
79-
assert runBashCommandInContainer("apt update; apt install -y htop nano inetutils-ping; echo status: \$?", 20).any {it.contains("status: 0")}
79+
assert runBashCommandInContainer("apt update; apt install -y htop nano inetutils-ping net-tools; echo status: \$?", 300).any {it.contains("status: 0")}
8080

8181
return true
8282
}

0 commit comments

Comments
 (0)