diff --git a/bamboo-specs/bamboo.yml b/bamboo-specs/bamboo.yml
deleted file mode 100644
index 6cfa7a3..0000000
--- a/bamboo-specs/bamboo.yml
+++ /dev/null
@@ -1,166 +0,0 @@
----
-version: 2
-
-plan:
- project-key: RED
- key: PYINFRA
- name: pyinfra
- description: Build for pyinfra
-
-stages:
-- Sonar Stage:
- manual: false
- final: false
- jobs:
- - Sonar Job
-
-- Git Stage:
- manual: false
- final: false
- jobs:
- - Git Tag Job
-
-- Licence Stage:
- manual: false
- final: false
- jobs:
- - Licence Job
-
-Sonar Job:
- key: SONAR
- docker:
- image: nexus.iqser.com:5001/infra/release_build:4.2.0
- volumes:
- ${bamboo.working.directory}: ${bamboo.working.directory}
- ${bamboo.tmp.directory}: ${bamboo.tmp.directory}
- /var/run/docker.sock: /var/run/docker.sock
- docker-run-arguments: []
- tasks:
- - clean:
- description: Clean working directory.
- - checkout:
- force-clean-build: 'false'
- description: Checkout default repository.
- - script:
- interpreter: SHELL
- scripts:
- - |-
- mkdir -p ~/.ssh
- echo "${bamboo.bamboo_agent_ssh}" | base64 -d >> ~/.ssh/id_rsa
- echo "host vector.iqser.com" > ~/.ssh/config
- echo " user bamboo-agent" >> ~/.ssh/config
- chmod 600 ~/.ssh/config ~/.ssh/id_rsa
- - script:
- interpreter: SHELL
- file: bamboo-specs/scripts/sonar-scan.sh
- argument: pyinfra
- description: Run Sonarqube scan.
- artifact-subscriptions: []
-
-Git Tag Job:
- key: GITTAG
- docker:
- image: nexus.iqser.com:5001/infra/release_build:4.4.1
- volumes:
- ${bamboo.working.directory}: ${bamboo.working.directory}
- ${bamboo.tmp.directory}: ${bamboo.tmp.directory}
- docker-run-arguments: []
- tasks:
- - checkout:
- force-clean-build: 'false'
- description: Checkout default repository.
- - script:
- interpreter: SHELL
- file: bamboo-specs/scripts/git-tag.sh
- description: Build git tag.
- - inject-variables:
- file: git.tag
- scope: LOCAL
- namespace: g
- description: Inject git tag.
- - any-task:
- plugin-key: com.atlassian.bamboo.plugins.vcs:task.vcs.tagging
- configuration:
- selectedRepository: defaultRepository
- tagName: ${bamboo.g.gitTag}
- description: ${bamboo.g.gitTag}
- artifact-subscriptions: []
-
-Licence Job:
- key: LICENCE
- docker:
- image: nexus.iqser.com:5001/infra/maven:3.6.2-jdk-13-3.0.0
- volumes:
- ${bamboo.working.directory}: ${bamboo.working.directory}
- ${bamboo.tmp.directory}: ${bamboo.tmp.directory}
- /etc/maven/settings.xml: /usr/share/maven/ref/settings.xml
- /var/run/docker.sock: /var/run/docker.sock
- docker-run-arguments: []
- tasks:
- - checkout:
- force-clean-build: 'false'
- description: Checkout default repository.
- - script:
- interpreter: SHELL
- file: bamboo-specs/scripts/create-licence.sh
- description: Build licence.
- artifact-subscriptions: []
-
-repositories:
-- RR / pyinfra:
- scope: global
-
-triggers:
-- bitbucket-server-trigger
-
-branches:
- create: for-new-branch
- delete:
- after-deleted-days: never
- after-inactive-days: 14
- link-to-jira: true
-
-notifications: []
-
-labels: []
-
-dependencies:
- require-all-stages-passing: true
- enabled-for-branches: true
- block-strategy: none
- plans: []
-
-other:
- concurrent-build-plugin: system-default
----
-version: 2
-
-plan:
- key: RED-PYINFRA
-
-plan-permissions:
-- roles:
- - logged-in
- - anonymous
- permissions:
- - view
-- users:
- - atlbamboo
- permissions:
- - view
- - edit
- - build
- - clone
- - admin
- - view-configuration
-- groups:
- - QA
- - research
- - Development
- permissions:
- - view
- - edit
- - build
- - clone
- - view-configuration
-...
diff --git a/bamboo-specs/pom.xml b/bamboo-specs/pom.xml
new file mode 100644
index 0000000..886e255
--- /dev/null
+++ b/bamboo-specs/pom.xml
@@ -0,0 +1,40 @@
+
+ 4.0.0
+
+
+ com.atlassian.bamboo
+ bamboo-specs-parent
+ 7.1.2
+
+
+
+ bamboo-specs
+ 1.0.0-SNAPSHOT
+ jar
+
+
+ true
+
+
+
+
+ com.atlassian.bamboo
+ bamboo-specs-api
+
+
+ com.atlassian.bamboo
+ bamboo-specs
+
+
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+
diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java
new file mode 100644
index 0000000..4499c4b
--- /dev/null
+++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java
@@ -0,0 +1,163 @@
+package buildjob;
+
+import com.atlassian.bamboo.specs.api.BambooSpec;
+import com.atlassian.bamboo.specs.api.builders.BambooKey;
+import com.atlassian.bamboo.specs.api.builders.docker.DockerConfiguration;
+import com.atlassian.bamboo.specs.api.builders.permission.PermissionType;
+import com.atlassian.bamboo.specs.api.builders.permission.Permissions;
+import com.atlassian.bamboo.specs.api.builders.permission.PlanPermissions;
+import com.atlassian.bamboo.specs.api.builders.plan.Job;
+import com.atlassian.bamboo.specs.api.builders.plan.Plan;
+import com.atlassian.bamboo.specs.api.builders.plan.PlanIdentifier;
+import com.atlassian.bamboo.specs.api.builders.plan.Stage;
+import com.atlassian.bamboo.specs.api.builders.plan.branches.BranchCleanup;
+import com.atlassian.bamboo.specs.api.builders.plan.branches.PlanBranchManagement;
+import com.atlassian.bamboo.specs.api.builders.project.Project;
+import com.atlassian.bamboo.specs.builders.task.CheckoutItem;
+import com.atlassian.bamboo.specs.builders.task.InjectVariablesTask;
+import com.atlassian.bamboo.specs.builders.task.ScriptTask;
+import com.atlassian.bamboo.specs.builders.task.VcsCheckoutTask;
+import com.atlassian.bamboo.specs.builders.task.CleanWorkingDirectoryTask;
+import com.atlassian.bamboo.specs.builders.task.VcsTagTask;
+import com.atlassian.bamboo.specs.builders.trigger.BitbucketServerTrigger;
+import com.atlassian.bamboo.specs.model.task.InjectVariablesScope;
+import com.atlassian.bamboo.specs.util.BambooServer;
+import com.atlassian.bamboo.specs.model.task.ScriptTaskProperties.Location;
+
+/**
+ * Plan configuration for Bamboo.
+ * Learn more on: https://confluence.atlassian.com/display/BAMBOO/Bamboo+Specs
+ */
+@BambooSpec
+public class PlanSpec {
+
+ private static final String SERVICE_NAME = "pyinfra";
+
+ private static final String SERVICE_KEY = SERVICE_NAME.toUpperCase().replaceAll("-", "");
+
+ /**
+ * Run main to publish plan on Bamboo
+ */
+ public static void main(final String[] args) throws Exception {
+ // By default credentials are read from the '.credentials' file.
+ BambooServer bambooServer = new BambooServer("http://localhost:8085");
+
+ Plan plan = new PlanSpec().createBuildPlan();
+ bambooServer.publish(plan);
+ PlanPermissions planPermission = new PlanSpec().createPlanPermission(plan.getIdentifier());
+ bambooServer.publish(planPermission);
+ }
+
+ private PlanPermissions createPlanPermission(PlanIdentifier planIdentifier) {
+ Permissions permission = new Permissions()
+ .userPermissions("atlbamboo", PermissionType.EDIT, PermissionType.VIEW, PermissionType.ADMIN,
+ PermissionType.CLONE, PermissionType.BUILD)
+ .groupPermissions("research", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE,
+ PermissionType.BUILD)
+ .groupPermissions("Development", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE,
+ PermissionType.BUILD)
+ .groupPermissions("QA", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE,
+ PermissionType.BUILD)
+ .loggedInUserPermissions(PermissionType.VIEW)
+ .anonymousUserPermissionView();
+ return new PlanPermissions(planIdentifier.getProjectKey(), planIdentifier.getPlanKey()).permissions(permission);
+ }
+
+ private Project project() {
+ return new Project()
+ .name("RED")
+ .key(new BambooKey("RED"));
+ }
+
+ public Plan createBuildPlan() {
+ return new Plan(
+ project(),
+ SERVICE_NAME, new BambooKey(SERVICE_KEY))
+ .description("Build for pyinfra")
+ .stages(
+ new Stage("Sonar Stage")
+ .jobs(
+ new Job("Sonar Job", new BambooKey("SONAR"))
+ .tasks(
+ new CleanWorkingDirectoryTask()
+ .description("Clean working directory.")
+ .enabled(true),
+ new VcsCheckoutTask()
+ .description("Checkout default repository.")
+ .checkoutItems(new CheckoutItem().defaultRepository()),
+ new ScriptTask()
+ .description("Set config and keys.")
+ .inlineBody("mkdir -p ~/.ssh\n" +
+ "echo \"${bamboo.bamboo_agent_ssh}\" | base64 -d >> ~/.ssh/id_rsa\n"
+ +
+ "echo \"host vector.iqser.com\" > ~/.ssh/config\n"
+ +
+ "echo \" user bamboo-agent\" >> ~/.ssh/config\n"
+ +
+ "chmod 600 ~/.ssh/config ~/.ssh/id_rsa"),
+ new ScriptTask()
+ .description("Run Sonarqube scan.")
+ .location(Location.FILE)
+ .fileFromPath(
+ "bamboo-specs/src/main/resources/scripts/sonar-scan.sh")
+ .argument(SERVICE_NAME))
+ .dockerConfiguration(
+ new DockerConfiguration()
+ .image("nexus.iqser.com:5001/infra/release_build:4.2.0")
+ .volume("/var/run/docker.sock",
+ "/var/run/docker.sock"))),
+ new Stage("Git Stage")
+ .jobs(
+ new Job("Git Tag Job", new BambooKey("GITTAG"))
+ .tasks(
+ new VcsCheckoutTask()
+ .description("Checkout default repository.")
+ .checkoutItems(new CheckoutItem().defaultRepository()),
+ new ScriptTask()
+ .description("Build git tag.")
+ .location(Location.FILE)
+ .fileFromPath(
+ "bamboo-specs/src/main/resources/scripts/git-tag.sh"),
+ new InjectVariablesTask()
+ .description("Inject git tag.")
+ .path("git.tag")
+ .namespace("g")
+ .scope(InjectVariablesScope.LOCAL),
+ new VcsTagTask()
+ .description("${bamboo.g.gitTag}")
+ .tagName("${bamboo.g.gitTag}")
+ .defaultRepository())
+ .dockerConfiguration(
+ new DockerConfiguration()
+ .image("nexus.iqser.com:5001/infra/release_build:4.4.1"))),
+ new Stage("Licence Stage")
+ .jobs(
+ new Job("Licence Job", new BambooKey("LICENCE"))
+ .enabled(false)
+ .tasks(
+ new VcsCheckoutTask()
+ .description("Checkout default repository.")
+ .checkoutItems(new CheckoutItem().defaultRepository()),
+ new ScriptTask()
+ .description("Build licence.")
+ .location(Location.FILE)
+ .fileFromPath(
+ "bamboo-specs/src/main/resources/scripts/create-licence.sh"))
+ .dockerConfiguration(
+ new DockerConfiguration()
+ .image("nexus.iqser.com:5001/infra/maven:3.6.2-jdk-13-3.0.0")
+ .volume("/etc/maven/settings.xml",
+ "/usr/share/maven/ref/settings.xml")
+ .volume("/var/run/docker.sock",
+ "/var/run/docker.sock"))))
+ .linkedRepositories("RR / " + SERVICE_NAME)
+ .triggers(new BitbucketServerTrigger())
+ .planBranchManagement(
+ new PlanBranchManagement()
+ .createForVcsBranch()
+ .delete(new BranchCleanup()
+ .whenInactiveInRepositoryAfterDays(14))
+ .notificationForCommitters());
+ }
+}
diff --git a/bamboo-specs/scripts/config-keys.sh b/bamboo-specs/src/main/resources/scripts/config-keys.sh
similarity index 100%
rename from bamboo-specs/scripts/config-keys.sh
rename to bamboo-specs/src/main/resources/scripts/config-keys.sh
diff --git a/bamboo-specs/scripts/create-licence.sh b/bamboo-specs/src/main/resources/scripts/create-licence.sh
similarity index 100%
rename from bamboo-specs/scripts/create-licence.sh
rename to bamboo-specs/src/main/resources/scripts/create-licence.sh
diff --git a/bamboo-specs/scripts/git-tag.sh b/bamboo-specs/src/main/resources/scripts/git-tag.sh
similarity index 100%
rename from bamboo-specs/scripts/git-tag.sh
rename to bamboo-specs/src/main/resources/scripts/git-tag.sh
diff --git a/bamboo-specs/scripts/sonar-scan.sh b/bamboo-specs/src/main/resources/scripts/sonar-scan.sh
similarity index 100%
rename from bamboo-specs/scripts/sonar-scan.sh
rename to bamboo-specs/src/main/resources/scripts/sonar-scan.sh
diff --git a/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java
new file mode 100644
index 0000000..7416b28
--- /dev/null
+++ b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java
@@ -0,0 +1,16 @@
+package buildjob;
+
+
+import com.atlassian.bamboo.specs.api.builders.plan.Plan;
+import com.atlassian.bamboo.specs.api.exceptions.PropertiesValidationException;
+import com.atlassian.bamboo.specs.api.util.EntityPropertiesBuilders;
+import org.junit.Test;
+
+public class PlanSpecTest {
+ @Test
+ public void checkYourPlanOffline() throws PropertiesValidationException {
+ Plan plan = new PlanSpec().createDockerBuildPlan();
+
+ EntityPropertiesBuilders.build(plan);
+ }
+}