@docupace/pipeline 1.0.8-6.xray → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/eslint.config.js +2 -25
  2. package/next/execute.sh +2 -8
  3. package/package.json +8 -24
  4. package/src/changeset/cli.js +195 -151
  5. package/src/changeset/validate.js +1 -45
  6. package/src/jenkins/setParams.groovy +2 -1
  7. package/src/next/cli.js +15 -111
  8. package/src/next/config.js +7 -72
  9. package/src/next/copy.js +1 -32
  10. package/src/next/deploy.js +69 -520
  11. package/src/next/jenkins.js +2 -3
  12. package/src/next/pipline.js +1 -0
  13. package/src/next/publish.js +30 -53
  14. package/README.md +0 -136
  15. package/bin/azuread_update_callbacks_for_app.sh +0 -58
  16. package/bin/xray.sh +0 -273
  17. package/bitbucket-pipelines.yml +0 -142
  18. package/jest.config.js +0 -15
  19. package/src/auth0/alias.js +0 -79
  20. package/src/auth0/alias.test.js +0 -172
  21. package/src/auth0/cli.js +0 -82
  22. package/src/auth0/configure.js +0 -902
  23. package/src/auth0/configure.test.js +0 -167
  24. package/src/auth0/export.js +0 -48
  25. package/src/auth0/export.test.js +0 -103
  26. package/src/auth0/metadata.js +0 -141
  27. package/src/auth0/metadata.test.js +0 -186
  28. package/src/auth0/vault.js +0 -60
  29. package/src/auth0/vault.test.js +0 -134
  30. package/src/changeset/changelog-wiki.js +0 -328
  31. package/src/changeset/changeset-config.js +0 -34
  32. package/src/changeset/create.js +0 -215
  33. package/src/changeset/package-util.js +0 -87
  34. package/src/changeset/util.js +0 -43
  35. package/src/changeset/version.js +0 -102
  36. package/src/jfrog/xray-scan.yaml +0 -29
  37. package/src/lib/merge-driver.js +0 -204
  38. package/src/merge/cli-merge-all.js +0 -521
  39. package/src/merge/cli-merge.js +0 -572
  40. package/src/merge/cli-resolve.js +0 -399
  41. package/src/merge/cli.js +0 -38
  42. package/src/merge/common.js +0 -7
  43. package/src/merge/merge-changelog.js +0 -87
  44. package/src/merge/merge-package.js +0 -106
  45. package/src/merge/merge-types.js +0 -82
  46. package/src/merge/pr.js +0 -231
  47. package/src/micro/cli.js +0 -51
  48. package/src/micro/ms-deploy.js +0 -451
  49. package/src/micro/ms-publish.js +0 -186
  50. package/src/next/alias.js +0 -53
  51. package/src/next/apache.js +0 -81
  52. package/src/next/connect.js +0 -226
  53. package/src/next/git-to-semver.js +0 -79
  54. package/src/next/haproxy.js +0 -76
  55. package/src/next/jira.js +0 -84
  56. package/src/next/logger.js +0 -17
  57. package/src/next/test.js +0 -5
  58. package/src/next/util.js +0 -95
  59. package/src/next/vault.js +0 -45
  60. package/terraform/apply.sh +0 -41
  61. package/terraform/import.sh +0 -111
  62. package/terraform/init.sh +0 -78
  63. package/terraform/plan.sh +0 -95
  64. package/terraform/validate.sh +0 -17
