diff --git a/concourse/experimental-pipeline.yml b/concourse/experimental-pipeline.yml new file mode 100644 index 000000000..c76b2343f --- /dev/null +++ b/concourse/experimental-pipeline.yml @@ -0,0 +1,29 @@ +resources: +- name: jvm-launch-utils-git + type: git + source: + uri: git@github.com:spring-projects/sts4.git + private_key: ((rsa_id)) + branch: ((branch)) + paths: + - nodejs-packages/jvm-launch-utils +- name: tasks + type: git + source: + uri: git@github.com:spring-projects/sts4.git + private_key: ((rsa_id)) + branch: ((branch)) +jobs: +- name: publish-jvm-launch-utils + plan: + - aggregate: + - get: jvm-launch-utils-git + trigger: true + - get: tasks + - task: publish + file: tasks/concourse/tasks/npm-publish.yml + input_mapping: + sources_repo: jvm-launch-utils-git + params: + npm_token: ((npm_token)) + sources_dir: nodejs-packages/jvm-launch-utils diff --git a/concourse/pipeline-kdvolder-wip.yml b/concourse/pipeline-kdvolder-wip.yml new file mode 100644 index 000000000..5b6e4a860 --- /dev/null +++ b/concourse/pipeline-kdvolder-wip.yml @@ -0,0 +1,1007 @@ +########################################################## +resource_types: +- name: s3-multi + type: docker-image + source: + repository: kdvolder/s3-resource-simple +- name: slack-notification + type: docker-image + source: + repository: cfcommunity/slack-notification-resource + tag: latest +######################################################### +resources: +- name: monthly + type: time + check_every: 24h + source: + interval: 720h +- name: docker-git + type: git + source: + uri: git@github.com:spring-projects/sts4.git + branch: ((branch)) + private_key: ((rsa_id)) + paths: + - concourse/docker +- name: sts4 + type: git + source: + uri: git@github.com:spring-projects/sts4.git + branch: ((branch)) + private_key: ((rsa_id)) +- name: sts4-out + type: git + source: + uri: git@github.com:spring-projects/sts4.git + branch: ((branch)) + private_key: ((rsa_id)) +- name: atom-cf-manifest-yaml + type: git + source: + branch: ((branch)) + private_key: ((rsa_id)) + uri: git@github.com:spring-projects/atom-cf-manifest-yaml.git +- name: atom-concourse + type: git + source: + branch: ((branch)) + private_key: ((rsa_id)) + uri: git@github.com:spring-projects/atom-concourse.git +- name: atom-bosh + type: git + source: + branch: ((branch)) + private_key: ((rsa_id)) + uri: git@github.com:spring-projects/atom-bosh.git +- name: atom-spring-boot + type: git + source: + branch: ((branch)) + private_key: ((rsa_id)) + uri: git@github.com:spring-projects/atom-spring-boot.git +- name: tasks + type: git + source: + uri: git@github.com:spring-projects/sts4.git + branch: ((branch)) + paths: + - concourse/tasks + private_key: ((rsa_id)) +- name: s3-concourse-vsix-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/vscode-extensions/kdvolder-wips/vscode-concourse-(.*).vsix +- name: s3-bosh-vsix-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/vscode-extensions/kdvolder-wips/vscode-bosh-(.*).vsix +- name: s3-manifest-yaml-vsix-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/vscode-extensions/kdvolder-wips/vscode-manifest-yaml-(.*).vsix +- name: s3-spring-boot-vsix-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/vscode-extensions/kdvolder-wips/vscode-spring-boot-(.*).vsix +- name: s3-manifest-yaml-fatjar-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/fatjars/kdvolder-wips/manifest-yaml-language-server-(.*).jar +- name: s3-manifest-yaml-fatjar--rc + type: s3 + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_prod_region)) + regexp: release/STS4/fatjars/manifest-yaml-language-server-(.*).jar +- name: s3-concourse-fatjar-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/fatjars/kdvolder-wips/concourse-language-server-(.*).jar +- name: s3-concourse-fatjar--rc + type: s3 + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_prod_region)) + regexp: release/STS4/fatjars/concourse-language-server-(.*).jar +- name: s3-bosh-fatjar-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/fatjars/kdvolder-wips/bosh-language-server-(.*).jar +- name: s3-bosh-fatjar--rc + type: s3 + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_prod_region)) + regexp: release/STS4/fatjars/bosh-language-server-(.*).jar +- name: s3-spring-boot-fatjar-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/fatjars/kdvolder-wips/spring-boot-language-server-(.*).jar +- name: s3-spring-boot-fatjar--rc + type: s3 + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_prod_region)) + regexp: release/STS4/fatjars/spring-boot-language-server-(.*).jar +- name: s3-manifest-yaml-atom-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/atom/kdvolder-wips/cf-manifest-yaml-(.*).tgz +- name: s3-concourse-atom-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/atom/kdvolder-wips/concourse-pipeline-yaml-(.*).tgz +- name: s3-bosh-atom-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/atom/kdvolder-wips/bosh-yaml-(.*).tgz +- name: s3-spring-boot-atom-kdvolder-wip + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: sts4/atom/kdvolder-wips/spring-boot-(.*).tgz +- name: vscode-kdvolder-wip-website + type: s3-multi + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_region)) + path: kdvolder-wip/STS4/vscode-extensions + options: + - "--acl public-read" +- name: atom-kdvolder-wip-website + type: s3-multi + source: + bucket: ((s3_prod_bucket)) + access_key_id: ((s3_prod_accesskey)) + secret_access_key: ((s3_prod_secretkey)) + region_name: ((s3_region)) + path: kdvolder-wip/STS4/atom-packages + options: + - "--acl public-read" +- name: slack-notification + type: slack-notification + source: + url: ((slack_webhook)) +- name: docker-image + type: docker-image + source: + username: ((docker_hub_username)) + password: ((docker_hub_password)) + repository: kdvolder/sts4-build-env +- name: maven-cache + type: s3 + source: + bucket: ((s3_bucket)) + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + regexp: mvn-caches/sts4-(.*).tar.gz +- name: version + type: semver + source: + driver: s3 + bucket: ((s3_bucket)) + key: versions/vscode-extensions + access_key_id: ((s3_accesskey)) + secret_access_key: ((s3_secretkey)) + region_name: ((s3_region)) + initial_version: 0.0.5-RC.6 +######################################################################################## +jobs: +- name: build-docker-image + serial: true + plan: + - get: monthly + trigger: true + - get: docker-git + trigger: true + - put: docker-image + params: + build: docker-git/concourse/docker + get_params: + skip_download: true +- name: build-mvn-cache + serial: true + plan: + - get: sts4 + trigger: true + - task: build-mvn-cache + file: sts4/concourse/tasks/build-mvn-cache.yml + - put: maven-cache + params: + file: out/*.tar.gz +- name: build-consourse-vsix-kdvolder-wip + plan: + - aggregate: + - get: sts4 + trigger: true + - get: maven-cache + - task: build-consourse-vsix-kdvolder-wip + file: sts4/concourse/tasks/build-vsix.yml + params: + extension_id: vscode-concourse + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-concourse-vsix-kdvolder-wip + params: + file: out/vscode-concourse-*.vsix + acl: public-read +- name: build-bosh-vsix-kdvolder-wip + plan: + - aggregate: + - get: sts4 + trigger: true + - get: maven-cache + - task: build-bosh-vsix-kdvolder-wip + file: sts4/concourse/tasks/build-vsix.yml + params: + extension_id: vscode-bosh + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-bosh-vsix-kdvolder-wip + params: + file: out/vscode-bosh-*.vsix + acl: public-read +- name: build-manifest-yaml-vsix-kdvolder-wip + plan: + - aggregate: + - get: sts4 + trigger: true + - get: maven-cache + - task: build-manifest-yaml-vsix-kdvolder-wip + file: sts4/concourse/tasks/build-vsix.yml + params: + extension_id: vscode-manifest-yaml + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - aggregate: + - put: s3-manifest-yaml-vsix-kdvolder-wip + params: + file: out/vscode-manifest-yaml-*.vsix + acl: public-read +- name: build-spring-boot-vsix-kdvolder-wip + plan: + - aggregate: + - get: sts4 + trigger: true + - get: maven-cache + - task: build-spring-boot-vsix-kdvolder-wip + file: sts4/concourse/tasks/build-vsix.yml + params: + extension_id: vscode-spring-boot + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - aggregate: + - put: s3-spring-boot-vsix-kdvolder-wip + params: + file: out/vscode-spring-boot-*.vsix + acl: public-read +- name: trigger-rc-build + serial: true + plan: + - aggregate: + - get: sts4 + passed: + - build-manifest-yaml-vsix-kdvolder-wip + - build-consourse-vsix-kdvolder-wip + - build-bosh-vsix-kdvolder-wip + - build-spring-boot-vsix-kdvolder-wip + - do: + - get: version + params: + pre: RC + - put: version + params: + file: version/version + - put: sts4-out + params: + repository: sts4 + only_tag: true + tag_prefix: V_ + tag: version/version +- name: promote-fatjars-to-rc + serial: true + plan: + - aggregate: + - get: s3-bosh-fatjar-kdvolder-wip + passed: + - build-bosh-atom-package + - get: s3-concourse-fatjar-kdvolder-wip + passed: + - build-concourse-atom-package + - get: s3-manifest-yaml-fatjar-kdvolder-wip + passed: + - build-manifest-yaml-atom-package + - get: s3-spring-boot-fatjar-kdvolder-wip + passed: + - build-spring-boot-atom-package + - aggregate: + - put: s3-bosh-fatjar--rc + params: + file: s3-bosh-fatjar-kdvolder-wip/*.jar + acl: public-read + - put: s3-concourse-fatjar--rc + params: + file: s3-concourse-fatjar-kdvolder-wip/*.jar + acl: public-read + - put: s3-manifest-yaml-fatjar--rc + params: + file: s3-manifest-yaml-fatjar-kdvolder-wip/*.jar + acl: public-read + - put: s3-spring-boot-fatjar--rc + params: + file: s3-spring-boot-fatjar-kdvolder-wip/*.jar + acl: public-read +- name: prepare-manifest-yaml-atom-rc + serial: true + plan: + - aggregate: + - get: sts4 + - get: atom-cf-manifest-yaml + - get: s3-manifest-yaml-fatjar--rc + trigger: true + passed: + - promote-fatjars-to-rc + - task: build-atom-package + params: + package_name: atom-cf-manifest-yaml + input_mapping: + release_repo: atom-cf-manifest-yaml + fatjar: s3-manifest-yaml-fatjar--rc + file: sts4/concourse/tasks/build-atom-package.yml + - put: atom-cf-manifest-yaml + params: + repository: out/repo + rebase: true +- name: prepare-concourse-atom-rc + serial: true + plan: + - aggregate: + - get: sts4 + - get: atom-concourse + - get: s3-concourse-fatjar--rc + trigger: true + passed: + - promote-fatjars-to-rc + - task: build-atom-package + params: + package_name: atom-concourse + input_mapping: + release_repo: atom-concourse + fatjar: s3-concourse-fatjar--rc + file: sts4/concourse/tasks/build-atom-package.yml + - put: atom-concourse + params: + repository: out/repo + rebase: true +- name: prepare-bosh-atom-rc + serial: true + plan: + - aggregate: + - get: sts4 + - get: atom-bosh + - get: s3-bosh-fatjar--rc + trigger: true + passed: + - promote-fatjars-to-rc + - task: build-atom-package + params: + package_name: atom-bosh + input_mapping: + release_repo: atom-bosh + fatjar: s3-bosh-fatjar--rc + file: sts4/concourse/tasks/build-atom-package.yml + - put: atom-bosh + params: + repository: out/repo + rebase: true +- name: prepare-spring-boot-atom-rc + serial: true + plan: + - aggregate: + - get: sts4 + - get: atom-spring-boot + - get: s3-spring-boot-fatjar--rc + trigger: true + passed: + - promote-fatjars-to-rc + - task: build-atom-package + params: + package_name: atom-spring-boot + input_mapping: + release_repo: atom-spring-boot + fatjar: s3-spring-boot-fatjar--rc + file: sts4/concourse/tasks/build-atom-package.yml + - put: atom-spring-boot + params: + repository: out/repo + rebase: true +- name: build-concourse-rc + plan: + - aggregate: + - get: maven-cache + passed: + - build-consourse-vsix-kdvolder-wip + - get: sts4 + passed: + - trigger-rc-build + - get: version + trigger: true + passed: + - trigger-rc-build + - task: build-concourse-rc + file: sts4/concourse/tasks/rc-build.yml + params: + extension_id: vscode-concourse + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-concourse-vsix-kdvolder-wip + params: + file: out/vscode-concourse-*.vsix + acl: public-read + on_success: + put: slack-notification + params: + channel: "#tools-team-internal" + text_file: s3-concourse-vsix-kdvolder-wip/url + icon_url: https://raw.githubusercontent.com/spring-projects/sts4/master/vscode-extensions/vscode-concourse/icon.png + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has succeed! + Release candidate available for testing $TEXT_FILE_CONTENT +- name: build-manifest-yaml-rc + plan: + - aggregate: + - get: maven-cache + passed: + - build-manifest-yaml-vsix-kdvolder-wip + - get: sts4 + passed: + - trigger-rc-build + - get: version + trigger: true + passed: + - trigger-rc-build + - task: build-manifest-yaml-rc + file: sts4/concourse/tasks/rc-build.yml + params: + extension_id: vscode-manifest-yaml + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-manifest-yaml-vsix-kdvolder-wip + params: + file: out/vscode-manifest-yaml-*.vsix + acl: public-read + on_success: + put: slack-notification + params: + channel: "#tools-team-internal" + text_file: s3-manifest-yaml-vsix-kdvolder-wip/url + icon_url: https://raw.githubusercontent.com/spring-projects/sts4/master/vscode-extensions/vscode-manifest-yaml/icon.png + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has succeed! + Release candidate available for testing $TEXT_FILE_CONTENT +- name: build-bosh-rc + plan: + - aggregate: + - get: maven-cache + passed: + - build-bosh-vsix-kdvolder-wip + - get: sts4 + passed: + - trigger-rc-build + - get: version + trigger: true + passed: + - trigger-rc-build + - task: build-bosh-rc + file: sts4/concourse/tasks/rc-build.yml + params: + extension_id: vscode-bosh + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-bosh-vsix-kdvolder-wip + params: + file: out/vscode-*.vsix + acl: public-read + on_success: + put: slack-notification + params: + channel: "#tools-team-internal" + text_file: s3-bosh-vsix-kdvolder-wip/url + icon_url: https://raw.githubusercontent.com/spring-projects/sts4/master/vscode-extensions/vscode-concourse/icon.png + text: | + Build ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has succeed! + Release candidate available for testing $TEXT_FILE_CONTENT +- name: build-spring-boot-rc + plan: + - aggregate: + - get: maven-cache + passed: + - build-spring-boot-vsix-kdvolder-wip + - get: sts4 + passed: + - trigger-rc-build + - get: version + trigger: true + passed: + - trigger-rc-build + - task: build-spring-boot-rc + attempts: 4 + file: sts4/concourse/tasks/rc-build.yml + params: + extension_id: vscode-spring-boot + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + - put: s3-spring-boot-vsix-kdvolder-wip + params: + file: out/vscode-*.vsix + acl: public-read + on_success: + put: slack-notification + params: + channel: "#tools-team-internal" + text_file: s3-spring-boot-vsix-kdvolder-wip/url + icon_url: https://raw.githubusercontent.com/spring-projects/sts4/master/vscode-extensions/vscode-spring-boot/spring-boot-logo.png + text: | + Build ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has succeed! + Release candidate available for testing $TEXT_FILE_CONTENT +- name: publish-release + serial: true + plan: + - aggregate: + - get: tasks + - get: sts4 + passed: + - build-manifest-yaml-rc + - build-concourse-rc + - build-bosh-rc + - build-spring-boot-rc + - get: version + passed: + - build-concourse-rc + - build-manifest-yaml-rc + - build-bosh-rc + - build-spring-boot-rc + params: + bump: final + - get: s3-concourse-vsix-kdvolder-wip + passed: + - build-concourse-rc + - get: s3-manifest-yaml-vsix-kdvolder-wip + passed: + - build-manifest-yaml-rc + - get: s3-bosh-vsix-kdvolder-wip + passed: + - build-bosh-rc + - get: s3-spring-boot-vsix-kdvolder-wip + passed: + - build-spring-boot-rc + - task: publish-vsix-releases + file: tasks/concourse/tasks/publish-vsix-releases.yml + input_mapping: + sts4: tasks + params: + vsce_token: ((vsce_token)) + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + on_success: + put: slack-notification + params: + channel: "#tools-team-internal" + text_file: version/version + text: | + STS 4 VScode Extensions $TEXT_FILE_CONTENT released + Releases now available on Vscode Marketplace: + • + • + • + • + - aggregate: + - put: sts4-out + params: + repository: sts4 + only_tag: true + tag: version/version + tag_prefix: V_ + - put: version + params: + file: version/version +- name: bump-version-patch + serial: true + plan: + - aggregate: + - get: sts4 + - get: version + params: + bump: patch + - task: bump-versions + file: sts4/concourse/tasks/bump-versions.yml + - put: sts4 + params: + repository: out + rebase: true + - put: version + params: + file: version/version +- name: bump-version-minor + serial: true + plan: + - aggregate: + - get: sts4 + - get: version + params: + bump: minor + - task: bump-versions + file: sts4/concourse/tasks/bump-versions.yml + - put: sts4 + params: + repository: out + rebase: true + - put: version + params: + file: version/version +# - name: post-release +# serial: true +# plan: +# - aggregate: +# - get: sts4 +# - get: version +# params: +# bump: patch +# trigger: true +# passed: +# - publish-release +# - task: bump-versions +# file: sts4/concourse/tasks/bump-versions.yml +# - put: sts4-out +# params: +# repository: out +# rebase: true +# - put: version +# params: +# file: version/version +- name: build-atom-kdvolder-wip-website + serial: true + plan: + - aggregate: + - get: sts4 + - get: s3-bosh-atom-kdvolder-wip + trigger: true + passed: + - build-bosh-atom-package + - get: s3-manifest-yaml-atom-kdvolder-wip + trigger: true + passed: + - build-manifest-yaml-atom-package + - get: s3-concourse-atom-kdvolder-wip + trigger: true + passed: + - build-concourse-atom-package + - get: s3-spring-boot-atom-kdvolder-wip + trigger: true + passed: + - build-spring-boot-atom-package + - task: build-website + file: sts4/concourse/tasks/build-atom-website.yml + - put: atom-kdvolder-wip-website + params: + path: website +- name: build-vscode-kdvolder-wip-website + serial: true + plan: + - aggregate: + - get: sts4 + - get: s3-bosh-vsix-kdvolder-wip + trigger: true + passed: + - build-bosh-vsix-kdvolder-wip + - get: s3-manifest-yaml-vsix-kdvolder-wip + trigger: true + passed: + - build-manifest-yaml-vsix-kdvolder-wip + - get: s3-spring-boot-vsix-kdvolder-wip + trigger: true + passed: + - build-spring-boot-vsix-kdvolder-wip + - get: s3-concourse-vsix-kdvolder-wip + trigger: true + passed: + - build-consourse-vsix-kdvolder-wip + - task: build-website + file: sts4/concourse/tasks/build-vscode-website.yml + - put: vscode-kdvolder-wip-website + params: + path: website +- name: atom-language-servers-test + plan: + - aggregate: + - get: sts4 + trigger: true + - get: maven-cache + - task: atom-language-servers-test + file: sts4/concourse/tasks/atom-language-servers-test.yml + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! + on_success: + aggregate: + - put: s3-manifest-yaml-fatjar-kdvolder-wip + params: + file: out/manifest-yaml-language-server-*.jar + acl: public-read + - put: s3-concourse-fatjar-kdvolder-wip + params: + file: out/concourse-language-server-*.jar + acl: public-read + - put: s3-bosh-fatjar-kdvolder-wip + params: + file: out/bosh-language-server-*.jar + acl: public-read + - put: s3-spring-boot-fatjar-kdvolder-wip + params: + file: out/spring-boot-language-server-*.jar + acl: public-read +- name: build-manifest-yaml-atom-package + serial: true + plan: + - aggregate: + - get: sts4 + passed: + - atom-language-servers-test + - get: atom-cf-manifest-yaml + - get: s3-manifest-yaml-fatjar-kdvolder-wip + trigger: true + passed: + - atom-language-servers-test + - task: build-manifest-yaml-atom-package + params: + package_name: atom-cf-manifest-yaml + input_mapping: + release_repo: atom-cf-manifest-yaml + fatjar: s3-manifest-yaml-fatjar-kdvolder-wip + file: sts4/concourse/tasks/build-atom-package.yml + - aggregate: + - put: s3-manifest-yaml-atom-kdvolder-wip + params: + file: out/cf-manifest-yaml-*.tgz + acl: public-read + - put: atom-cf-manifest-yaml + params: + repository: out/repo + rebase: true + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! +- name: build-concourse-atom-package + serial: true + plan: + - aggregate: + - get: sts4 + passed: + - atom-language-servers-test + - get: atom-concourse + - get: s3-concourse-fatjar-kdvolder-wip + trigger: true + passed: + - atom-language-servers-test + - task: build-concourse-pipeline-yaml-atom-package + params: + package_name: atom-concourse + input_mapping: + release_repo: atom-concourse + fatjar: s3-concourse-fatjar-kdvolder-wip + file: sts4/concourse/tasks/build-atom-package.yml + - aggregate: + - put: s3-concourse-atom-kdvolder-wip + params: + file: out/concourse-pipeline-yaml-*.tgz + acl: public-read + - put: atom-concourse + params: + repository: out/repo + rebase: true + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! +- name: build-bosh-atom-package + serial: true + plan: + - aggregate: + - get: sts4 + passed: + - atom-language-servers-test + - get: atom-bosh + - get: s3-bosh-fatjar-kdvolder-wip + trigger: true + passed: + - atom-language-servers-test + - task: build-bosh-atom-package + params: + package_name: atom-bosh + input_mapping: + fatjar: s3-bosh-fatjar-kdvolder-wip + release_repo: atom-bosh + file: sts4/concourse/tasks/build-atom-package.yml + - aggregate: + - put: s3-bosh-atom-kdvolder-wip + params: + file: out/bosh-yaml-*.tgz + acl: public-read + - put: atom-bosh + params: + repository: out/repo + rebase: true + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! +- name: build-spring-boot-atom-package + serial: true + plan: + - aggregate: + - get: sts4 + passed: + - atom-language-servers-test + - get: atom-spring-boot + - get: s3-spring-boot-fatjar-kdvolder-wip + trigger: true + passed: + - atom-language-servers-test + - task: build-spring-boot-atom-package + params: + package_name: atom-spring-boot + input_mapping: + fatjar: s3-spring-boot-fatjar-kdvolder-wip + release_repo: atom-spring-boot + file: sts4/concourse/tasks/build-atom-package.yml + - aggregate: + - put: s3-spring-boot-atom-kdvolder-wip + params: + file: out/spring-boot-*.tgz + acl: public-read + - put: atom-spring-boot + params: + repository: out/repo + rebase: true + on_failure: + put: slack-notification + params: + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! +groups: +- name: vscode-kdvolder-wip + jobs: + - build-vscode-kdvolder-wip-website + - build-consourse-vsix-kdvolder-wip + - build-spring-boot-vsix-kdvolder-wip + - build-bosh-vsix-kdvolder-wip + - build-manifest-yaml-vsix-kdvolder-wip +- name: vscode-release + jobs: + - build-bosh-rc + - build-concourse-rc + - build-manifest-yaml-rc + - build-spring-boot-rc + - trigger-rc-build + - publish-release +# - post-release + - build-manifest-yaml-vsix-kdvolder-wip + - build-consourse-vsix-kdvolder-wip + - build-bosh-vsix-kdvolder-wip + - build-spring-boot-vsix-kdvolder-wip +- name: bump-versions + jobs: + - bump-version-patch + - bump-version-minor +- name: atom-kdvolder-wips + jobs: + - build-atom-kdvolder-wip-website + - atom-language-servers-test + - build-concourse-atom-package + - build-bosh-atom-package + - build-manifest-yaml-atom-package + - build-spring-boot-atom-package +- name: atom-rc + jobs: + - prepare-bosh-atom-rc + - prepare-concourse-atom-rc + - prepare-manifest-yaml-atom-rc + - prepare-spring-boot-atom-rc + - promote-fatjars-to-rc +- name: setup + jobs: + - build-mvn-cache + - build-docker-image + diff --git a/concourse/set-experimental-pipeline.sh b/concourse/set-experimental-pipeline.sh new file mode 100755 index 000000000..1692d9f90 --- /dev/null +++ b/concourse/set-experimental-pipeline.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +branch=`git rev-parse --abbrev-ref HEAD` + +fly -t tools set-pipeline \ + --var "branch=${branch}" \ + --load-vars-from ${HOME}/.sts4-concourse-credentials.yml \ + -p "sts4-experimental-${branch}" \ + -c experimental-pipeline.yml diff --git a/concourse/set-release-pipeline.sh b/concourse/set-release-pipeline.sh deleted file mode 100755 index dff82cb15..000000000 --- a/concourse/set-release-pipeline.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -if [ ! -d "../vscode-extensions/$extension_id" ]; then - echo "ERROR: ../vscode-extensions/$extension_id is not a directory" -fi - -branch=`git rev-parse --abbrev-ref HEAD` - -fly -t tools set-pipeline \ - --var "branch=${branch}" \ - --load-vars-from ${HOME}/.sts4-concourse-credentials.yml \ - -p "sts4-release-${branch}" \ - -c release-pipeline.yml diff --git a/concourse/tasks/npm-publish.sh b/concourse/tasks/npm-publish.sh new file mode 100755 index 000000000..9dd16c06d --- /dev/null +++ b/concourse/tasks/npm-publish.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e +workdir=`pwd` +sources=$workdir/sources_repo/${sources_dir} +cd $sources + +envsubst > ~/.npmrc << XXXXXX +//registry.npmjs.org/:_authToken=${npm_token} +XXXXXX + +npm install +npm publish diff --git a/concourse/tasks/npm-publish.yml b/concourse/tasks/npm-publish.yml new file mode 100644 index 000000000..051e75975 --- /dev/null +++ b/concourse/tasks/npm-publish.yml @@ -0,0 +1,13 @@ +platform: linux +image_resource: + type: docker-image + source: + repository: kdvolder/sts4-build-env +inputs: +- name: sources_repo +- name: tasks +run: + path: tasks/concourse/tasks/npm-publish.sh +params: + npm_token: npm-auth-token-for-publishing + sources_dir: path-within-sources-repo \ No newline at end of file diff --git a/nodejs-packages/README.md b/nodejs-packages/README.md new file mode 100644 index 000000000..4ff49c4f5 --- /dev/null +++ b/nodejs-packages/README.md @@ -0,0 +1,5 @@ +NodeJs Packages +=============== + +This directory contains nodejs packages that may be installed and +shared into both atom or vscode extensions. \ No newline at end of file diff --git a/nodejs-packages/jvm-launch-utils/.gitignore b/nodejs-packages/jvm-launch-utils/.gitignore new file mode 100644 index 000000000..a9f4ed545 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/.gitignore @@ -0,0 +1,2 @@ +lib +node_modules \ No newline at end of file diff --git a/nodejs-packages/jvm-launch-utils/README.md b/nodejs-packages/jvm-launch-utils/README.md new file mode 100644 index 000000000..4b59daa36 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/README.md @@ -0,0 +1,8 @@ +JVM Launch Utils +================ + +Collection of utilities usful for node projects that need to launch JVM +processes. + +Mostly intended for internal use by various VScode and Atom +extensions published by the Pivotal-tools team. \ No newline at end of file diff --git a/nodejs-packages/jvm-launch-utils/package.json b/nodejs-packages/jvm-launch-utils/package.json new file mode 100644 index 000000000..370238e74 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/package.json @@ -0,0 +1,33 @@ +{ + "name": "@pivotal-tools/jvm-launch-utils", + "version": "0.0.4", + "description": "Provides utilities useful for launching Java processes from node packages.", + "files": [ + "src", + "lib" + ], + "main": "lib/index.js", + "scripts": { + "prepare": "tsc -p .", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/spring-projects/sts4.git" + }, + "keywords": [ + "Java", + "Launching", + "JVM" + ], + "author": "Kris De Volder ", + "license": "MIT", + "bugs": { + "url": "https://github.com/spring-projects/sts4/issues" + }, + "homepage": "https://github.com/spring-projects/sts4/nodejs-packages/jvm-launch-utils/README.md", + "devDependencies": { + "@types/node": "^9.4.6", + "typescript": "^2.7.2" + } +} diff --git a/nodejs-packages/jvm-launch-utils/src/index.ts b/nodejs-packages/jvm-launch-utils/src/index.ts new file mode 100644 index 000000000..5166b1a25 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/src/index.ts @@ -0,0 +1,3 @@ +import {JVM, findJdk, findJvm} from './jvm-util'; + +export {JVM, findJdk, findJvm}; diff --git a/nodejs-packages/jvm-launch-utils/src/jvm-util.ts b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts new file mode 100644 index 000000000..4c4736ad2 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/src/jvm-util.ts @@ -0,0 +1,251 @@ +import * as FS from 'fs'; +import * as Path from 'path'; +import * as ChildProcess from 'child_process'; +import { basename } from 'path'; + +'use strict'; + +export interface JVM { + /** + * 8 = Java 1.8.x, 9 = Java 9.x, etc + */ + getMajorVersion() : number + + /** + * Path to the Java executable + */ + getJavaExecutable() : string + + /** + * Path to the corresponding 'java home' for the executable. + */ + getJavaHome() : string + + /** + * Detect whether this JVM is a JDK + */ + isJdk() : boolean + + /** + * Find tools.jar for this JVM. + * + * Note that if the JVM is a JRE; or a Java 9 or above JDK; + * then this will return null. + */ + getToolsJar() : string | null +} + +/** + * Find a JVM by looking in the JAVA_HOME and PATH environment variables. + * + * Optionally, a specific javaHome can be passed in. This shortcuts the + * search logic and uses that javaHome as is. + * + * The returned JVM may or may not be a JDK. Methods are provided to obtain corresponding + * toolsjar and to check whether the JVM is a JDK. + */ +export function findJvm(javaHome?: string) : Promise { + let javaExe = findJavaExe(javaHome); + if (javaExe) { + return getJavaInfo(javaExe).then(javaProps => new JVMImpl( + javaProps.get("java.home"), + javaExe, + getMajorVersion(javaProps) + )); + } + return Promise.resolve(null); +} + +/** + * Like findJvm, but additionally, if the found JVM is not a JDK tries to + * find a companion JDK that may be installed alongside it. + */ +export function findJdk(javaHome?: string) : Promise { + return findJvm(javaHome).then(jvm => { + if (!jvm.isJdk()) { + console.log("found jvm is not a JDK"); + + //Try to find a 'sibling' JDK. + //Mainly for windows where it is common to have side-by-side install of a jre and jdk, instead of a + //nested jre install inside of a jdk. + + //E.g. + //C:\ProgramFiles\Java\jdk1.8.0_161 + //C:\ProgramFiles\Java\jre1.8.0_161 + + let javaExe = jvm.getJavaExecutable(); + console.log("javaExe = ", javaExe); + // javaExe example: C:\ProgramFiles\Java\jre1.8.0_161\bin\java.exe + let jhome = jvm.getJavaHome(); + console.log("jhome = ", jhome); + let basename : string = Path.basename(jhome); + console.log("basename = ", basename); + let altBasename : string = basename.replace("jre", "jdk"); + console.log("altBasename = ", altBasename); + if (altBasename!==basename) { + let altHome = Path.join(Path.dirname(jhome), altBasename); + console.log("altHome = ", altHome); + if (FS.existsSync(altHome)) { + let altExe = Path.resolve(altHome, "bin", correctBinname("java")); + console.log("altExe = ", altExe); + return new JVMImpl(altHome, altExe, jvm.getMajorVersion()); + } + } + } + return jvm; + }); +} + +/** + * Find a 'java' exe by looking in the JAVA_HOME and PATH environment variables. + *

