diff --git a/concourse/docker/Dockerfile b/concourse/docker/Dockerfile index 2e0b018f4..7d0edbb9b 100644 --- a/concourse/docker/Dockerfile +++ b/concourse/docker/Dockerfile @@ -13,4 +13,6 @@ RUN apt-get update && apt-get install -y \ RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get install -y nodejs +RUN npm install -g vsce + CMD /bin/bash diff --git a/concourse/pipeline.yml b/concourse/pipeline.yml index 4e224ee37..1ed6f059a 100644 --- a/concourse/pipeline.yml +++ b/concourse/pipeline.yml @@ -26,31 +26,31 @@ resources: uri: git@github.com:spring-projects/sts4.git branch: {{branch}} private_key: {{rsa_id}} -- name: s3-boot-properties-vsix +- name: s3-boot-properties-vsix-snapshot type: s3 source: bucket: {{s3_bucket}} access_key_id: {{s3_accesskey}} secret_access_key: {{s3_secretkey}} region_name: {{s3_region}} - regexp: sts4/vscode-extensions/vscode-boot-properties-(.*).vsix -- name: s3-concourse-vsix + regexp: sts4/vscode-extensions/snapshots/vscode-boot-properties-(.*).vsix +- name: s3-concourse-vsix-snapshot type: s3 source: bucket: {{s3_bucket}} access_key_id: {{s3_accesskey}} secret_access_key: {{s3_secretkey}} region_name: {{s3_region}} - regexp: sts4/vscode-extensions/vscode-concourse-(.*).vsix -- name: s3-manifest-yaml-vsix + regexp: sts4/vscode-extensions/snapshots/vscode-concourse-(.*).vsix +- name: s3-manifest-yaml-vsix-snapshot type: s3 source: bucket: {{s3_bucket}} access_key_id: {{s3_accesskey}} secret_access_key: {{s3_secretkey}} region_name: {{s3_region}} - regexp: sts4/vscode-extensions/vscode-manifest-yaml-(.*).vsix -- name: website + regexp: sts4/vscode-extensions/snapshots/vscode-manifest-yaml-(.*).vsix +- name: snapshot-website type: s3-multi source: bucket: {{s3_prod_bucket}} @@ -83,7 +83,7 @@ jobs: build: docker-git/concourse/docker get_params: skip_download: true -- name: build-vsix +- name: build-vsix-snapshots plan: - get: sts4 trigger: true @@ -91,15 +91,15 @@ jobs: file: sts4/concourse/tasks/build-vscode-extensions.yml on_success: aggregate: - - put: s3-manifest-yaml-vsix + - put: s3-manifest-yaml-vsix-snapshot params: file: vsix-files/vscode-manifest-yaml-*.vsix acl: public-read - - put: s3-boot-properties-vsix + - put: s3-boot-properties-vsix-snapshot params: file: vsix-files/vscode-boot-properties-*.vsix acl: public-read - - put: s3-concourse-vsix + - put: s3-concourse-vsix-snapshot params: file: vsix-files/vscode-concourse-*.vsix acl: public-read @@ -109,35 +109,56 @@ jobs: channel: "@kdvolder" text: | Concourse ${BUILD_PIPELINE_NAME}/${BUILD_JOB_NAME}/${BUILD_NAME} has failed! -- name: build-website +- name: build-snapshot-website plan: - aggregate: - get: sts4 passed: - - build-vsix - - get: s3-manifest-yaml-vsix + - build-vsix-snapshots + - get: s3-manifest-yaml-vsix-snapshot passed: - - build-vsix + - build-vsix-snapshots trigger: true - - get: s3-boot-properties-vsix + - get: s3-boot-properties-vsix-snapshot passed: - - build-vsix + - build-vsix-snapshots trigger: true - - get: s3-concourse-vsix + - get: s3-concourse-vsix-snapshot passed: - - build-vsix + - build-vsix-snapshots trigger: true - task: build-website file: sts4/concourse/tasks/build-website.yml - - put: website + - put: snapshot-website params: path: website +# - name: publish-vscode-manifest-yaml +# plan: +# - aggregate: +# - get: sts4 +# # passed: +# # - build-vsix +# - get: s3-manifest-yaml-vsix-snapshot +# passed: +# - build-vsix-snapshots +# - task: vsce-publish-manifest-yaml +# file: sts4/concourse/tasks/vsce-publish.yml +# input_mapping: +# vsix-resource: s3-manifest-yaml-vsix-snapshot +# params: +# extension_id: vscode-manifest-yaml +# vsce_publisher: {{vsce_publisher}} +# vsce_token: {{vsce_token}} +# - put: sts4 +# params: +# repository: sts4-out + #################################### -groups: -- name: main - jobs: - - build-vsix - - build-website -- name: docker - jobs: - - build-docker-image \ No newline at end of file +# groups: +# - name: main +# jobs: +# - build-vsix +# - build-snapshot-website +# - name: docker +# jobs: +# - build-docker-image diff --git a/concourse/release-pipeline.yml b/concourse/release-pipeline.yml new file mode 100644 index 000000000..285983c20 --- /dev/null +++ b/concourse/release-pipeline.yml @@ -0,0 +1,99 @@ +resource_types: +- name: slack-notification + type: docker-image + source: + repository: cfcommunity/slack-notification-resource + tag: latest +################################################### +resources: +- name: sts4 + type: git + source: + uri: git@github.com:spring-projects/sts4.git + branch: {{branch}} + private_key: {{rsa_id}} + tag_filter: vscode-manifest-yaml-*-RC* +- name: s3-vscode-manifest-yaml-vsix + type: s3 + source: + bucket: {{s3_bucket}} + access_key_id: {{s3_accesskey}} + secret_access_key: {{s3_secretkey}} + region_name: {{s3_region}} + regexp: sts4/vscode-extensions/releases/vscode-manifest-yaml-(.*).vsix +- name: slack-notification + type: slack-notification + source: + url: https://hooks.slack.com/services/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 +###################################################### +jobs: +- name: build-vscode-manifest-yaml-release + plan: + - get: sts4 + trigger: true + - task: build-vsix + file: sts4/concourse/tasks/build-vsix.yml + params: + extension_id: vscode-manifest-yaml + dist_type: release + on_failure: + put: slack-notification + params: + channel: "@kdvolder" + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_NAME}/${BUILD_JOB_NAME} has failed! + - put: s3-vscode-manifest-yaml-vsix + params: + file: out/*.vsix + acl: public-read +- name: publish-vscode-manifest-yaml-release + plan: + - do: + - get: sts4 + passed: + - build-vscode-manifest-yaml-release + - get: s3-vscode-manifest-yaml-vsix + passed: + - build-vscode-manifest-yaml-release + - task: publish-vscode-manifest-yaml-release + file: sts4/concourse/tasks/vsce-publish.yml + input_mapping: + vsix-resource: s3-vscode-manifest-yaml-vsix + params: + vsce_publisher: {{vsce_publisher}} + vsce_token: {{vsce_token}} + extension_id: vscode-manifest-yaml + - put: sts4 + params: + repository: sts4-out + only_tag: true + on_failure: + put: slack-notification + params: + channel: "@kdvolder" + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_NAME}/${BUILD_JOB_NAME} has failed! +- name: bump-vscode-manifest-yaml-version + serial: true + plan: + - do: + - get: sts4 + passed: + - publish-vscode-manifest-yaml-release + - task: bump-vscode-manifest-yaml-version + file: sts4/concourse/tasks/bump-version.yml + params: + extension_id: vscode-manifest-yaml + - put: sts4 + timeout: 5m + params: + repository: sts4-out + rebase: true + on_failure: + put: slack-notification + params: + channel: "@kdvolder" + text: | + Concourse ${BUILD_PIPELINE_NAME}/${BUILD_NAME}/${BUILD_JOB_NAME} has failed! + + diff --git a/concourse/set-release-pipeline.sh b/concourse/set-release-pipeline.sh new file mode 100755 index 000000000..dff82cb15 --- /dev/null +++ b/concourse/set-release-pipeline.sh @@ -0,0 +1,13 @@ +#!/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/build-vsix.sh b/concourse/tasks/build-vsix.sh new file mode 100755 index 000000000..8ac4cfc05 --- /dev/null +++ b/concourse/tasks/build-vsix.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -e +workdir=`pwd` +sources=$workdir/sts4/vscode-extensions/$extension_id + +cd ${sources}/../commons-vscode +npm install + +cd "$sources" + +npm install ../commons-vscode + +timestamp=`date -u +%Y%m%d%H%M` + +if [ "$dist_type" != release ]; then + # for snapshot build, work the timestamp into package.json version qualifier + base_version=`jq -r .version package.json` + qualified_version=${base_version}-${timestamp} + npm version ${qualified_version} +fi + +npm install +npm run vsce-package + +# for release build we don't don't add version-qualifier to package.json +# So we must instead rename the file ourself to add a qualifier +if [ "$dist_type" == release ]; then + vsix_file=`ls *.vsix` + release_name=`git describe --tags` + echo "release_name=$release_name" + if [ -z "$release_name" ]; then + echo "Release Candidates must be tagged" >&2 + exit 1 + else + mv $vsix_file ${release_name}.vsix + fi +fi + +cp *.vsix $workdir/out diff --git a/concourse/tasks/build-vsix.yml b/concourse/tasks/build-vsix.yml new file mode 100644 index 000000000..56bbd2060 --- /dev/null +++ b/concourse/tasks/build-vsix.yml @@ -0,0 +1,11 @@ +inputs: +- name: sts4 +outputs: +- name: out +platform: linux +image_resource: + type: docker-image + source: + repository: kdvolder/sts4-build-env +run: + path: sts4/concourse/tasks/build-vsix.sh diff --git a/concourse/tasks/build-website.sh b/concourse/tasks/build-website.sh index deb8721ea..e9d8d1b9d 100755 --- a/concourse/tasks/build-website.sh +++ b/concourse/tasks/build-website.sh @@ -3,33 +3,34 @@ set -e workdir=`pwd` sources=$workdir/sts4/eclipse-distribution/common/html target=$workdir/website +# consider passing this in from pipeline as a env var if we are also going to use it for 'release' builds +dist_type=snapshot #cp -r "${sources}/stylesheet.css" "$target" #cp -r ${sources}/*.js "$target" #cp s3-manifest-yaml-vsix/*.vsix "$target" #cp s3-boot-properties-vsix/*.vsix "$target" -export vscode_manifest_yaml=$(basename s3-manifest-yaml-vsix/*.vsix) +export vscode_manifest_yaml=$(basename s3-manifest-yaml-vsix-${dist_type}/*.vsix) echo "vscode_manifest_yaml=$vscode_manifest_yaml" -export vscode_boot_properties=$(basename s3-boot-properties-vsix/*.vsix) +export vscode_boot_properties=$(basename s3-boot-properties-vsix-${dist_type}/*.vsix) echo "vscode_boot_properties=$vscode_boot_properties" -export vscode_concourse=$(basename s3-concourse-vsix/*.vsix) +export vscode_concourse=$(basename s3-concourse-vsix-${dist_type}/*.vsix) echo "vscode_concourse=$vscode_concourse" envsubst > "$target/vscode-extensions-snippet.html" << XXXXXX XXXXXX - export vscode_snippet=`cat "$target/vscode-extensions-snippet.html"` envsubst > "$target/vscode-extensions.html" << XXXXXX diff --git a/concourse/tasks/build-website.yml b/concourse/tasks/build-website.yml index f0da95ef1..e10e27b36 100644 --- a/concourse/tasks/build-website.yml +++ b/concourse/tasks/build-website.yml @@ -1,8 +1,8 @@ inputs: - name: sts4 -- name: s3-manifest-yaml-vsix -- name: s3-boot-properties-vsix -- name: s3-concourse-vsix +- name: s3-manifest-yaml-vsix-snapshot +- name: s3-boot-properties-vsix-snapshot +- name: s3-concourse-vsix-snapshot outputs: - name: website platform: linux diff --git a/concourse/tasks/bump-version.sh b/concourse/tasks/bump-version.sh new file mode 100755 index 000000000..3b1bc3ced --- /dev/null +++ b/concourse/tasks/bump-version.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e +workdir=`pwd` + +echo "extension_id=$extension_id" + +sources=$workdir/sts4/vscode-extensions/$extension_id +release_version=`jq -r .version ${sources}/package.json` + +echo "release_version=$release_version" + +cd $sources + +echo "Bumping version of ${extension_id}" +echo "release_version=${release_version}" +npm version patch + +new_version=`jq -r .version ${sources}/package.json` +echo "new_version=${new_version}" + +git commit \ + -m "Bump version of ${extension_id} to ${new_version}" \ + --author 'Kris De Volder ' + +git clone $workdir/sts4 $workdir/sts4-out diff --git a/concourse/tasks/bump-version.yml b/concourse/tasks/bump-version.yml new file mode 100644 index 000000000..1bfc51741 --- /dev/null +++ b/concourse/tasks/bump-version.yml @@ -0,0 +1,11 @@ +inputs: +- name: sts4 +outputs: +- name: sts4-out +platform: linux +image_resource: + type: docker-image + source: + repository: kdvolder/sts4-build-env +run: + path: sts4/concourse/tasks/bump-version.sh diff --git a/concourse/tasks/vsce-publish.sh b/concourse/tasks/vsce-publish.sh new file mode 100755 index 000000000..bfe67ccb4 --- /dev/null +++ b/concourse/tasks/vsce-publish.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -e +workdir=`pwd` + +vsix_file=`ls ${workdir}/vsix-resource/*.vsix` + +echo "vsix_file=$vsix_file" +echo "extension_id=$extension_id" + +sources=$workdir/sts4/vscode-extensions/$extension_id + +release_version=`jq -r .version ${sources}/package.json` + +echo "release_version=$release_version" + +vsce publish -p $vsce_token --packagePath "$vsix_file" + +echo "****************************************************************" +echo "****************************************************************" +echo "****************************************************************" +echo "*** $extension_id $version published to vscode marketplace *****" +echo "****************************************************************" +echo "****************************************************************" +echo "****************************************************************" + +cd $sources + +echo "Tagging release" +git tag ${extension_id}-${release_version}-RELEASE +git clone $workdir/sts4 $workdir/sts4-out diff --git a/concourse/tasks/vsce-publish.yml b/concourse/tasks/vsce-publish.yml new file mode 100644 index 000000000..95700c115 --- /dev/null +++ b/concourse/tasks/vsce-publish.yml @@ -0,0 +1,13 @@ +inputs: +- name: sts4 +- name: vsix-resource +outputs: +- name: sts4-out +- name: website +platform: linux +image_resource: + type: docker-image + source: + repository: kdvolder/sts4-build-env +run: + path: sts4/concourse/tasks/vsce-publish.sh diff --git a/vscode-extensions/vscode-manifest-yaml/trigger-rc-build.sh b/vscode-extensions/vscode-manifest-yaml/trigger-rc-build.sh new file mode 100755 index 000000000..040991380 --- /dev/null +++ b/vscode-extensions/vscode-manifest-yaml/trigger-rc-build.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +if [ -z "$1" ]; then + echo "Usage: ./trigger-rc-build.sh ${RC_TAG}" + echo "Where RC_TAG is one of RC1, RC2, etc." +fi + +rc_tag=$1 +workdir=`pwd` +extension_id=$(basename "$workdir") +version=`jq -r .version package.json` +tag=${extension_id}-${version}-${rc_tag} + +echo "Tagging head as tag=$tag" +git tag $tag +echo "Pushing tag..." +git push origin $tag