@@ -1,142 +0,0 @@
1
- # bitbucket-pipelines.yml
2
- export: true
3
-
4
- clone:
5
- depth: 2
6
-
7
-
8
- definitions:
9
- caches:
10
- pnpm: ~/.pnpm-store
11
-
12
- scripts:
13
- - &detect-and-prepare |
14
- echo "Detecting project type..."
15
- PROJECT_TYPE=""
16
-
17
- if [ -f "package.json" ]; then
18
- if [ -f "pnpm-lock.yaml" ]; then
19
- PROJECT_TYPE="--pnpm"
20
- elif [ -f "package-lock.json" ]; then
21
- PROJECT_TYPE="--npm"
22
- elif [ -f "yarn.lock" ]; then
23
- PROJECT_TYPE="--yarn"
24
- else
25
- PROJECT_TYPE="--npm"
26
- fi
27
- elif [ -f "build.gradle" ] || [ -f "build.gradle.kts" ] || [ -f "settings.gradle" ]; then
28
- PROJECT_TYPE="--gradle"
29
- echo "Detected: Gradle project"
30
- if [ -f "./gradlew" ]; then
31
- chmod +x ./gradlew
32
- echo "Fixed gradlew permissions"
33
- fi
34
- else
35
- echo "Error: Could not detect project type"
36
- exit 1
37
- fi
38
- export PROJECT_TYPE
39
-
40
- pipelines:
41
- xray-scan:
42
- - step:
43
- name: JFrog Xray Security Scan
44
- runs-on:
45
- - self.hosted
46
- - linux.shell
47
- - onprem
48
- caches:
49
- - node
50
- - pnpm
51
- - gradle
52
- script:
53
- # Setup JFrog CLI
54
- - curl -fL https://install-cli.jfrog.io | sh
55
- - jf --version
56
- - jf config remove scan1 || true
57
- - jf config add scan1 --url=$JFROG_XRAY_URL --user=$JFROG_XRAY_USER --access-token=$JFROG_XRAY_PASSWORD
58
- - jf c show
59
-
60
- # Detect and prepare project
61
- - *detect-and-prepare
62
-
63
- # Create Slack notification script
64
- - echo 'IyEvdXNyL2Jpbi9lbnYgYmFzaApHSVRfUEFUSD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKQpCQVNFTkFNRT0kKGJhc2VuYW1lICRHSVRfUEFUSCkKQkFTRU5BTUU9IiR7QklUQlVDS0VUX1JFUE9fU0xVR30iClNMQUNLX0FQST0iaHR0cHM6Ly9zbGFjay5jb20vYXBpL2NoYXQucG9zdE1lc3NhZ2UiCklOUFVUX1RBQkxFPSJ4cmF5LnR4dCIKSU5QVVRfSlNPTj0ieHJheS5qc29uIgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAx77iP4oOjIFBhcnNlIHRhYmxlIHRvIEpTT04gKGhhbmRsZSBtdWx0aS1saW5lIHdyYXBwaW5nKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYXdrICcKQkVHSU4gewogIHByaW50ICJbIgogIGZpcnN0ID0gMQogIGluX3Z1bG4gPSAwCn0KCiMgU2tpcCBzZXBhcmF0b3IgYW5kIGhlYWRlciBsaW5lcwovXlvilIzilJzilJRdLyB7IG5leHQgfQovQ1ZFLipTRVZFUklUWS4qRElSRUNULipERVBFTkRFTkNZLyB7IG5leHQgfQoKIyBQcm9jZXNzIGRhdGEgcm93cwovXuKUgi8gewogIGdzdWIoL17ilIIgLywgIiIpCiAgZ3N1YigvICrilIIgKiQvLCAiIikKICAKICBuID0gc3BsaXQoJDAsIGZpZWxkcywgLyAq4pSCICovKQogIAogICMgTmV3IHZ1bG5lcmFiaWxpdHkgKGhhcyBDVkUgaW4gZmlyc3QgY29sdW1uKQogIGlmIChuID49IDggJiYgZmllbGRzWzFdIH4gL15DVkUtLykgewogICAgIyBPdXRwdXQgcHJldmlvdXMgZW50cnkgaWYgZXhpc3RzCiAgICBpZiAoaW5fdnVsbikgewogICAgICAjIFBhcnNlIGZpeGVkIHZlcnNpb25zCiAgICAgIGZpeGVkX3ZlcnNpb25zID0gIltdIgogICAgICBpZiAoc2F2ZWRfZml4ZWRfcmF3ICE9ICIiKSB7CiAgICAgICAgZ3N1YigvXF0gKlxbLywgIl1bIiwgc2F2ZWRfZml4ZWRfcmF3KQogICAgICAgIGdzdWIoL1xbLywgIlwiIiwgc2F2ZWRfZml4ZWRfcmF3KQogICAgICAgIGdzdWIoL1xdLywgIlwiIiwgc2F2ZWRfZml4ZWRfcmF3KQogICAgICAgIGdzdWIoLyIgICoiLywgIlwiLCBcIiIsIHNhdmVkX2ZpeGVkX3JhdykKICAgICAgICBnc3ViKC8iIi8sICJcIiwgXCIiLCBzYXZlZF9maXhlZF9yYXcpCiAgICAgICAgZml4ZWRfdmVyc2lvbnMgPSAiWyIgc2F2ZWRfZml4ZWRfcmF3ICJdIgogICAgICB9CiAgICAgIAogICAgICBjb21wb25lbnRfa2V5ID0gc2F2ZWRfdHlwZSAiOi8vIiBzYXZlZF9hZmZlY3RlZAogICAgICBkaXJlY3RfY29tcG9uZW50ID0gc2F2ZWRfdHlwZSAiOi8vIiBzYXZlZF9kaXJlY3QKICAgICAgCiAgICAgIHByaW50ICIgICAgeyIKICAgICAgcHJpbnQgIiAgICAgIFwidnVsbmVyYWJpbGl0aWVzXCI6IFt7IgogICAgICBwcmludCAiICAgICAgICBcInNldmVyaXR5XCI6IFwiIiBzYXZlZF9zZXZlcml0eSAiXCIsIgogICAgICBwcmludCAiICAgICAgICBcImN2ZXNcIjogW3tcImN2ZVwiOiBcIiIgc2F2ZWRfY3ZlICJcIn1dLCIKICAgICAgcHJpbnQgIiAgICAgICAgXCJjb21wb25lbnRzXCI6IHsiCiAgICAgIHByaW50ICIgICAgICAgICAgXCIiIGNvbXBvbmVudF9rZXkgIlwiOiB7IgogICAgICBwcmludCAiICAgICAgICAgICAgXCJpbXBhY3RfcGF0aHNcIjogW1tudWxsLCB7XCJjb21wb25lbnRfaWRcIjogXCIiIGRpcmVjdF9jb21wb25lbnQgIlwifV1dLCIKICAgICAgcHJpbnQgIiAgICAgICAgICAgIFwiYWZmZWN0ZWRfdmVyc2lvblwiOiBcIiIgc2F2ZWRfYWZmZWN0ZWRfdmVyICJcIiwiCiAgICAgIHByaW50ICIgICAgICAgICAgICBcImZpeGVkX3ZlcnNpb25zXCI6ICIgZml4ZWRfdmVyc2lvbnMKICAgICAgcHJpbnQgIiAgICAgICAgICB9IgogICAgICBwcmludCAiICAgICAgICB9IgogICAgICBwcmludCAiICAgICAgfV0iCiAgICAgIHByaW50ICIgICAgfSwiCiAgICB9CiAgICAKICAgIGZpcnN0ID0gMAogICAgaW5fdnVsbiA9IDEKICAgIAogICAgIyBTdG9yZSBuZXcgdnVsbmVyYWJpbGl0eQogICAgc2F2ZWRfY3ZlID0gZmllbGRzWzFdCiAgICBzYXZlZF9zZXZlcml0eSA9IGZpZWxkc1syXQogICAgc2F2ZWRfZGlyZWN0ID0gZmllbGRzWzNdCiAgICBzYXZlZF9kaXJlY3RfdmVyID0gZmllbGRzWzRdCiAgICBzYXZlZF9hZmZlY3RlZCA9IGZpZWxkc1s1XQogICAgc2F2ZWRfYWZmZWN0ZWRfdmVyID0gZmllbGRzWzZdCiAgICBzYXZlZF9maXhlZF9yYXcgPSBmaWVsZHNbN10KICAgIHNhdmVkX3R5cGUgPSB0b2xvd2VyKGZpZWxkc1s4XSkKICB9CiAgIyBDb250aW51YXRpb24gbGluZSAtIGFwcGVuZCB0byBwcmV2aW91cyBmaWVsZAogIGVsc2UgaWYgKGluX3Z1bG4gJiYgZmllbGRzWzFdID09ICIiICYmIGZpZWxkc1syXSA9PSAiIikgewogICAgaWYgKGZpZWxkc1szXSAhPSAiIikgewogICAgICBzYXZlZF9kaXJlY3QgPSBzYXZlZF9kaXJlY3QgZmllbGRzWzNdCiAgICB9CiAgICBpZiAoZmllbGRzWzVdICE9ICIiKSB7CiAgICAgIHNhdmVkX2FmZmVjdGVkID0gc2F2ZWRfYWZmZWN0ZWQgZmllbGRzWzVdCiAgICB9CiAgICBpZiAoZmllbGRzWzddICE9ICIiKSB7CiAgICAgIHNhdmVkX2ZpeGVkX3JhdyA9IHNhdmVkX2ZpeGVkX3JhdyAiICIgZmllbGRzWzddCiAgICB9CiAgfQp9CgpFTkQgewogIGlmIChpbl92dWxuKSB7CiAgICAjIE91dHB1dCB0aGUgbGFzdCBlbnRyeQogICAgZml4ZWRfdmVyc2lvbnMgPSAiW10iCiAgICBpZiAoc2F2ZWRfZml4ZWRfcmF3ICE9ICIiKSB7CiAgICAgIGdzdWIoL1xdICpcWy8sICJdWyIsIHNhdmVkX2ZpeGVkX3JhdykKICAgICAgZ3N1YigvXFsvLCAiXCIiLCBzYXZlZF9maXhlZF9yYXcpCiAgICAgIGdzdWIoL1xdLywgIlwiIiwgc2F2ZWRfZml4ZWRfcmF3KQogICAgICBnc3ViKC8iICAqIi8sICJcIiwgXCIiLCBzYXZlZF9maXhlZF9yYXcpCiAgICAgIGdzdWIoLyIiLywgIlwiLCBcIiIsIHNhdmVkX2ZpeGVkX3JhdykKICAgICAgZml4ZWRfdmVyc2lvbnMgPSAiWyIgc2F2ZWRfZml4ZWRfcmF3ICJdIgogICAgfQogICAgCiAgICBjb21wb25lbnRfa2V5ID0gc2F2ZWRfdHlwZSAiOi8vIiBzYXZlZF9hZmZlY3RlZAogICAgZGlyZWN0X2NvbXBvbmVudCA9IHNhdmVkX3R5cGUgIjovLyIgc2F2ZWRfZGlyZWN0CiAgICAKICAgIHByaW50ICIgICAgeyIKICAgIHByaW50ICIgICAgICBcInZ1bG5lcmFiaWxpdGllc1wiOiBbeyIKICAgIHByaW50ICIgICAgICAgIFwic2V2ZXJpdHlcIjogXCIiIHNhdmVkX3NldmVyaXR5ICJcIiwiCiAgICBwcmludCAiICAgICAgICBcImN2ZXNcIjogW3tcImN2ZVwiOiBcIiIgc2F2ZWRfY3ZlICJcIn1dLCIKICAgIHByaW50ICIgICAgICAgIFwiY29tcG9uZW50c1wiOiB7IgogICAgcHJpbnQgIiAgICAgICAgICBcIiIgY29tcG9uZW50X2tleSAiXCI6IHsiCiAgICBwcmludCAiICAgICAgICAgICAgXCJpbXBhY3RfcGF0aHNcIjogW1tudWxsLCB7XCJjb21wb25lbnRfaWRcIjogXCIiIGRpcmVjdF9jb21wb25lbnQgIlwifV1dLCIKICAgIHByaW50ICIgICAgICAgICAgICBcImFmZmVjdGVkX3ZlcnNpb25cIjogXCIiIHNhdmVkX2FmZmVjdGVkX3ZlciAiXCIsIgogICAgcHJpbnQgIiAgICAgICAgICAgIFwiZml4ZWRfdmVyc2lvbnNcIjogIiBmaXhlZF92ZXJzaW9ucwogICAgcHJpbnQgIiAgICAgICAgICB9IgogICAgcHJpbnQgIiAgICAgICAgfSIKICAgIHByaW50ICIgICAgICB9XSIKICAgIHByaW50ICIgICAgfSIKICB9CiAgcHJpbnQgIl0iCn0KJyAiJElOUFVUX1RBQkxFIiA+ICIkSU5QVVRfSlNPTiIKCiMgVmFsaWRhdGUgSlNPTgppZiAhIGpxIGVtcHR5ICIkSU5QVVRfSlNPTiIgMj4vZGV2L251bGw7IHRoZW4KICBlY2hvICLinYwgRmFpbGVkIHRvIGNyZWF0ZSB2YWxpZCBKU09OIgogIGNhdCAiJElOUFVUX0pTT04iCiAgZXhpdCAxCmZpCgplY2hvICLinIUgSlNPTiBjcmVhdGVkOiAkSU5QVVRfSlNPTiIKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgMu+4j+KDoyBTZXZlcml0eSBjb3VudHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcmVhZCBDUklUSUNBTCBISUdIIE1FRElVTSBMT1cgPDw8ICQoCmpxIC1yICcKLltdCnwgc2VsZWN0KC52dWxuZXJhYmlsaXRpZXMgIT0gbnVsbCkKfCAudnVsbmVyYWJpbGl0aWVzW10KfCAuc2V2ZXJpdHkKJyAiJElOUFVUX0pTT04iIHwgYXdrICcKeyBjWyQxXSsrIH0KRU5EIHsKICBwcmludCBjWyJDcml0aWNhbCJdKzAsIGNbIkhpZ2giXSswLCBjWyJNZWRpdW0iXSswLCBjWyJMb3ciXSswCn0nCikKCmVjaG8gIvCfk4ogQ291bnRzOiBDcml0aWNhbD0kQ1JJVElDQUwsIEhpZ2g9JEhJR0gsIE1lZGl1bT0kTUVESVVNLCBMb3c9JExPVyIKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgM++4j+KDoyBQYXJlbnQgU2xhY2sgbWVzc2FnZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZWFkIC1yIC1kICcnIFBBUkVOVF9QQVlMT0FEIDw8SlNPTgp7CiAgImNoYW5uZWwiOiAiJFhSQVlfU0xBQ0tfQ0hBTk5FTCIsCiAgImJsb2NrcyI6IFsKICAgIHsKICAgICAgInR5cGUiOiAiaGVhZGVyIiwKICAgICAgInRleHQiOiB7ICJ0eXBlIjogInBsYWluX3RleHQiLCAidGV4dCI6ICLwn5qoIERlcGVuZGVuY3kgVnVsbmVyYWJpbGl0eSBSZXBvcnQiIH0KICAgIH0sCiAgICB7CiAgICAgICJ0eXBlIjogInNlY3Rpb24iLAogICAgICAidGV4dCI6IHsgInR5cGUiOiAibXJrZHduIiwgInRleHQiOiAiKlByb2plY3Q6KiAkQkFTRU5BTUUiIH0KICAgIH0sCiAgICB7CiAgICAgICJ0eXBlIjogInNlY3Rpb24iLAogICAgICAidGV4dCI6IHsKICAgICAgICAidHlwZSI6ICJtcmtkd24iLAogICAgICAgICJ0ZXh0IjogIvCflLQgKkNyaXRpY2FsOiogJENSSVRJQ0FMICAgIPCflKUgKkhpZ2g6KiAkSElHSCAgICDwn46DICpNZWRpdW06KiAkTUVESVVNICAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJ0eXBlIjogImNvbnRleHQiLAogICAgICAiZWxlbWVudHMiOiBbCiAgICAgICAgeyAidHlwZSI6ICJtcmtkd24iLCAidGV4dCI6ICJEZXRhaWxlZCBmaW5kaW5ncyBhcmUgcG9zdGVkIGluIHRoZSB0aHJlYWQgYmVsb3cg8J+RhyIgfQogICAgICBdCiAgICB9LAogICAgeyAidHlwZSI6ICJkaXZpZGVyIiB9CiAgXQp9CkpTT04KClBBUkVOVF9SRVNQT05TRT0kKGN1cmwgLXMgLVggUE9TVCAiJFNMQUNLX0FQSSIgXAogIC1IICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJFhSQVlfU0xBQ0tfVE9LRU4iIFwKICAtSCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uIiBcCiAgLS1kYXRhICIkUEFSRU5UX1BBWUxPQUQiKQoKVEhSRUFEX1RTPSQoZWNobyAiJFBBUkVOVF9SRVNQT05TRSIgfCBqcSAtciAnLnRzJykKCmlmIFtbIC16ICIkVEhSRUFEX1RTIiB8fCAiJFRIUkVBRF9UUyIgPT0gIm51bGwiIF1dOyB0aGVuCiAgZWNobyAi4p2MIEZhaWxlZCB0byBjcmVhdGUgcGFyZW50IG1lc3NhZ2UiCiAgZWNobyAiJFBBUkVOVF9SRVNQT05TRSIKICBleGl0IDEKZmkKCmVjaG8gIuKchSBQYXJlbnQgbWVzc2FnZSBjcmVhdGVkLiB0aHJlYWRfdHM9JFRIUkVBRF9UUyIKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgNO+4j+KDoyBUaHJlYWQgZW50cmllcyAoc29ydGVkLCBDVkUgbGlua3MpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmpxIC1yICcKZGVmIHJhbms6CiAgaWYgLiA9PSAiQ3JpdGljYWwiIHRoZW4gMAogIGVsaWYgLiA9PSAiSGlnaCIgICB0aGVuIDEKICBlbGlmIC4gPT0gIk1lZGl1bSIgdGhlbiAyCiAgZWxpZiAuID09ICJMb3ciICAgIHRoZW4gMwogIGVsc2UgOSBlbmQ7CgpbCiAgLltdCiAgfCBzZWxlY3QoLnZ1bG5lcmFiaWxpdGllcyAhPSBudWxsKQogIHwgLnZ1bG5lcmFiaWxpdGllc1tdCiAgfCAuIGFzICR2CiAgfCAoJHYuY29tcG9uZW50cyB8IHRvX2VudHJpZXNbXSkgYXMgJGNvbXAKICB8ICgkdi5jdmVzIC8vIFt7Y3ZlOiJOL0EifV0pW10KICB8IHsKICAgICAgc2V2OiAkdi5zZXZlcml0eSwKICAgICAgcjogKCR2LnNldmVyaXR5IHwgcmFuayksCiAgICAgIHRleHQ6ICIqPGh0dHBzOi8vbnZkLm5pc3QuZ292L3Z1bG4vZGV0YWlsL1woLmN2ZSl8XCguY3ZlKT4qXG4qSW1wYWN0ZWQ6KiBgXCgKICAgICAgICAkY29tcC5rZXkgfCBzdWIoIl5bYS16XSs6Ly8iOyAiIikKICAgICAgKWAgdlwoCiAgICAgICAgJGNvbXAudmFsdWUuYWZmZWN0ZWRfdmVyc2lvbiAvLyAiTi9BIgogICAgICApXG4qRml4ZWQgaW46KiBcKAogICAgICAgICgkY29tcC52YWx1ZS5maXhlZF92ZXJzaW9ucyAvLyBbXSkKICAgICAgICB8IGpvaW4oIiwgIikKICAgICAgICB8IGlmIC4gPT0gIiIgdGhlbiAiTi9BIiBlbHNlIC4gZW5kCiAgICAgIClcbipEaXJlY3QgZGVwZW5kZW5jaWVzOipcbuKAoiBcKAogICAgICAgICRjb21wLnZhbHVlLmltcGFjdF9wYXRoc1swXVsxXS5jb21wb25lbnRfaWQKICAgICAgICB8IHN1YigiXlthLXpdKzovLyI7ICIiKQogICAgICApIgogICAgfQpdCnwgc29ydF9ieSgucikKfCAuW10KfCBbLnNldiwgLnRleHRdCnwgQHRzdgonICIkSU5QVVRfSlNPTiIgfAp3aGlsZSBJRlM9JCdcdCcgcmVhZCAtciBTRVYgVEVYVDsgZG8KCiAgRU1PSkk9IvCfkbsiCiAgW1sgIiRTRVYiID09ICJDcml0aWNhbCIgXV0gJiYgRU1PSkk9IvCflLQiCiAgW1sgIiRTRVYiID09ICJIaWdoIiAgICAgXV0gJiYgRU1PSkk9IvCflKUiCiAgW1sgIiRTRVYiID09ICJNZWRpdW0iICAgXV0gJiYgRU1PSkk9IvCfjoMiCgogIHJlYWQgLXIgLWQgJycgVEhSRUFEX1BBWUxPQUQgPDxKU09OCnsKICAiY2hhbm5lbCI6ICIkWFJBWV9TTEFDS19DSEFOTkVMIiwKICAidGhyZWFkX3RzIjogIiRUSFJFQURfVFMiLAogICJibG9ja3MiOiBbCiAgICB7CiAgICAgICJ0eXBlIjogInNlY3Rpb24iLAogICAgICAidGV4dCI6IHsKICAgICAgICAidHlwZSI6ICJtcmtkd24iLAogICAgICAgICJ0ZXh0IjogIiRFTU9KSSAqJFNFVipcbiRURVhUIgogICAgICB9CiAgICB9CiAgXQp9CkpTT04KCiAgY3VybCAtcyAtWCBQT1NUICIkU0xBQ0tfQVBJIiBcCiAgICAtSCAiQXV0aG9yaXphdGlvbjogQmVhcmVyICRYUkFZX1NMQUNLX1RPS0VOIiBcCiAgICAtSCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uIiBcCiAgICAtLWRhdGEgIiRUSFJFQURfUEFZTE9BRCIgPiAvZGV2L251bGwKICAKICAjIFNtYWxsIGRlbGF5IHRvIGF2b2lkIHJhdGUgbGltaXRpbmcKICBzbGVlcCAwLjEKCmRvbmUKCmVjaG8gIuKchSBBbGwgdnVsbmVyYWJpbGl0aWVzIHBvc3RlZCB0byB0aHJlYWQiCg==' | base64 -d > xray.sh
65
- - chmod +x xray.sh
66
-
67
- # Run Xray scan
68
- - |
69
- echo "🔍 Running JFrog Xray scan..."
70
- set +e
71
- jf audit $PROJECT_TYPE --server-id=scan1 --format table --min-severity Medium . > xray.txt
72
- SCAN_EXIT_CODE=$?
73
- set -e
74
- echo "Scan completed with exit code: $SCAN_EXIT_CODE"
75
- - cat xray.txt
76
- # Cleanup JFrog config
77
- - jf config remove scan1 || true
78
-
79
- # Send to Slack
80
- - |
81
- if [ -n "$XRAY_SLACK_TOKEN" ] && [ -n "$XRAY_SLACK_CHANNEL" ]; then
82
- echo "📤 Sending results to Slack..."
83
- bash xray.sh
84
- else
85
- echo "⚠️ Slack tokens not configured, skipping notification"
86
- fi
87
-
88
- pipelines:
89
- pull-requests:
90
- '**':
91
- - step:
92
- runs-on:
93
- - self.hosted
94
- - linux.shell
95
- name: On Pull Request
96
- script:
97
- - npm install -g pnpm
98
- - pnpm config set //registry.npmjs.org/:_authToken $DOCUPACE_NPM_TOKEN
99
- - pnpm install --frozen-lockfile
100
- - 'npx eslint . --rule "no-unused-vars: warn" --rule "no-useless-escape: warn" --color'
101
- - pnpm test
102
- artifacts:
103
- - coverage/**
104
- after-script:
105
- - echo "Pipeline completed with status $BITBUCKET_EXIT_CODE"
106
-
107
- custom:
108
- scheduled-tests:
109
- - step:
110
- runs-on:
111
- - self.hosted
112
- - linux.shell
113
- name: Scheduled Tests
114
- script:
115
- - npm install -g pnpm
116
- - pnpm config set //registry.npmjs.org/:_authToken $DOCUPACE_NPM_TOKEN
117
- - pnpm install --frozen-lockfile
118
- - 'npx eslint . --rule "no-unused-vars: warn" --rule "no-useless-escape: warn" --color'
119
- - pnpm test
120
- artifacts:
121
- - coverage/**
122
- after-script:
123
- - echo "Pipeline completed with status $BITBUCKET_EXIT_CODE"
124
-
125
- branches:
126
- main:
127
- - step:
128
- runs-on:
129
- - self.hosted
130
- - linux.shell
131
- name: Main Branch Build
132
- script:
133
- - npm install -g pnpm
134
- - pnpm config set //registry.npmjs.org/:_authToken $DOCUPACE_NPM_TOKEN
135
- - pnpm install --frozen-lockfile
136
- - 'npx eslint . --rule "no-unused-vars: warn" --rule "no-useless-escape: warn" --color'
137
- - pnpm test
138
- artifacts:
139
- - coverage/**
140
-
141
-
142
-
package/jest.config.js DELETED
@@ -1,15 +0,0 @@
1
- // jest.config.js
2
- export default {
3
- testEnvironment: 'node',
4
- transform: {},
5
- verbose: true,
6
- collectCoverage: true,
7
- coverageDirectory: 'coverage',
8
- coverageReporters: ['text', 'lcov', 'json', 'html'],
9
- collectCoverageFrom: [
10
- 'src/**/*.{js,ts}',
11
- '!src/**/cli.js',
12
- '!src/**/*.test.{js,ts}',
13
- '!**/node_modules/**',
14
- ],
15
- };
@@ -1,79 +0,0 @@
1
- import axios from 'axios';
2
- import { createAlias } from '../next/alias.js';
3
- import { getAuth0AuthToken } from './configure.js';
4
- import { getVaultSecrets } from './vault.js';
5
- import { getVaultSecretsConfigs } from '../next/config.js';
6
- import { cloneEnvRepository, readDeployConfig } from '../next/deploy.js';
7
-
8
- export async function getCCAlias({ application, auth0Domain, auth0AuthToken }) {
9
- console.log(`Forming alias name for application ${application}...`);
10
-
11
- try {
12
- const auth0Response = await axios.get(
13
- `https://${auth0Domain}/api/v2/clients`,
14
- {
15
- headers: { authorization: `Bearer ${auth0AuthToken}` },
16
- },
17
- );
18
-
19
- const appAuth0ClientIdData = auth0Response.data.find(
20
- (client) => client.name === `${application}`,
21
- );
22
- const appAuth0ClientId = appAuth0ClientIdData.client_id;
23
-
24
- console.log(`Client Credentials Alias: ${appAuth0ClientId}@clients`);
25
- return `${appAuth0ClientId}@clients`;
26
- } catch (err) {
27
- console.error(
28
- `Failed to form alias name for application: ${application}: ${err.message}`,
29
- );
30
- }
31
- }
32
-
33
- export async function configureAlias(
34
- site,
35
- env,
36
- username,
37
- password,
38
- realm,
39
- auth0Tenant,
40
- ) {
41
- console.log(`Creating alias for site: ${site} in env: ${env}`);
42
- // Site Common Secrets
43
- const siteCommonSecretsPath =
44
- getVaultSecretsConfigs(site).siteCommonSecretsPath;
45
- console.log(`siteCommonSecretsPath => ${siteCommonSecretsPath}`);
46
- const siteCommonSecrets = await getVaultSecrets(siteCommonSecretsPath);
47
-
48
- let auth0Domain;
49
- if (auth0Tenant === '') {
50
- auth0Domain = `docupace-${env}-${site}.us.auth0.com`;
51
- } else {
52
- auth0Domain = `${auth0Tenant}.us.auth0.com`;
53
- }
54
- const auth0ClientId = siteCommonSecrets.AUTH0_CLIENT_ID;
55
- const auth0ClientSecret = siteCommonSecrets.AUTH0_CLIENT_SECRET;
56
- const auth0Token = await getAuth0AuthToken(
57
- auth0Domain,
58
- auth0ClientId,
59
- auth0ClientSecret,
60
- );
61
-
62
- await cloneEnvRepository(env);
63
-
64
- const { deployConfig: deployGraphQLServerConfig } = await readDeployConfig(
65
- 'graphql-server',
66
- env,
67
- site,
68
- 'values',
69
- );
70
- const coreUrl = deployGraphQLServerConfig.graphqlServer.coreUrl;
71
-
72
- const clientCredentialsAlias = await getCCAlias({
73
- application: 'docupace-graphql-client-credentials',
74
- auth0Domain: auth0Domain,
75
- auth0AuthToken: auth0Token,
76
- });
77
-
78
- await createAlias(coreUrl, username, password, realm, clientCredentialsAlias);
79
- }
@@ -1,172 +0,0 @@
1
- // alias.test.js
2
- import { jest } from '@jest/globals';
3
-
4
- // --------- ESM-Compatible Mocks ---------
5
- jest.unstable_mockModule('axios', () => ({
6
- default: {
7
- get: jest.fn(),
8
- },
9
- }));
10
-
11
- jest.unstable_mockModule('../next/alias.js', () => ({
12
- createAlias: jest.fn(),
13
- }));
14
-
15
- jest.unstable_mockModule('./configure.js', () => ({
16
- getAuth0AuthToken: jest.fn(),
17
- }));
18
-
19
- jest.unstable_mockModule('./vault.js', () => ({
20
- getVaultSecrets: jest.fn(),
21
- }));
22
-
23
- jest.unstable_mockModule('../next/config.js', () => ({
24
- getVaultSecretsConfigs: jest.fn(),
25
- }));
26
-
27
- jest.unstable_mockModule('../next/deploy.js', () => ({
28
- cloneEnvRepository: jest.fn(),
29
- readDeployConfig: jest.fn(),
30
- }));
31
-
32
- // --------- Import AFTER mocks ---------
33
- const { configureAlias, getCCAlias } = await import('./alias.js');
34
- const axios = (await import('axios')).default;
35
- const { createAlias } = await import('../next/alias.js');
36
- const { getAuth0AuthToken } = await import('./configure.js');
37
- const { getVaultSecrets } = await import('./vault.js');
38
- const { getVaultSecretsConfigs } = await import('../next/config.js');
39
- const { cloneEnvRepository, readDeployConfig } = await import(
40
- '../next/deploy.js'
41
- );
42
-
43
- // --------- Shared Test Setup ---------
44
- beforeAll(() => {
45
- jest.spyOn(console, 'log').mockImplementation(() => {}); // silence logs
46
- });
47
-
48
- afterAll(() => {
49
- console.log.mockRestore();
50
- });
51
-
52
- describe('configureAlias', () => {
53
- const site = 'example';
54
- const env = 'dev';
55
- const username = 'admin';
56
- const password = 'pass';
57
- const realm = 'Users';
58
- const auth0Tenant = '';
59
-
60
- const mockSecrets = {
61
- AUTH0_CLIENT_ID: 'client-id',
62
- AUTH0_CLIENT_SECRET: 'client-secret',
63
- };
64
-
65
- const mockToken = 'mocked-auth0-token';
66
-
67
- const mockClients = [
68
- { name: 'docupace-graphql-client-credentials', client_id: 'client-123' },
69
- ];
70
-
71
- const mockConfig = {
72
- deployConfig: {
73
- graphqlServer: {
74
- coreUrl: 'https://core.example.com',
75
- },
76
- },
77
- };
78
-
79
- beforeEach(() => {
80
- jest.clearAllMocks();
81
-
82
- getVaultSecretsConfigs.mockReturnValue({
83
- siteCommonSecretsPath: 'vault/path/to/secrets',
84
- });
85
-
86
- getVaultSecrets.mockResolvedValue(mockSecrets);
87
- getAuth0AuthToken.mockResolvedValue(mockToken);
88
- axios.get.mockResolvedValue({ data: mockClients });
89
- cloneEnvRepository.mockResolvedValue(undefined);
90
- readDeployConfig.mockResolvedValue(mockConfig);
91
- createAlias.mockResolvedValue(undefined);
92
- });
93
-
94
- it('should configure alias with default tenant and call all required steps', async () => {
95
- await configureAlias(site, env, username, password, realm, auth0Tenant);
96
-
97
- expect(getVaultSecretsConfigs).toHaveBeenCalledWith(site);
98
- expect(getVaultSecrets).toHaveBeenCalledWith('vault/path/to/secrets');
99
-
100
- expect(getAuth0AuthToken).toHaveBeenCalledWith(
101
- 'docupace-dev-example.us.auth0.com',
102
- 'client-id',
103
- 'client-secret',
104
- );
105
-
106
- expect(cloneEnvRepository).toHaveBeenCalledWith(env);
107
-
108
- expect(readDeployConfig).toHaveBeenCalledWith(
109
- 'graphql-server',
110
- env,
111
- site,
112
- 'values',
113
- );
114
-
115
- expect(axios.get).toHaveBeenCalledWith(
116
- 'https://docupace-dev-example.us.auth0.com/api/v2/clients',
117
- { headers: { authorization: `Bearer ${mockToken}` } },
118
- );
119
-
120
- expect(createAlias).toHaveBeenCalledWith(
121
- 'https://core.example.com',
122
- username,
123
- password,
124
- realm,
125
- 'client-123@clients',
126
- );
127
- });
128
- });
129
-
130
- describe('getCCAlias', () => {
131
- const application = 'docupace-graphql-client-credentials';
132
- const auth0Domain = 'example.auth0.com';
133
- const auth0AuthToken = 'token';
134
-
135
- it('should return correct alias string for client', async () => {
136
- axios.get.mockResolvedValue({
137
- data: [{ name: application, client_id: 'abc123' }],
138
- });
139
-
140
- const alias = await getCCAlias({
141
- application,
142
- auth0Domain,
143
- auth0AuthToken,
144
- });
145
- expect(alias).toBe('abc123@clients');
146
-
147
- expect(axios.get).toHaveBeenCalledWith(
148
- 'https://example.auth0.com/api/v2/clients',
149
- { headers: { authorization: 'Bearer token' } },
150
- );
151
- });
152
-
153
- it('should log error and return undefined if axios fails', async () => {
154
- axios.get.mockRejectedValue(new Error('Network error'));
155
- const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
156
-
157
- const result = await getCCAlias({
158
- application,
159
- auth0Domain,
160
- auth0AuthToken,
161
- });
162
- expect(result).toBeUndefined();
163
-
164
- expect(errorSpy).toHaveBeenCalledWith(
165
- expect.stringContaining(
166
- 'Failed to form alias name for application: docupace-graphql-client-credentials: Network error',
167
- ),
168
- );
169
-
170
- errorSpy.mockRestore();
171
- });
172
- });
package/src/auth0/cli.js DELETED
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { Command } from 'commander';
4
- import { configureFromSite } from './configure.js';
5
- import { getVaultSecrets } from './vault.js';
6
-
7
- import dotenv from 'dotenv';
8
- import { configureAlias } from './alias.js';
9
- import { exportConf } from './export.js';
10
- import { getAuth0Metadata } from './metadata.js';
11
-
12
- dotenv.config({ path: ['.env.pipeline.local', 'config/.env.pipeline.local'] });
13
-
14
- const program = new Command();
15
-
16
- program
17
- .command(
18
- 'configureFromSite <fromSite> <toSite> <fromEnv> <toEnv> <deployUI> <deployGraphQLServer> <useNewDomain> <useS3Ui> <deployCCUI> <useS3Gq> [auth0Tenant]',
19
- )
20
- .description('Configure the Auth0 tenants in env for the given site')
21
- .action(
22
- async (
23
- fromSite,
24
- toSite,
25
- fromEnv,
26
- toEnv,
27
- deployUI,
28
- deployGraphQLServer,
29
- useNewDomain,
30
- useS3Ui,
31
- deployCCUI,
32
- useS3Gq,
33
- auth0Tenant = '',
34
- ) => {
35
- await configureFromSite(
36
- fromSite,
37
- toSite,
38
- fromEnv,
39
- toEnv,
40
- deployUI,
41
- deployGraphQLServer,
42
- useNewDomain,
43
- useS3Ui === 'true' || useS3Ui === true,
44
- deployCCUI,
45
- useS3Gq === 'true' || useS3Gq === true,
46
- auth0Tenant,
47
- );
48
- },
49
- );
50
-
51
- program
52
- .command('getVaultSecrets <vaultPath>')
53
- .description('Get Secrets for Vault PATH')
54
- .action(async (vaultPath) => {
55
- const data = await getVaultSecrets(vaultPath);
56
- console.log(JSON.stringify(data, 'null', 2));
57
- });
58
-
59
- program
60
- .command(
61
- 'configureAlias <site> <env> <username> <password> <realm> [auth0Tenant]',
62
- )
63
- .description('Configure Core Alias for the given site')
64
- .action(async (site, env, username, password, realm, auth0Tenant = '') => {
65
- await configureAlias(site, env, username, password, realm, auth0Tenant);
66
- });
67
-
68
- program
69
- .command('exportConf <site> <env> [auth0Tenant]')
70
- .description('Export Auth0 configuration for the given site')
71
- .action(async (site, env, auth0Tenant = '') => {
72
- await exportConf(site, env, auth0Tenant);
73
- });
74
-
75
- program
76
- .command('getAuth0Metadata <site> <env> [auth0Tenant] [jiraTicket]')
77
- .description('Get Auth0 metadata for the given site')
78
- .action(async (site, env, auth0Tenant = '', jiraTicket = '') => {
79
- await getAuth0Metadata(site, env, auth0Tenant, jiraTicket);
80
- });
81
-
82
- program.parse(process.argv);