+ * Optionally, a specific javaHome can be passed in. This shortcuts the + * search logic and uses that javaHome as is, not looking anywhere else. + */ +function findJavaExe(javaHome?: string) : string | null { + //Try java home first + if (!javaHome) { + javaHome = process.env["JAVA_HOME"]; + } + if (javaHome) { + //Resolve symlinks + javaHome = FS.realpathSync(javaHome); + } + let binName = correctBinname("java"); + if (javaHome) { + let javaExe = Path.resolve(javaHome, "bin", binName); + if (FS.existsSync(javaExe)) { + return javaExe; + } + } + + for (var searchPath of process.env['PATH'].split(Path.delimiter)) { + let javaExe = Path.resolve(searchPath, binName); + if (FS.existsSync(javaExe)) { + //Resolve symlinks + return FS.realpathSync(javaExe); + } + } + return null; +} + +type Getter = () => T; + +function memoize(getter : Getter) : Getter { + let computed : boolean = false; + let value : T | null = null; + return () => { + if (!computed) { + value = getter(); + computed = true; + } + return value; + }; +} + +const TOOLS_JAR_PATHS : string[][] = [ + ["lib", "tools.jar"], + ["..", "lib", "tools.jar"] +]; + +class JVMImpl implements JVM { + javaHome : string + javaExe : string + version : number + toolsJar: () => string | null; + constructor(javaHome : string, javaExe : string, version : number) { + this.javaHome = javaHome; + this.javaExe = javaExe; + this.version = version; + this.toolsJar = memoize(() => this.findToolsJar()); + } + + getJavaHome() : string { + return this.javaHome; + } + + findToolsJar() : string | null { + if (this.version>=9) { + return null; + } + let javaHome = this.getJavaHome(); + for (var tjp of TOOLS_JAR_PATHS) { + let toolsJar = Path.resolve(javaHome, ...tjp); + if (FS.existsSync(toolsJar)) { + return toolsJar; + } + } + //Not found. + return null; + } + + getMajorVersion() { + return this.version; + } + getJavaExecutable(): string { + return this.javaExe; + } + isJdk(): boolean { + //Consider memoizing? + if (this.version<9) { + return this.getToolsJar()!=null; + } else { + return FS.existsSync(Path.resolve(this.getJavaHome(), "jmods", "jdk.management.jmod")); + } + } + getToolsJar(): string { + return this.toolsJar(); + } +} + +function getJavaInfo(javaExe : string) : Promise> { + //console.log("Fetching java properties for "+javaExe); + return new Promise((resolve, reject) => { + ChildProcess.execFile(javaExe, ['-XshowSettings:properties'], {}, (error, stdout, stderr) => { + let lines = stderr.split(/\r?\n/); + let propNames = [ 'java.version', 'java.home' ]; + let props = new Map(); + for (var l of lines) { + //console.log("Line: "+l); + for (var p of propNames) { + let offset = l.indexOf(p); + if (offset>=0) { + //Make sure it looks like a proper 'assignment' to the property and not an + // accidental match. + //console.log("Propname found: "+p); + let assign = " " +p + " = "; + offset = l.indexOf(assign); + if (offset>=0) { + //console.log("Assignment found: "+p); + offset = offset + assign.length; + let value = l.substring(offset); + //console.log("value = "+value); + props.set(p, value); + if (props.size >= propNames.length) { + //We found everything we care about, so we can stop now. + //console.log("result = ", props); + return resolve(props); + } + } + } + } + } + //Not found everything we expected. + return reject("Unexpected output from `java -XshowSettings:properties`. Didn't find all expected properties: "+propNames); + }); + }); +} + +function getMajorVersion(javaProperties : Map) : number { + let versionString = javaProperties.get('java.version'); + let pieces = versionString.split("."); + let major = parseInt(pieces[0]); + return major==1 ? parseInt(pieces[1]) : major; +} + +function correctBinname(binname: string) { + if (process.platform === 'win32') + return binname + '.exe'; + else + return binname; +} \ No newline at end of file diff --git a/nodejs-packages/jvm-launch-utils/tsconfig.json b/nodejs-packages/jvm-launch-utils/tsconfig.json new file mode 100644 index 000000000..a9c928a12 --- /dev/null +++ b/nodejs-packages/jvm-launch-utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "outDir": "lib", + "sourceMap": true + } +} \ No newline at end of file