From 6ee122f45db20d2cf239b75467ef14f120b16be7 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Fri, 24 Jun 2022 01:17:10 +0500 Subject: [PATCH 01/58] fix(fe): add missed dep --- web2/package-lock.json | 2100 +++++++++++++--------------------------- web2/package.json | 7 +- 2 files changed, 675 insertions(+), 1432 deletions(-) diff --git a/web2/package-lock.json b/web2/package-lock.json index 83d30e43..2547fe8c 100644 --- a/web2/package-lock.json +++ b/web2/package-lock.json @@ -33,6 +33,7 @@ "eslint": "^7.32.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-vue": "^9.1.1", + "eslint-plugin-vuejs-accessibility": "^1.2.0", "glob-parent": ">=5.1.2", "nanoid": ">=3.1.31", "nyc": "^15.1.0", @@ -2824,6 +2825,26 @@ } } }, + "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, "node_modules/@vue/cli-shared-utils": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.6.tgz", @@ -3031,38 +3052,6 @@ "vue-template-compiler": "^2.x" } }, - "node_modules/@vue/vue-loader-v15": { - "name": "vue-loader", - "version": "15.9.8", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", - "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", - "dev": true, - "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, "node_modules/@vue/web-component-wrapper": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", @@ -3697,7 +3686,6 @@ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", "dev": true, - "peer": true, "engines": { "node": ">=6.0" } @@ -3885,14 +3873,6 @@ "lodash": "^4.17.14" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4110,6 +4090,57 @@ "node": ">=0.10.0" } }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4154,17 +4185,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -4807,70 +4827,6 @@ "node": ">=0.10.0" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-css": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", @@ -6151,14 +6107,13 @@ } }, "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "peer": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" @@ -6541,8 +6496,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.1.0.tgz", "integrity": "sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -7090,7 +7044,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-vuejs-accessibility/-/eslint-plugin-vuejs-accessibility-1.2.0.tgz", "integrity": "sha512-wF7kT22lS2VOmIpDeI65bnFFKFgESEEpI+CWKr43mdfDRywA4sCk7cKhtZsvfbPOtKO0GDlnpFxZbOIGsFn7IQ==", "dev": true, - "peer": true, "dependencies": { "aria-query": "^5.0.0", "emoji-regex": "^10.0.0", @@ -7599,70 +7552,6 @@ "ms": "2.0.0" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7798,6 +7687,57 @@ "node": ">=0.10.0" } }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7948,14 +7888,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -9240,28 +9172,18 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "peer": true, "dependencies": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9351,28 +9273,18 @@ } }, "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "peer": true, "dependencies": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -9389,24 +9301,24 @@ } }, "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "peer": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "peer": true, "engines": { @@ -11469,14 +11381,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/nanoid": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", @@ -11512,6 +11416,20 @@ "node": ">=0.10.0" } }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nanomatch/node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -11526,6 +11444,47 @@ "node": ">=0.10.0" } }, + "node_modules/nanomatch/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nanomatch/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -12096,70 +12055,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -12701,14 +12596,6 @@ "dev": true, "peer": true }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -14128,14 +14015,6 @@ "node": ">=4" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -14879,6 +14758,57 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", @@ -14902,70 +14832,6 @@ "ms": "2.0.0" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15219,70 +15085,6 @@ "node": ">=0.10.0" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -16010,6 +15812,20 @@ "node": ">=8.0" } }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex/node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -16024,6 +15840,47 @@ "node": ">=0.10.0" } }, + "node_modules/to-regex/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -16037,6 +15894,16 @@ "node": ">=0.10.0" } }, + "node_modules/to-regex/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -16362,18 +16229,6 @@ "node": ">=0.10.0" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -16707,6 +16562,20 @@ "dev": true, "peer": true }, + "node_modules/vue-cli-plugin-vuetify/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vue-cli-plugin-vuetify/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -16794,6 +16663,47 @@ "node": ">=6" } }, + "node_modules/vue-cli-plugin-vuetify/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-cli-plugin-vuetify/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vue-cli-plugin-vuetify/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vue-cli-plugin-vuetify/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -17488,6 +17398,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/vuetify-loader/-/vuetify-loader-1.8.0.tgz", "integrity": "sha512-qzhKX6xZRax9q91A16cxZ43Ld+6kZDceko3a+6h6II/N9YVUgtXace3iFxOZD6ZAYpw4Tj6U6rfxfymOS+9dwQ==", + "deprecated": "Doesn't work at all, rollback to 1.7.3", "dev": true, "dependencies": { "decache": "^4.6.0", @@ -17565,318 +17476,6 @@ "node": ">=10.13.0" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", @@ -20984,6 +20583,29 @@ "webpack-merge": "^5.7.3", "webpack-virtual-modules": "^0.4.2", "whatwg-fetch": "^3.6.2" + }, + "dependencies": { + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + } } }, "@vue/cli-shared-utils": { @@ -21146,27 +20768,6 @@ "pretty": "^2.0.0" } }, - "@vue/vue-loader-v15": { - "version": "npm:vue-loader@15.9.8", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", - "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", - "dev": true, - "requires": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "dependencies": { - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - } - } - }, "@vue/web-component-wrapper": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", @@ -21712,8 +21313,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true, - "peer": true + "dev": true }, "arr-diff": { "version": "4.0.0", @@ -21866,14 +21466,6 @@ "lodash": "^4.17.14" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true, - "peer": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -22031,6 +21623,45 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true } } }, @@ -22058,17 +21689,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -22597,59 +22217,6 @@ "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true - } - } - } } }, "clean-css": { @@ -23645,14 +23212,13 @@ } }, "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "peer": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "^0.1.0" } }, "delayed-stream": { @@ -23981,8 +23547,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.1.0.tgz", "integrity": "sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==", - "dev": true, - "peer": true + "dev": true }, "emojis-list": { "version": "3.0.0", @@ -24522,7 +24087,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-vuejs-accessibility/-/eslint-plugin-vuejs-accessibility-1.2.0.tgz", "integrity": "sha512-wF7kT22lS2VOmIpDeI65bnFFKFgESEEpI+CWKr43mdfDRywA4sCk7cKhtZsvfbPOtKO0GDlnpFxZbOIGsFn7IQ==", "dev": true, - "peer": true, "requires": { "aria-query": "^5.0.0", "emoji-regex": "^10.0.0", @@ -24792,57 +24356,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -24955,6 +24468,45 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true } } }, @@ -25077,14 +24629,6 @@ } } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true, - "peer": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -26060,22 +25604,13 @@ "dev": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "peer": true, "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true - } + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -26143,22 +25678,13 @@ } }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "peer": true, "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true - } + "kind-of": "^3.0.2" } }, "is-date-object": { @@ -26171,21 +25697,21 @@ } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "peer": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "peer": true } @@ -27778,14 +27304,6 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, - "optional": true, - "peer": true - }, "nanoid": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", @@ -27812,6 +27330,17 @@ "to-regex": "^3.0.1" }, "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -27823,6 +27352,38 @@ "is-extendable": "^1.0.1" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -28289,59 +27850,6 @@ "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true - } - } - } } }, "object-inspect": { @@ -28771,14 +28279,6 @@ "dev": true, "peer": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true, - "peer": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -29793,14 +29293,6 @@ "es6-error": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true, - "optional": true, - "peer": true - }, "renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -30362,57 +29854,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -30450,6 +29891,45 @@ "requires": { "is-descriptor": "^1.0.0" } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true } } }, @@ -30669,59 +30149,6 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "peer": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "peer": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "peer": true - } - } - } } }, "statuses": { @@ -31290,6 +30717,17 @@ "safe-regex": "^1.1.0" }, "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -31301,6 +30739,38 @@ "is-extendable": "^1.0.1" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -31310,6 +30780,13 @@ "requires": { "is-plain-object": "^2.0.4" } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true } } }, @@ -31586,14 +31063,6 @@ } } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "peer": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -31901,6 +31370,17 @@ "dev": true, "peer": true }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -31972,6 +31452,38 @@ "locate-path": "^3.0.0" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -32563,276 +32075,6 @@ "graceful-fs": "^4.1.2" } }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "peer": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", diff --git a/web2/package.json b/web2/package.json index 93954e05..edcffe77 100644 --- a/web2/package.json +++ b/web2/package.json @@ -34,6 +34,9 @@ "eslint": "^7.32.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-vue": "^9.1.1", + "eslint-plugin-vuejs-accessibility": "^1.2.0", + "glob-parent": ">=5.1.2", + "nanoid": ">=3.1.31", "nyc": "^15.1.0", "sass": "~1.32.12", "sass-loader": "^13.0.0", @@ -41,8 +44,6 @@ "stylus-loader": "^3.0.2", "vue-cli-plugin-vuetify": "~2.0.7", "vue-template-compiler": "^2.6.14", - "vuetify-loader": "^1.8.0", - "glob-parent": ">=5.1.2", - "nanoid": ">=3.1.31" + "vuetify-loader": "^1.8.0" } } From 7f0a7979c4fd88f614e9f6083d0d34708664d064 Mon Sep 17 00:00:00 2001 From: Martin Mudra Date: Wed, 17 Aug 2022 15:53:55 +0200 Subject: [PATCH 02/58] Added https draft --- web2/src/components/RepositoryForm.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web2/src/components/RepositoryForm.vue b/web2/src/components/RepositoryForm.vue index a0208cb1..a31572f7 100644 --- a/web2/src/components/RepositoryForm.vue +++ b/web2/src/components/RepositoryForm.vue @@ -61,6 +61,16 @@ > ssh + + + https + local: Date: Sun, 21 Aug 2022 22:23:48 +0200 Subject: [PATCH 03/58] Remove goverage and move from Packr 1 to Packr 2 Ideally packr should not be used at all, but this at least makes building easier. Partially fixes #1015 --- Taskfile.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 51e13671..9db1ccdd 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -53,8 +53,7 @@ tasks: GORELEASER_VERSION: "0.159.0" GOLINTER_VERSION: "1.46.2" cmds: - - go install github.com/gobuffalo/packr/...@v1.10.4 - - go install github.com/haya14busa/goverage@latest + - go install github.com/gobuffalo/packr/v2@latest - go install github.com/snikch/goodman/cmd/goodman@latest - go install github.com/go-swagger/go-swagger/cmd/swagger@latest - '{{ if ne OS "windows" }} sh -c "curl -L https://github.com/goreleaser/goreleaser/releases/download/v{{ .GORELEASER_VERSION }}/goreleaser_$(uname -s)_$(uname -m).tar.gz | tar -xz -C $(go env GOPATH)/bin goreleaser"{{ else }} {{ end }}' @@ -100,7 +99,7 @@ tasks: cmds: - mkdir -p web2/dist - go run util/version_gen/generator.go {{ if .TAG }}{{ .TAG }}{{ else }}{{ if .SEMAPHORE_VERSION }}{{ .SEMAPHORE_VERSION }}{{ else }}{{ .BRANCH }}-{{ .SHA }}-{{ .TIMESTAMP }}{{ if .DIRTY }}-dirty{{ end }}{{ end }}{{end}} - - packr + - packr2 vars: TAG: sh: git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed -n 's/^\([^^~]\{1,\}\)\(\^0\)\{0,1\}$/\1/p' @@ -157,9 +156,7 @@ tasks: cmds: - go vet ./... - swagger validate ./api-docs.yml - # 2> /dev/null makes goverage less noisy about pattern matching - # if no tests exist but will still print failing test results - - goverage -v -coverprofile=coverage.out ./... 2> /dev/null + - go test -v -coverprofile=coverage.out ./... 2> /dev/null test:api: desc: test the api with dredd From 120ae77012ce24928b6da916e7981dcfa0bf39d7 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 21 Aug 2022 23:45:29 +0200 Subject: [PATCH 04/58] Taskfile.yml: Fix spacing for 'deps' --- Taskfile.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 9db1ccdd..38397443 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -23,9 +23,9 @@ tasks: deps: desc: Install all dependencies (except dredd requirements) cmds: - - task: deps:tools - - task: deps:be - - task: deps:fe2 + - task: deps:tools + - task: deps:be + - task: deps:fe2 deps:be: desc: Vendor application dependencies From 03f763cf57bb3733ac0a24b2667023c70a874b9f Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 21 Aug 2022 23:46:07 +0200 Subject: [PATCH 05/58] Taskfile.yml: Fix spacing for build:local --- Taskfile.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index 38397443..ef69a15b 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -127,7 +127,7 @@ tasks: desc: Build a binary for the current architecture dir: cli cmds: - - go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }} + - go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }} release: desc: creates a release without performing validations or publishing artifacts From eb63de4e9ab7aa2a135c08b9dabf3b16c267f070 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 21 Aug 2022 23:53:57 +0200 Subject: [PATCH 06/58] Taskfile.yml: Packr needs to be run in legacy mode --- Taskfile.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index ef69a15b..777bee23 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -99,7 +99,7 @@ tasks: cmds: - mkdir -p web2/dist - go run util/version_gen/generator.go {{ if .TAG }}{{ .TAG }}{{ else }}{{ if .SEMAPHORE_VERSION }}{{ .SEMAPHORE_VERSION }}{{ else }}{{ .BRANCH }}-{{ .SHA }}-{{ .TIMESTAMP }}{{ if .DIRTY }}-dirty{{ end }}{{ end }}{{end}} - - packr2 + - packr2 --legacy vars: TAG: sh: git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed -n 's/^\([^^~]\{1,\}\)\(\^0\)\{0,1\}$/\1/p' From 1a7d61a57b2c9fed5bbdcfc2162f8f9ada6c84c1 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 22 Aug 2022 00:59:37 +0200 Subject: [PATCH 07/58] Revert packr change as not even legacy mode works properly --- Taskfile.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 777bee23..d0712bcf 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -53,7 +53,7 @@ tasks: GORELEASER_VERSION: "0.159.0" GOLINTER_VERSION: "1.46.2" cmds: - - go install github.com/gobuffalo/packr/v2@latest + - go install github.com/gobuffalo/packr/...@v1.10.4 - go install github.com/snikch/goodman/cmd/goodman@latest - go install github.com/go-swagger/go-swagger/cmd/swagger@latest - '{{ if ne OS "windows" }} sh -c "curl -L https://github.com/goreleaser/goreleaser/releases/download/v{{ .GORELEASER_VERSION }}/goreleaser_$(uname -s)_$(uname -m).tar.gz | tar -xz -C $(go env GOPATH)/bin goreleaser"{{ else }} {{ end }}' @@ -99,7 +99,7 @@ tasks: cmds: - mkdir -p web2/dist - go run util/version_gen/generator.go {{ if .TAG }}{{ .TAG }}{{ else }}{{ if .SEMAPHORE_VERSION }}{{ .SEMAPHORE_VERSION }}{{ else }}{{ .BRANCH }}-{{ .SHA }}-{{ .TIMESTAMP }}{{ if .DIRTY }}-dirty{{ end }}{{ end }}{{end}} - - packr2 --legacy + - packr vars: TAG: sh: git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed -n 's/^\([^^~]\{1,\}\)\(\^0\)\{0,1\}$/\1/p' From fd58a35c75039fd9a46390fabe74ca6972463ac3 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 22 Aug 2022 01:00:32 +0200 Subject: [PATCH 08/58] Remove 2>/dev/null as go test isn't as noisy --- Taskfile.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index d0712bcf..29f437db 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -156,7 +156,7 @@ tasks: cmds: - go vet ./... - swagger validate ./api-docs.yml - - go test -v -coverprofile=coverage.out ./... 2> /dev/null + - go test -v -coverprofile=coverage.out ./... test:api: desc: test the api with dredd From fb75b5a50771f18933d96b4a8480b5907d86eba1 Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Thu, 25 Aug 2022 17:02:19 +0200 Subject: [PATCH 09/58] Fix example JSON in EnvironmentForm.vue --- web2/src/components/EnvironmentForm.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web2/src/components/EnvironmentForm.vue b/web2/src/components/EnvironmentForm.vue index 07581227..3b63330b 100644 --- a/web2/src/components/EnvironmentForm.vue +++ b/web2/src/components/EnvironmentForm.vue @@ -52,7 +52,7 @@ Example:
{
   "var_available_in_playbook_1": 1245,
-  "var_available_in_playbook_2": "test",
+  "var_available_in_playbook_2": "test"
 }
From ea15c7e4ef0aed032cd3fd5c7ca1f0fdad490e7a Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Fri, 9 Sep 2022 22:30:22 +0500 Subject: [PATCH 10/58] fix: swagger version --- Taskfile.yml | 2 +- web2/src/components/RepositoryForm.vue | 31 ++++++-------------------- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index 225647a8..86e3cb8b 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -56,7 +56,7 @@ tasks: - go install github.com/gobuffalo/packr/...@v1.10.4 - go install github.com/haya14busa/goverage@latest - go install github.com/snikch/goodman/cmd/goodman@latest - - go install github.com/go-swagger/go-swagger/cmd/swagger@latest + - go install github.com/go-swagger/go-swagger/cmd/swagger@v0.29.0 - '{{ if ne OS "windows" }} sh -c "curl -L https://github.com/goreleaser/goreleaser/releases/download/v{{ .GORELEASER_VERSION }}/goreleaser_$(uname -s)_$(uname -m).tar.gz | tar -xz -C $(go env GOPATH)/bin goreleaser"{{ else }} {{ end }}' - '{{ if ne OS "windows" }} chmod +x $(go env GOPATH)/bin/goreleaser{{ else }} {{ end }}' - '{{ if eq OS "windows" }} echo "NOTICE: You must download goreleaser manually to build this application https://github.com/goreleaser/goreleaser/releases "{{ else }}:{{ end }}' diff --git a/web2/src/components/RepositoryForm.vue b/web2/src/components/RepositoryForm.vue index cd61021a..5e83f8bd 100644 --- a/web2/src/components/RepositoryForm.vue +++ b/web2/src/components/RepositoryForm.vue @@ -35,32 +35,15 @@
git: - file - - - git - - - ssh - + :key="x" + >{{ x }} + local: Date: Fri, 9 Sep 2022 22:37:28 +0500 Subject: [PATCH 11/58] fix(fe): merge conflict --- web2/src/components/RepositoryForm.vue | 35 -------------------------- 1 file changed, 35 deletions(-) diff --git a/web2/src/components/RepositoryForm.vue b/web2/src/components/RepositoryForm.vue index f183cf57..c592041b 100644 --- a/web2/src/components/RepositoryForm.vue +++ b/web2/src/components/RepositoryForm.vue @@ -41,43 +41,8 @@ :color="type ===x ? 'primary' : ''" @click="setType(x)" style="font-weight: bold;" -<<<<<<< HEAD :key="x" >{{ x }} - -======= - > - file - - - git - - - ssh - - - - https - ->>>>>>> f02c260e3509fb17a3b23f24fb62d16cd7fb6493 local: Date: Fri, 9 Sep 2022 23:51:16 +0500 Subject: [PATCH 12/58] docs: update readme --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b011ef1..41ed1d70 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,25 @@ Follow Semaphore on Twitter ([AnsibleSem](https://twitter.com/AnsibleSem)) and S ## Installation +### Full documentation https://docs.ansible-semaphore.com/administration-guide/installation +### Snap + +``` +sudo snap stop semaphore +sudo semaphore user add --admin --name "Your Name" --login your_login --email your-email@examaple.com --password your_password +sudo snap start semaphore +``` [![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/semaphore) +### Docker + +``` +docker pull semaphoreui/semaphore +``` +https://hub.docker.com/r/semaphoreui/semaphore + ## Demo You can test latest version of Semaphore on https://demo.ansible-semaphore.com. @@ -54,7 +69,7 @@ You can test latest version of Semaphore on https://demo.ansible-semaphore.com. Admin and user docs: https://docs.ansible-semaphore.com -API docs: https://ansible-semaphore.com/api/ +API description: https://ansible-semaphore.com/api/ ## Contributing From 0dd190dbcf2c8b96fcd9bb4cc759f4344ae3d32a Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 2 Oct 2022 22:10:56 +0500 Subject: [PATCH 13/58] fix(be): email sending --- services/tasks/alert.go | 33 +++++++++++++++++++++------------ services/tasks/runner.go | 3 +-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/services/tasks/alert.go b/services/tasks/alert.go index 4e7e233a..c5ad4f26 100644 --- a/services/tasks/alert.go +++ b/services/tasks/alert.go @@ -10,10 +10,11 @@ import ( "strings" ) -const emailTemplate = `Subject: Task '{{ .Name }}' failed - -Task {{ .TaskID }} with template '{{ .Name }}' has failed! -Task log: {{ .TaskURL }}` +const emailTemplate = "Subject: Task '{{ .Name }}' failed\r\n" + + "From: {{ .From }}\r\n" + + "\r\n" + + "Task {{ .TaskID }} with template '{{ .Name }}' has failed!`\n" + + "Task Log: {{ .TaskURL }}" const telegramTemplate = `{"chat_id": "{{ .ChatID }}","parse_mode":"HTML","text":"{{ .Name }}\n#{{ .TaskID }} {{ .TaskResult }} {{ .TaskVersion }} {{ .TaskDescription }}\nby {{ .Author }}\n{{ .TaskURL }}"}` @@ -30,6 +31,7 @@ type Alert struct { TaskVersion string Author string Color string + From string } func (t *TaskRunner) sendMailAlert() { @@ -41,9 +43,12 @@ func (t *TaskRunner) sendMailAlert() { var mailBuffer bytes.Buffer alert := Alert{ - TaskID: strconv.Itoa(t.task.ID), - Name: t.template.Name, - TaskURL: util.Config.WebHost + "/project/" + strconv.Itoa(t.template.ProjectID), + TaskID: strconv.Itoa(t.task.ID), + Name: t.template.Name, + TaskURL: util.Config.WebHost + "/project/" + strconv.Itoa(t.template.ProjectID) + + "/templates/" + strconv.Itoa(t.template.ID) + + "?t=" + strconv.Itoa(t.task.ID), + From: util.Config.EmailSender, } tpl := template.New("mail body template") tpl, err := tpl.Parse(emailTemplate) @@ -60,11 +65,15 @@ func (t *TaskRunner) sendMailAlert() { t.panicOnError(err, "Can't find user Email!") t.Log("Sending email to " + userObj.Email + " from " + util.Config.EmailSender) + if util.Config.EmailSecure { - err = util.SendSecureMail(util.Config.EmailHost, util.Config.EmailPort, util.Config.EmailSender, util.Config.EmailUsername, util.Config.EmailPassword, userObj.Email, mailBuffer) + err = util.SendSecureMail(util.Config.EmailHost, util.Config.EmailPort, + util.Config.EmailSender, util.Config.EmailUsername, util.Config.EmailPassword, + userObj.Email, mailBuffer) } else { err = util.SendMail(mailHost, util.Config.EmailSender, userObj.Email, mailBuffer) } + t.panicOnError(err, "Can't send email!") } } @@ -136,9 +145,9 @@ func (t *TaskRunner) sendTelegramAlert() { resp, err := http.Post("https://api.telegram.org/bot"+util.Config.TelegramToken+"/sendMessage", "application/json", &telegramBuffer) if err != nil { - t.Log("Can't send telegram alert! Response code not 200!") + t.Log("Can't send telegram alert! Error: " + err.Error()) } else if resp.StatusCode != 200 { - t.Log("Can't send telegram alert! Response code not 200!") + t.Log("Can't send telegram alert! Response code: " + strconv.Itoa(resp.StatusCode)) } } @@ -219,8 +228,8 @@ func (t *TaskRunner) sendSlackAlert() { resp, err := http.Post(slackUrl, "application/json", &slackBuffer) if err != nil { - t.Log("Can't send slack alert! Response code not 200!") + t.Log("Can't send slack alert! Error: " + err.Error()) } else if resp.StatusCode != 200 { - t.Log("Can't send slack alert! Response code not 200!") + t.Log("Can't send slack alert! Response code: " + strconv.Itoa(resp.StatusCode)) } } diff --git a/services/tasks/runner.go b/services/tasks/runner.go index 1c360bf3..698ee941 100644 --- a/services/tasks/runner.go +++ b/services/tasks/runner.go @@ -72,14 +72,13 @@ func (t *TaskRunner) setStatus(status db.TaskStatus) { t.updateStatus() - t.sendSlackAlert() - if status == db.TaskFailStatus { t.sendMailAlert() } if status == db.TaskSuccessStatus || status == db.TaskFailStatus { t.sendTelegramAlert() + t.sendSlackAlert() } } From ce54257c50e640cf4b5a23d4bc4ea92879823264 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 5 Oct 2022 19:05:18 +0500 Subject: [PATCH 14/58] fix(docker): unknown db dialect error --- deployment/docker/common/semaphore-wrapper | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 5619b21a..0dbb7da2 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -9,7 +9,6 @@ SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" # Semaphore database env config SEMAPHORE_DB_DIALECT="${SEMAPHORE_DB_DIALECT:-mysql}" -SEMAPHORE_DB_DIALECT_ID=1 SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-3306}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" @@ -63,9 +62,13 @@ while ! $(nc -z "$SEMAPHORE_DB_HOST" "$SEMAPHORE_DB_PORT") >/dev/null 2>&1; do done case ${SEMAPHORE_DB_DIALECT} in - "mysql") SEMAPHORE_DB_DIALECT_ID=1;; - "bolt") SEMAPHORE_DB_DIALECT_ID=2;; - "postgres") SEMAPHORE_DB_DIALECT_ID=3;; + mysql) SEMAPHORE_DB_DIALECT_ID=1;; + bolt) SEMAPHORE_DB_DIALECT_ID=2;; + postgres) SEMAPHORE_DB_DIALECT_ID=3;; + *) + echoerr "Unknown database dialect: ${SEMAPHORE_DB_DIALECT}" + exit 1 + ;; esac # Create a config if it does not exist in the current config path From d6f6d0a2084c8f538486393114ad1d6cd1c108df Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 5 Oct 2022 20:04:14 +0500 Subject: [PATCH 15/58] fix(docker): do not check connection for boltdb --- deployment/docker/common/semaphore-wrapper | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 0dbb7da2..b073839c 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -49,17 +49,20 @@ export SEMAPHORE_ACCESS_KEY_ENCRYPTION="${SEMAPHORE_ACCESS_KEY_ENCRYPTION:-cFcXI } # wait on db to be up -echoerr "Attempting to connect to database ${SEMAPHORE_DB} on ${SEMAPHORE_DB_HOST}:${SEMAPHORE_DB_PORT} with user ${SEMAPHORE_DB_USER} ..." -TIMEOUT=30 -while ! $(nc -z "$SEMAPHORE_DB_HOST" "$SEMAPHORE_DB_PORT") >/dev/null 2>&1; do - TIMEOUT=$(expr $TIMEOUT - 1) - if [ $TIMEOUT -eq 0 ]; then - echoerr "Could not connect to database server. Exiting." - exit 1 - fi - echo -n "." - sleep 1 -done + +if [ "${SEMAPHORE_DB_DIALECT}" != 'bolt' ]; then + echoerr "Attempting to connect to database ${SEMAPHORE_DB} on ${SEMAPHORE_DB_HOST}:${SEMAPHORE_DB_PORT} with user ${SEMAPHORE_DB_USER} ..." + TIMEOUT=30 + while ! $(nc -z "$SEMAPHORE_DB_HOST" "$SEMAPHORE_DB_PORT") >/dev/null 2>&1; do + TIMEOUT=$(expr $TIMEOUT - 1) + if [ $TIMEOUT -eq 0 ]; then + echoerr "Could not connect to database server. Exiting." + exit 1 + fi + echo -n "." + sleep 1 + done +fi case ${SEMAPHORE_DB_DIALECT} in mysql) SEMAPHORE_DB_DIALECT_ID=1;; From e477e4d60a0ab90184b46fa1ba4bfc9dba49fe28 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 5 Oct 2022 21:47:51 +0500 Subject: [PATCH 16/58] fix(docker): remove default db port --- deployment/docker/common/semaphore-wrapper | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index b073839c..3dc7ffcb 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -10,7 +10,7 @@ SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" # Semaphore database env config SEMAPHORE_DB_DIALECT="${SEMAPHORE_DB_DIALECT:-mysql}" SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" -SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-3306}" +SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" SEMAPHORE_DB_USER="${SEMAPHORE_DB_USER:-semaphore}" SEMAPHORE_DB_PASS="${SEMAPHORE_DB_PASS:-semaphore}" @@ -48,6 +48,10 @@ export SEMAPHORE_ACCESS_KEY_ENCRYPTION="${SEMAPHORE_ACCESS_KEY_ENCRYPTION:-cFcXI exit 1 } +if [ -n "${SEMAPHORE_DB_PORT}" ]; then + SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST}:${SEMAPHORE_DB_PORT}" +fi + # wait on db to be up if [ "${SEMAPHORE_DB_DIALECT}" != 'bolt' ]; then @@ -79,7 +83,7 @@ if [ ! -f "${SEMAPHORE_CONFIG_PATH}/config.json" ]; then echoerr "Generating ${SEMAPHORE_TMP_PATH}/config.stdin ..." cat << EOF > "${SEMAPHORE_TMP_PATH}/config.stdin" ${SEMAPHORE_DB_DIALECT_ID} -${SEMAPHORE_DB_HOST}:${SEMAPHORE_DB_PORT} +${SEMAPHORE_DB_HOST} ${SEMAPHORE_DB_USER} ${SEMAPHORE_DB_PASS} ${SEMAPHORE_DB} From 8bb37dc3ccccfeac40558ca442edc26cac49d25d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Wed, 5 Oct 2022 22:40:30 +0500 Subject: [PATCH 17/58] fix(docker): bolt support --- cli/cmd/setup.go | 14 +++----------- deployment/docker/common/semaphore-wrapper | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/cli/cmd/setup.go b/cli/cmd/setup.go index 274da252..ee2ce000 100644 --- a/cli/cmd/setup.go +++ b/cli/cmd/setup.go @@ -27,17 +27,9 @@ var setupCmd = &cobra.Command{ //nolint: gocyclo func doSetup() int { var config *util.ConfigType - for { - config = &util.ConfigType{} - config.GenerateSecrets() - setup.InteractiveSetup(config) - - if setup.AskConfigConfirmation(config) { - break - } - - fmt.Println() - } + config = &util.ConfigType{} + config.GenerateSecrets() + setup.InteractiveSetup(config) configPath := setup.SaveConfig(config) util.Config = config diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 3dc7ffcb..51043910 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -4,12 +4,13 @@ set -e echoerr() { printf "%s\n" "$*" >&2; } -SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" +SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/tmp/semaphore}" SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" # Semaphore database env config SEMAPHORE_DB_DIALECT="${SEMAPHORE_DB_DIALECT:-mysql}" -SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" +SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-127.0.0.1}" +SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/tmp/semaphore/database}" SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" SEMAPHORE_DB_USER="${SEMAPHORE_DB_USER:-semaphore}" @@ -81,12 +82,22 @@ esac # Create a config if it does not exist in the current config path if [ ! -f "${SEMAPHORE_CONFIG_PATH}/config.json" ]; then echoerr "Generating ${SEMAPHORE_TMP_PATH}/config.stdin ..." - cat << EOF > "${SEMAPHORE_TMP_PATH}/config.stdin" + if [ "${SEMAPHORE_DB_DIALECT}" = "bolt" ]; then + cat << EOF > "${SEMAPHORE_TMP_PATH}/config.stdin" +${SEMAPHORE_DB_DIALECT_ID} +${SEMAPHORE_DB_PATH} +EOF + else + cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" ${SEMAPHORE_DB_DIALECT_ID} ${SEMAPHORE_DB_HOST} ${SEMAPHORE_DB_USER} ${SEMAPHORE_DB_PASS} ${SEMAPHORE_DB} +EOF + fi + + cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" ${SEMAPHORE_TMP_PATH} ${SEMAPHORE_WEB_ROOT} no @@ -111,7 +122,6 @@ EOF fi; cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" -yes ${SEMAPHORE_CONFIG_PATH} ${SEMAPHORE_ADMIN} ${SEMAPHORE_ADMIN_EMAIL} From 542742b5f47c4a5f920e0942f21c30ffa9e90705 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 11:41:24 +0500 Subject: [PATCH 18/58] fix(docker): boltdb support --- README.md | 1 - deployment/docker/common/README.md | 8 ++++++++ deployment/docker/common/semaphore-wrapper | 22 ++++++++++++++-------- 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 deployment/docker/common/README.md diff --git a/README.md b/README.md index 41ed1d70..0ba0e419 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Ansible Semaphore -[![Circle CI](https://circleci.com/gh/ansible-semaphore/semaphore.svg?style=svg&circle-token=3702872acf2bec629017fa7dd99fdbea56aef7df)](https://circleci.com/gh/ansible-semaphore/semaphore) [![Twitter](https://img.shields.io/twitter/follow/AnsibleSem?style=social&logo=twitter)](https://twitter.com/AnsibleSem) [![Snap](https://img.shields.io/badge/snap-semaphore-005c63)](https://snapcraft.io/semaphore) [![StackShare](https://img.shields.io/badge/tech-stack-008ff9)](https://stackshare.io/ansible-semaphore) diff --git a/deployment/docker/common/README.md b/deployment/docker/common/README.md new file mode 100644 index 00000000..037ffd50 --- /dev/null +++ b/deployment/docker/common/README.md @@ -0,0 +1,8 @@ +# How to test semaphore-wrapper + +```bash +SEMAPHORE_DB_DIALECT=bolt \ +SEMAPHORE_CONFIG_PATH=/tmp/semaphore +SEMAPHORE_DB_HOST=/tmp/semaphore \ +./semaphore-wrapper ../../../bin/semaphore server --config /tmp/semaphore/config.json +``` diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 51043910..9bc0c716 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -4,13 +4,13 @@ set -e echoerr() { printf "%s\n" "$*" >&2; } -SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/tmp/semaphore}" +SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" # Semaphore database env config SEMAPHORE_DB_DIALECT="${SEMAPHORE_DB_DIALECT:-mysql}" -SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-127.0.0.1}" -SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/tmp/semaphore/database}" +SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" +SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/var/local/semaphore}" SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" SEMAPHORE_DB_USER="${SEMAPHORE_DB_USER:-semaphore}" @@ -38,12 +38,16 @@ SEMAPHORE_LDAP_MAPPING_EMAIL="${SEMAPHORE_LDAP_MAPPING_EMAIL:-mail}" export SEMAPHORE_ACCESS_KEY_ENCRYPTION="${SEMAPHORE_ACCESS_KEY_ENCRYPTION:-cFcXI5qHzCDqtS4xCnblOACuNu5AmKHkvxK7abwR8Eg=}" -# create semaphore temporary directory if non existent [ -d "${SEMAPHORE_TMP_PATH}" ] || mkdir -p "${SEMAPHORE_TMP_PATH}" || { echo "Can't create Semaphore tmp path ${SEMAPHORE_TMP_PATH}." exit 1 } -# create semaphore config directory if non existent + +[ -d "${SEMAPHORE_DB_PATH}" ] || mkdir -p "${SEMAPHORE_DB_PATH}" || { + echo "Can't create BoltDB path ${SEMAPHORE_DB_PATH}." + exit 1 +} + [ -d "${SEMAPHORE_CONFIG_PATH}" ] || mkdir -p "${SEMAPHORE_CONFIG_PATH}" || { echo "Can't create Semaphore Config path ${SEMAPHORE_CONFIG_PATH}." exit 1 @@ -82,14 +86,16 @@ esac # Create a config if it does not exist in the current config path if [ ! -f "${SEMAPHORE_CONFIG_PATH}/config.json" ]; then echoerr "Generating ${SEMAPHORE_TMP_PATH}/config.stdin ..." - if [ "${SEMAPHORE_DB_DIALECT}" = "bolt" ]; then - cat << EOF > "${SEMAPHORE_TMP_PATH}/config.stdin" + cat << EOF > "${SEMAPHORE_TMP_PATH}/config.stdin" ${SEMAPHORE_DB_DIALECT_ID} +EOF + + if [ "${SEMAPHORE_DB_DIALECT}" = "bolt" ]; then + cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" ${SEMAPHORE_DB_PATH} EOF else cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" -${SEMAPHORE_DB_DIALECT_ID} ${SEMAPHORE_DB_HOST} ${SEMAPHORE_DB_USER} ${SEMAPHORE_DB_PASS} From 1852ae627ea476f3c30c31789edfd257cbc95a0b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 12:09:39 +0500 Subject: [PATCH 19/58] fix(docker): data directory --- deployment/docker/common/semaphore-wrapper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 9bc0c716..df53e785 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -10,7 +10,7 @@ SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" # Semaphore database env config SEMAPHORE_DB_DIALECT="${SEMAPHORE_DB_DIALECT:-mysql}" SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" -SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/var/local/semaphore}" +SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/var/lib/semaphore}" SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" SEMAPHORE_DB_USER="${SEMAPHORE_DB_USER:-semaphore}" From a881f3f5a3d63a9fb2a5cc22c529e1aa0459be89 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 12:35:31 +0500 Subject: [PATCH 20/58] fix(docker): create /var/lib/semaphore dir --- deployment/docker/ci/Dockerfile | 2 + deployment/docker/ci/Singularity | 54 ---------------------- deployment/docker/ci/bin/build.sh | 29 ------------ deployment/docker/common/semaphore-wrapper | 8 ++-- deployment/docker/dev/Dockerfile | 2 + deployment/docker/prod/Dockerfile | 4 +- 6 files changed, 11 insertions(+), 88 deletions(-) delete mode 100644 deployment/docker/ci/Singularity delete mode 100755 deployment/docker/ci/bin/build.sh diff --git a/deployment/docker/ci/Dockerfile b/deployment/docker/ci/Dockerfile index d84b2ffd..cc751926 100644 --- a/deployment/docker/ci/Dockerfile +++ b/deployment/docker/ci/Dockerfile @@ -17,9 +17,11 @@ RUN adduser -D -u 1002 -g 0 semaphore && \ mkdir -p /go/src/github.com/ansible-semaphore/semaphore && \ mkdir -p /tmp/semaphore && \ mkdir -p /etc/semaphore && \ + mkdir -p /var/lib/semaphore && \ chown -R semaphore:0 /go && \ chown -R semaphore:0 /tmp/semaphore && \ chown -R semaphore:0 /etc/semaphore && \ + chown -R semaphore:0 /var/lib/semaphore && \ ssh-keygen -t rsa -q -f "/root/.ssh/id_rsa" -N "" && \ ssh-keyscan -H github.com > /root/.ssh/known_hosts diff --git a/deployment/docker/ci/Singularity b/deployment/docker/ci/Singularity deleted file mode 100644 index 87fe09cc..00000000 --- a/deployment/docker/ci/Singularity +++ /dev/null @@ -1,54 +0,0 @@ -Bootstrap: docker -From: golang:1.18.3-alpine3.16 -Stage: spython-base - -%setup -mkdir $SINGULARITY_ROOTFS/bigdata - -%post -SEMAPHORE_VERSION="development" -SEMAPHORE_ARCH="linux_amd64" -SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" -APP_ROOT="/mnt/" - -# hadolint ignore=DL3013 -apk add --no-cache sshpass git mysql-client python3 py3-pip py-openssl openssl ca-certificates curl curl-dev openssh-client-default tini nodejs npm bash rsync && \ -apk --update add --virtual build-dependencies python3-dev libffi-dev openssl-dev build-base &&\ -rm -rf /var/cache/apk/* - -pip3 install --upgrade pip cffi && \ -pip3 install ansible &&\ -apk del build-dependencies - -adduser -D -u 1002 -g 0 semaphore && \ -mkdir -p $APP_ROOT && \ -mkdir -p /tmp/semaphore && \ -mkdir -p /etc/semaphore && \ -chown -R semaphore:0 /go && \ -chown -R semaphore:0 /tmp/semaphore && \ -chown -R semaphore:0 /etc/semaphore && \ -ssh-keygen -t rsa -q -f "/root/.ssh/id_rsa" -N "" && \ -ssh-keyscan -H github.com > /root/.ssh/known_hosts - -cd $(go env GOPATH) && curl -sL https://taskfile.dev/install.sh | sh - -# Copy in app source -cd ${APP_ROOT} -./deployment/docker/ci/bin/install - -su - semaphore # USER semaphore -# EXPOSE 3000 - -%environment -export SEMAPHORE_VERSION="development" -export SEMAPHORE_ARCH="linux_amd64" -export SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" -export APP_ROOT="/mnt/" - -%runscript -cd ${APP_ROOT} -exec /usr/local/bin/semaphore-wrapper ./bin/semaphore server --config /etc/semaphore/config.json "$@" - -%startscript -cd ${APP_ROOT} -exec /usr/local/bin/semaphore-wrapper ./bin/semaphore server --config /etc/semaphore/config.json "$@" diff --git a/deployment/docker/ci/bin/build.sh b/deployment/docker/ci/bin/build.sh deleted file mode 100755 index aa0bb4d8..00000000 --- a/deployment/docker/ci/bin/build.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -l - -# Set env -SUSER=$USER -SCRIPT_HOME=$(realpath $(dirname $0)) -SEMAPHORE_HOME=$(realpath $SCRIPT_HOME/../../../../) -echo "Building in $SEMAPHORE_HOME" - -if [[ ! -f $SCRIPT_HOME/../semaphore.simg ]]; then - # Build Image - sudo bash -lc " - # Set env - module purge - module load singularity || echo 'Not using modules' - export SINGULARITY_BIND=${SEMAPHORE_HOME}:/mnt - - # Build image - cd $SCRIPT_HOME/../ && singularity build semaphore.simg Singularity - - # Update perms - chmod -R ${SUSER}: $SEMAPHORE_HOME" -else - # Build RPM - module load singularity || echo 'Not using modules' - cd ${SEMAPHORE_HOME} && singularity exec $SCRIPT_HOME/../semaphore.simg task release - chmod a+rx ${SEMAPHORE_HOME}/bin - chmod a+r ${SEMAPHORE_HOME}/bin/* -fi - diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index df53e785..6b9ae618 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -43,13 +43,13 @@ export SEMAPHORE_ACCESS_KEY_ENCRYPTION="${SEMAPHORE_ACCESS_KEY_ENCRYPTION:-cFcXI exit 1 } -[ -d "${SEMAPHORE_DB_PATH}" ] || mkdir -p "${SEMAPHORE_DB_PATH}" || { - echo "Can't create BoltDB path ${SEMAPHORE_DB_PATH}." +[ -d "${SEMAPHORE_CONFIG_PATH}" ] || mkdir -p "${SEMAPHORE_CONFIG_PATH}" || { + echo "Can't create Semaphore Config path ${SEMAPHORE_CONFIG_PATH}." exit 1 } -[ -d "${SEMAPHORE_CONFIG_PATH}" ] || mkdir -p "${SEMAPHORE_CONFIG_PATH}" || { - echo "Can't create Semaphore Config path ${SEMAPHORE_CONFIG_PATH}." +[ -d "${SEMAPHORE_DB_PATH}" ] || mkdir -p "${SEMAPHORE_DB_PATH}" || { + echo "Can't create data path ${SEMAPHORE_DB_PATH}." exit 1 } diff --git a/deployment/docker/dev/Dockerfile b/deployment/docker/dev/Dockerfile index bb485715..4a3d5bef 100644 --- a/deployment/docker/dev/Dockerfile +++ b/deployment/docker/dev/Dockerfile @@ -17,9 +17,11 @@ RUN adduser -D -u 1002 -g 0 semaphore && \ mkdir -p /go/src/github.com/ansible-semaphore/semaphore && \ mkdir -p /tmp/semaphore && \ mkdir -p /etc/semaphore && \ + mkdir -p /var/lib/semaphore && \ chown -R semaphore:0 /go && \ chown -R semaphore:0 /tmp/semaphore && \ chown -R semaphore:0 /etc/semaphore && \ + chown -R semaphore:0 /var/lib/semaphore && \ ssh-keygen -t rsa -q -f "/root/.ssh/id_rsa" -N "" && \ ssh-keyscan -H github.com > /root/.ssh/known_hosts diff --git a/deployment/docker/prod/Dockerfile b/deployment/docker/prod/Dockerfile index 1873ac04..37e7210c 100644 --- a/deployment/docker/prod/Dockerfile +++ b/deployment/docker/prod/Dockerfile @@ -17,8 +17,10 @@ RUN apk add --no-cache sshpass git curl ansible mysql-client openssh-client-defa adduser -D -u 1001 -G root semaphore && \ mkdir -p /tmp/semaphore && \ mkdir -p /etc/semaphore && \ + mkdir -p /var/lib/semaphore && \ chown -R semaphore:0 /tmp/semaphore && \ - chown -R semaphore:0 /etc/semaphore + chown -R semaphore:0 /etc/semaphore && \ + chown -R semaphore:0 /var/lib/semaphore COPY --from=builder /usr/local/bin/semaphore-wrapper /usr/local/bin/ COPY --from=builder /usr/local/bin/semaphore /usr/local/bin/ From 5b642889c5f1716361af50774b394220870fc98b Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 13:19:26 +0500 Subject: [PATCH 21/58] fix(docker): boltdb path --- deployment/docker/common/semaphore-wrapper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 6b9ae618..113d880a 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -92,7 +92,7 @@ EOF if [ "${SEMAPHORE_DB_DIALECT}" = "bolt" ]; then cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" -${SEMAPHORE_DB_PATH} +${SEMAPHORE_DB_PATH}/database.boltdb EOF else cat << EOF >> "${SEMAPHORE_TMP_PATH}/config.stdin" From 4c0e9184e6b43d97696cc72ee31aa3afe2215a76 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 14:03:09 +0500 Subject: [PATCH 22/58] chore(docker): remove unused vars --- deployment/docker/ci/docker-compose.yml | 1 - deployment/docker/dev/docker-compose.yml | 1 - deployment/docker/prod/docker-compose.yml | 1 - deployment/openshift/README.md | 27 ---- deployment/openshift/template.yml | 166 ---------------------- 5 files changed, 196 deletions(-) delete mode 100644 deployment/openshift/README.md delete mode 100644 deployment/openshift/template.yml diff --git a/deployment/docker/ci/docker-compose.yml b/deployment/docker/ci/docker-compose.yml index d2bc6fcc..1eb9290e 100644 --- a/deployment/docker/ci/docker-compose.yml +++ b/deployment/docker/ci/docker-compose.yml @@ -26,7 +26,6 @@ services: SEMAPHORE_DB_HOST: mysql SEMAPHORE_DB_PORT: 3306 SEMAPHORE_DB: semaphore - SEMAPHORE_PLAYBOOK_PATH: /etc/semaphore SEMAPHORE_ADMIN_PASSWORD: password SEMAPHORE_ADMIN_NAME: "Developer" SEMAPHORE_ADMIN_EMAIL: admin@localhost diff --git a/deployment/docker/dev/docker-compose.yml b/deployment/docker/dev/docker-compose.yml index 791378b0..921668d4 100644 --- a/deployment/docker/dev/docker-compose.yml +++ b/deployment/docker/dev/docker-compose.yml @@ -28,7 +28,6 @@ services: SEMAPHORE_DB_HOST: mysql SEMAPHORE_DB_PORT: 3306 SEMAPHORE_DB: semaphore - SEMAPHORE_PLAYBOOK_PATH: /etc/semaphore SEMAPHORE_ADMIN_PASSWORD: password SEMAPHORE_ADMIN_NAME: "Developer" SEMAPHORE_ADMIN_EMAIL: admin@localhost diff --git a/deployment/docker/prod/docker-compose.yml b/deployment/docker/prod/docker-compose.yml index 080aa68d..b552da05 100644 --- a/deployment/docker/prod/docker-compose.yml +++ b/deployment/docker/prod/docker-compose.yml @@ -24,7 +24,6 @@ services: SEMAPHORE_DB_HOST: mysql SEMAPHORE_DB_PORT: 3306 SEMAPHORE_DB: semaphore - SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ SEMAPHORE_ADMIN_PASSWORD: cangetin SEMAPHORE_ADMIN_NAME: admin SEMAPHORE_ADMIN_EMAIL: admin@localhost diff --git a/deployment/openshift/README.md b/deployment/openshift/README.md deleted file mode 100644 index 3376ca53..00000000 --- a/deployment/openshift/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Deploying Semaphore on Openshift - -This is intended as a quick starter config to get semaphore up and running using only the docker hub image.The image is set to be periodically pulled from the repository source. - -## Setup - -Your openshift cluster needs to have the mysql-persistent template installed, however it comes by default. -``` -# oc cluster up -oc new-project semaphore -oc create -fdeployment/openshift/template.yml -oc new-app mysql-persistent -p MYSQL_DATABASE=semaphore -oc new-app semaphore # -p SEMAPHORE_IMAGE_TAG=develop -``` - -It will take some moments for the application to become available (mainly due to the mysql pod startup time), check the logs of the semaphore container to see when it is ready. After this the web ui will be available on http://semaphore-semaphore.127.0.0.1.nip.io/auth/login (if running your oc cluster locally and you did not override the url via parameters). You can log in with the default values. -If you deploy the template to multiple namespaces you must set the SEMAPHORE_URL to a unique value or it will be rejected by the router. - -## Parameters - -`oc process --parameters semaphore` - -|NAME| DESCRIPTION| VALUE| -|SEMAPHORE_IMAGE_SOURCE| The id of the repository from which to pull the semaphore image| docker.io/semaphoreui/semaphore| -|SEMAPHORE_IMAGE_TAG| The tag to use for the semaphore repository| latest| -|SEMAPHORE_DATA_VOLUME_SIZE| The size, in Gi of the semaphore data volume, which is mounted at /etc/semaphore| 5| -|SEMAPHORE_URL| Set this to the value which you wish to be passed to the route. Default value works for local development usage| semaphore-semaphore.127.0.0.1.nip.io| diff --git a/deployment/openshift/template.yml b/deployment/openshift/template.yml deleted file mode 100644 index 269d0244..00000000 --- a/deployment/openshift/template.yml +++ /dev/null @@ -1,166 +0,0 @@ -apiVersion: v1 -kind: Template -metadata: - name: semaphore -objects: -- apiVersion: v1 - kind: ImageStream - metadata: - name: semaphore - labels: - app: semaphore - spec: - tags: - - name: latest - from: - kind: DockerImage - name: "${SEMAPHORE_IMAGE_SOURCE}:${SEMAPHORE_IMAGE_TAG}" - importPolicy: - scheduled: true -- apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: semaphore-data - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: "${SEMAPHORE_DATA_VOLUME_SIZE}Gi" - status: {} -- apiVersion: v1 - kind: DeploymentConfig - metadata: - labels: - app: semaphore - name: semaphore - spec: - replicas: 1 - selector: - app: semaphore - deploymentconfig: semaphore - strategy: - activeDeadlineSeconds: 21600 - resources: {} - rollingParams: - intervalSeconds: 1 - maxSurge: 25% - maxUnavailable: 25% - timeoutSeconds: 600 - updatePeriodSeconds: 1 - type: Rolling - template: - metadata: - labels: - app: semaphore - deploymentconfig: semaphore - spec: - containers: - - env: - - name: SEMAPHORE_DB_HOST - value: mysql - - name: SEMAPHORE_DB - value: semaphore - - name: SEMAPHORE_DB_PASS - valueFrom: - secretKeyRef: - key: database-password - name: mysql - - name: SEMAPHORE_DB_USER - valueFrom: - secretKeyRef: - key: database-user - name: mysql - - name: SEMAPHORE_PLAYBOOK_PATH - value: /tmp/semaphore - imagePullPolicy: Always - name: semaphore - ports: - - containerPort: 3000 - protocol: TCP - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /etc/semaphore - name: semaphore-etc - subPath: etc - - mountPath: /tmp - name: tmp - dnsPolicy: ClusterFirst - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - terminationGracePeriodSeconds: 30 - volumes: - - name: semaphore-etc - persistentVolumeClaim: - claimName: semaphore-data - - name: tmp - emptyDir: - test: false - triggers: - - type: ConfigChange - - imageChangeParams: - automatic: true - containerNames: - - semaphore - from: - kind: ImageStreamTag - name: semaphore:latest - type: ImageChange -- apiVersion: v1 - kind: Route - metadata: - name: semaphore - spec: - host: "${SEMAPHORE_URL}" - port: - targetPort: 3000-tcp - to: - kind: Service - name: semaphore - weight: 100 - wildcardPolicy: None -- apiVersion: v1 - kind: Service - metadata: - labels: - app: semaphore - name: semaphore - spec: - ports: - - name: 3000-tcp - port: 3000 - protocol: TCP - targetPort: 3000 - selector: - app: semaphore - deploymentconfig: semaphore - sessionAffinity: None - type: ClusterIP - status: - loadBalancer: {} - - -parameters: - - name: SEMAPHORE_IMAGE_SOURCE - displayName: Semaphore image - description: The id of the repository from which to pull the semaphore image - value: docker.io/semaphoreui/semaphore - required: true - - name: SEMAPHORE_IMAGE_TAG - displayName: Semaphore image - description: The tag to use for the semaphore repository - value: latest - required: true - - name: SEMAPHORE_DATA_VOLUME_SIZE - displayName: Semaphore data volume size - description: The size, in Gi of the semaphore data volume, which is mounted at /etc/semaphore - value: "5" - required: true - - name: SEMAPHORE_URL - displayName: URL - description: Set this to the value which you wish to be passed to the route. If blank will use generated url - required: false - From e4cc80712d305e7b7553f73236126c2e924b58c6 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 14:19:33 +0500 Subject: [PATCH 23/58] fix(fe): Trim survey variable names https://github.com/ansible-semaphore/semaphore/issues/1019 --- web2/src/components/SurveyVars.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web2/src/components/SurveyVars.vue b/web2/src/components/SurveyVars.vue index 7b975927..462de4f3 100644 --- a/web2/src/components/SurveyVars.vue +++ b/web2/src/components/SurveyVars.vue @@ -11,7 +11,7 @@ Date: Thu, 6 Oct 2022 14:28:39 +0500 Subject: [PATCH 24/58] Update README.md --- README.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0ba0e419..a542f2c1 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,9 @@ https://docs.ansible-semaphore.com/administration-guide/installation ### Snap -``` -sudo snap stop semaphore +```bash +sudo snap install semaphore +sudo snap stop semaphore # BoltDB limitation, it allows only one connection sudo semaphore user add --admin --name "Your Name" --login your_login --email your-email@examaple.com --password your_password sudo snap start semaphore ``` @@ -55,10 +56,21 @@ sudo snap start semaphore ### Docker +`docker-compose.yml` for minimal configuration: + +```yaml +services: + semaphore: + ports: + - 3000:3000 + image: semaphoreui/semaphore:latest + environment: + SEMAPHORE_DB_DIALECT: bolt + SEMAPHORE_ADMIN_PASSWORD: changeme + SEMAPHORE_ADMIN_NAME: admin + SEMAPHORE_ADMIN_EMAIL: admin@localhost + SEMAPHORE_ADMIN: admin ``` -docker pull semaphoreui/semaphore -``` -https://hub.docker.com/r/semaphoreui/semaphore ## Demo From a89447171403c424759346c2d2a15bb73a4a271f Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 14:30:27 +0500 Subject: [PATCH 25/58] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a542f2c1..06f2df31 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ services: SEMAPHORE_ADMIN_EMAIL: admin@localhost SEMAPHORE_ADMIN: admin ``` +https://hub.docker.com/r/semaphoreui/semaphore ## Demo From bc2ea65b006ba0ce6a76130c43f190c27996ced6 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 6 Oct 2022 16:19:42 +0500 Subject: [PATCH 26/58] docs: task environment format --- api-docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/api-docs.yml b/api-docs.yml index 9df7dd81..7f002bd7 100644 --- a/api-docs.yml +++ b/api-docs.yml @@ -300,6 +300,7 @@ definitions: type: string environment: type: string + format: json limit: type: string TaskOutput: From 51ec43a2ee81bab445befc50a63c358a2bc4db8c Mon Sep 17 00:00:00 2001 From: bverkron Date: Thu, 6 Oct 2022 15:55:07 -0700 Subject: [PATCH 27/58] Update README.md Add `volumes` section to docker compose example to avoid data loss. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 06f2df31..bea05406 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ services: SEMAPHORE_ADMIN_NAME: admin SEMAPHORE_ADMIN_EMAIL: admin@localhost SEMAPHORE_ADMIN: admin + volumes: + - /path/to/data/home:/etc/semaphore # config.json location + - /path/to/data/lib:/var/lib/semaphore # database.boltdb location (Not required if using mysql or postgres) ``` https://hub.docker.com/r/semaphoreui/semaphore From 8be6e82976365f59f8ee9c2e5e4d0c1abb133958 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 9 Oct 2022 11:22:09 +0500 Subject: [PATCH 28/58] Create FUNDING.yml --- .github/FUNDING.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..5d37b9ff --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: fiftin +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] From eb6ac7eba52d8d99f2770bf87c6b917a7cad4ef9 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 9 Oct 2022 16:21:13 +0500 Subject: [PATCH 29/58] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bea05406..39fd1faf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Ansible Semaphore [![Twitter](https://img.shields.io/twitter/follow/AnsibleSem?style=social&logo=twitter)](https://twitter.com/AnsibleSem) -[![Snap](https://img.shields.io/badge/snap-semaphore-005c63)](https://snapcraft.io/semaphore) +[![semaphore](https://snapcraft.io/semaphore/badge.svg)](https://snapcraft.io/semaphore) [![StackShare](https://img.shields.io/badge/tech-stack-008ff9)](https://stackshare.io/ansible-semaphore) [![Join the chat at https://gitter.im/AnsibleSemaphore/semaphore](https://img.shields.io/gitter/room/AnsibleSemaphore/semaphore?logo=gitter)](https://gitter.im/AnsibleSemaphore/semaphore?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 8cc5b67262af2b0383f95756edb8b1d67840a8e4 Mon Sep 17 00:00:00 2001 From: vaerh <64400271+vaerh@users.noreply.github.com> Date: Fri, 14 Oct 2022 14:46:50 +0300 Subject: [PATCH 30/58] Update semaphore-wrapper Using docker secrets to pass sensitive information via "_FILE" variables. --- deployment/docker/common/semaphore-wrapper | 32 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/deployment/docker/common/semaphore-wrapper b/deployment/docker/common/semaphore-wrapper index 113d880a..016b43a9 100755 --- a/deployment/docker/common/semaphore-wrapper +++ b/deployment/docker/common/semaphore-wrapper @@ -4,6 +4,26 @@ set -e echoerr() { printf "%s\n" "$*" >&2; } +file_env() { + local var="" + local fileVar="" + eval var="\$${1}" + eval fileVar="\$${1}_FILE" + local def="${2:-}" + if [ -n "${var:-}" ] && [ -n "${fileVar:-}" ]; then + echo >&2 "error: both ${1} and ${1}_FILE are set (but are exclusive)" + exit 1 + fi + local val="$def" + if [ -n "${var:-}" ]; then + val="${var}" + elif [ -n "${fileVar:-}" ]; then + val="$(cat "${fileVar}")" + fi + export "${1}"="$val" + unset "${1}_FILE" +} + SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" SEMAPHORE_TMP_PATH="${SEMAPHORE_TMP_PATH:-/tmp/semaphore}" @@ -13,22 +33,22 @@ SEMAPHORE_DB_HOST="${SEMAPHORE_DB_HOST:-0.0.0.0}" SEMAPHORE_DB_PATH="${SEMAPHORE_DB_PATH:-/var/lib/semaphore}" SEMAPHORE_DB_PORT="${SEMAPHORE_DB_PORT:-}" SEMAPHORE_DB="${SEMAPHORE_DB:-semaphore}" -SEMAPHORE_DB_USER="${SEMAPHORE_DB_USER:-semaphore}" -SEMAPHORE_DB_PASS="${SEMAPHORE_DB_PASS:-semaphore}" +file_env 'SEMAPHORE_DB_USER' 'semaphore' +file_env 'SEMAPHORE_DB_PASS' 'semaphore' # Email alert env config SEMAPHORE_WEB_ROOT="${SEMAPHORE_WEB_ROOT:-}" # Semaphore Admin env config -SEMAPHORE_ADMIN="${SEMAPHORE_ADMIN:-admin}" +file_env 'SEMAPHORE_ADMIN' 'admin' SEMAPHORE_ADMIN_EMAIL="${SEMAPHORE_ADMIN_EMAIL:-admin@localhost}" SEMAPHORE_ADMIN_NAME="${SEMAPHORE_ADMIN_NAME:-Semaphore Admin}" -SEMAPHORE_ADMIN_PASSWORD="${SEMAPHORE_ADMIN_PASSWORD:-semaphorepassword}" +file_env 'SEMAPHORE_ADMIN_PASSWORD' 'semaphorepassword' #Semaphore LDAP env config SEMAPHORE_LDAP_ACTIVATED="${SEMAPHORE_LDAP_ACTIVATED:-no}" SEMAPHORE_LDAP_HOST="${SEMAPHORE_LDAP_HOST:-}" SEMAPHORE_LDAP_PORT="${SEMAPHORE_LDAP_PORT:-}" SEMAPHORE_LDAP_NEEDTLS="${SEMAPHORE_LDAP_NEEDTLS:-no}" SEMAPHORE_LDAP_DN_BIND="${SEMAPHORE_LDAP_DN_BIND:-}" -SEMAPHORE_LDAP_PASSWORD="${SEMAPHORE_LDAP_PASSWORD:-}" +file_env 'SEMAPHORE_LDAP_PASSWORD' SEMAPHORE_LDAP_DN_SEARCH="${SEMAPHORE_LDAP_DN_SEARCH:-}" SEMAPHORE_LDAP_SEARCH_FILTER="${SEMAPHORE_LDAP_SEARCH_FILTER:-(uid=%s)}" SEMAPHORE_LDAP_MAPPING_DN="${SEMAPHORE_LDAP_MAPPING_DN:-dn}" @@ -36,7 +56,7 @@ SEMAPHORE_LDAP_MAPPING_USERNAME="${SEMAPHORE_LDAP_MAPPING_USERNAME:-uid}" SEMAPHORE_LDAP_MAPPING_FULLNAME="${SEMAPHORE_LDAP_MAPPING_FULLNAME:-cn}" SEMAPHORE_LDAP_MAPPING_EMAIL="${SEMAPHORE_LDAP_MAPPING_EMAIL:-mail}" -export SEMAPHORE_ACCESS_KEY_ENCRYPTION="${SEMAPHORE_ACCESS_KEY_ENCRYPTION:-cFcXI5qHzCDqtS4xCnblOACuNu5AmKHkvxK7abwR8Eg=}" +file_env 'SEMAPHORE_ACCESS_KEY_ENCRYPTION' 'cFcXI5qHzCDqtS4xCnblOACuNu5AmKHkvxK7abwR8Eg=' [ -d "${SEMAPHORE_TMP_PATH}" ] || mkdir -p "${SEMAPHORE_TMP_PATH}" || { echo "Can't create Semaphore tmp path ${SEMAPHORE_TMP_PATH}." From 1923eb751f27967c4c600860b1949254e269afdf Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 16 Oct 2022 23:30:26 +0500 Subject: [PATCH 31/58] fix(be): use correct collections path --- services/tasks/runner.go | 16 +++++++++++++-- services/tasks/runner_test.go | 37 ++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/services/tasks/runner.go b/services/tasks/runner.go index 698ee941..78ddde58 100644 --- a/services/tasks/runner.go +++ b/services/tasks/runner.go @@ -4,14 +4,16 @@ import ( "crypto/md5" "encoding/json" "fmt" - "github.com/ansible-semaphore/semaphore/lib" "io" "io/ioutil" "os" + "path" "strconv" "strings" "time" + "github.com/ansible-semaphore/semaphore/lib" + log "github.com/Sirupsen/logrus" "github.com/ansible-semaphore/semaphore/api/sockets" "github.com/ansible-semaphore/semaphore/db" @@ -47,6 +49,16 @@ func getMD5Hash(filepath string) (string, error) { return fmt.Sprintf("%x", hash.Sum(nil)), nil } +func (t *TaskRunner) getPlaybookDir() string { + if strings.HasPrefix(t.task.Playbook, "/") { + return t.task.Playbook + } + + playbookPath := path.Join(t.getRepoPath(), t.task.Playbook) + + return path.Dir(playbookPath) +} + func (t *TaskRunner) getRepoPath() string { repo := lib.GitRepository{ Logger: t, @@ -479,7 +491,7 @@ func (t *TaskRunner) updateRepository() error { } func (t *TaskRunner) installCollectionsRequirements() error { - requirementsFilePath := fmt.Sprintf("%s/collections/requirements.yml", t.getRepoPath()) + requirementsFilePath := path.Join(t.getPlaybookDir(), "collections", "requirements.yml") requirementsHashFilePath := fmt.Sprintf("%s.md5", requirementsFilePath) if _, err := os.Stat(requirementsFilePath); err != nil { diff --git a/services/tasks/runner_test.go b/services/tasks/runner_test.go index a07741ec..92542da7 100644 --- a/services/tasks/runner_test.go +++ b/services/tasks/runner_test.go @@ -1,9 +1,6 @@ package tasks import ( - "github.com/ansible-semaphore/semaphore/db" - "github.com/ansible-semaphore/semaphore/db/bolt" - "github.com/ansible-semaphore/semaphore/util" "math/rand" "os" "path" @@ -11,8 +8,42 @@ import ( "strings" "testing" "time" + + "github.com/ansible-semaphore/semaphore/db" + "github.com/ansible-semaphore/semaphore/db/bolt" + "github.com/ansible-semaphore/semaphore/util" ) +func TestGetRepoPath(t *testing.T) { + util.Config = &util.ConfigType{ + TmpPath: "/tmp", + } + + inventoryID := 1 + + tsk := TaskRunner{ + task: db.Task{ + Playbook: "deploy/test.yml", + }, + inventory: db.Inventory{ + SSHKeyID: &inventoryID, + SSHKey: db.AccessKey{ + ID: 12345, + Type: db.AccessKeySSH, + }, + Type: db.InventoryStatic, + }, + template: db.Template{ + Playbook: "deploy/test.yml", + }, + } + + dir := tsk.getPlaybookDir() + if dir != "/tmp/repository_0_0/deploy" { + t.Fatal("Invalid playbook dir: " + dir) + } +} + func TestPopulateDetails(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UTC().UnixNano())) fn := "/tmp/test_semaphore_db_" + strconv.Itoa(r.Int()) From 04015981004e257f9e7692d5a63535f5def7fc20 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Tue, 18 Oct 2022 16:49:03 +0500 Subject: [PATCH 32/58] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 5d37b9ff..481e3354 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -2,7 +2,7 @@ github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username +open_collective: semaphore ko_fi: fiftin tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry From e256fb4dea6dc30d57301a375a96c5ae01e75c17 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 22 Oct 2022 00:25:19 +0500 Subject: [PATCH 33/58] fix(fe): cleanable cron --- go.mod | 2 +- go.sum | 2 ++ web2/src/components/TemplateForm.vue | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 9da33b6b..22dbfc09 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/go-sql-driver/mysql v1.4.1 github.com/gobuffalo/packr v1.10.4 github.com/google/go-github v17.0.0+incompatible - github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f + github.com/gorilla/context v1.1.1 github.com/gorilla/handlers v1.4.2 github.com/gorilla/mux v1.7.3 github.com/gorilla/securecookie v1.1.1 diff --git a/go.sum b/go.sum index 4dcd21ef..aed13796 100644 --- a/go.sum +++ b/go.sum @@ -157,6 +157,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f h1:9oNbS1z4rVpbnkHBdPZU4jo9bSmrLpII768arSyMFgk= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= diff --git a/web2/src/components/TemplateForm.vue b/web2/src/components/TemplateForm.vue index 536f2191..dc833d7f 100644 --- a/web2/src/components/TemplateForm.vue +++ b/web2/src/components/TemplateForm.vue @@ -212,6 +212,7 @@ :items="repositories" item-value="id" item-text="name" + clearable :disabled="formSaving" > From 1ce64c4ce5225cc1bc9dc35eacf2b4fef6847cbd Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 22 Oct 2022 00:30:33 +0500 Subject: [PATCH 34/58] docs: remove task env format --- api-docs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/api-docs.yml b/api-docs.yml index 7f002bd7..9df7dd81 100644 --- a/api-docs.yml +++ b/api-docs.yml @@ -300,7 +300,6 @@ definitions: type: string environment: type: string - format: json limit: type: string TaskOutput: From aa46a392d78b22ff10a6ec918a8444be33f5612d Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 22 Oct 2022 01:47:43 +0500 Subject: [PATCH 35/58] fix(be): adding user to project team for BoltDB --- db/bolt/BoltDb.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/db/bolt/BoltDb.go b/db/bolt/BoltDb.go index 89e9a17f..82fdb29b 100644 --- a/db/bolt/BoltDb.go +++ b/db/bolt/BoltDb.go @@ -442,16 +442,16 @@ func (d *BoltDb) createObject(bucketID int, props db.ObjectProps, object interfa reflect.Uint16, reflect.Uint32, reflect.Uint64: - //if idValue.Int() == 0 { - id, err3 := b.NextSequence() - if err3 != nil { - return err3 + if idValue.Int() == 0 { + id, err3 := b.NextSequence() + if err3 != nil { + return err3 + } + if props.SortInverted { + id = MaxID - id + } + idValue.SetInt(int64(id)) } - if props.SortInverted { - id = MaxID - id - } - idValue.SetInt(int64(id)) - //} objID = intObjectID(idValue.Int()) case reflect.String: From f70572b484afc6ef1af344d0835d5510bc216714 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 22 Oct 2022 01:56:32 +0500 Subject: [PATCH 36/58] fix(be): BoltDB issue with deleted user https://github.com/ansible-semaphore/semaphore/issues/1055 --- db/bolt/task.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/db/bolt/task.go b/db/bolt/task.go index 694f1c9d..08cd064d 100644 --- a/db/bolt/task.go +++ b/db/bolt/task.go @@ -70,10 +70,9 @@ func (d *BoltDb) getTasks(projectID int, templateID *int, params db.RetrieveQuer if task.UserID != nil { usr, ok := users[*task.UserID] if !ok { - usr, err = d.GetUser(*task.UserID) - if err != nil { - return - } + // trying to get user , but ignore error, because + // user can be deleted, and it is ok + usr, _ = d.GetUser(*task.UserID) users[*task.UserID] = usr } tasksWithTpl[i].UserName = &usr.Name From 54ab92b6af9ddb5f276a65ae81d52c7bc97e4d35 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 22 Oct 2022 02:36:05 +0500 Subject: [PATCH 37/58] fix(be): empty event name for deleted task --- db/Event.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/Event.go b/db/Event.go index abdbd07a..f53c6bad 100644 --- a/db/Event.go +++ b/db/Event.go @@ -85,7 +85,8 @@ func getEventObjectName(d Store, evt Event) (string, error) { case EventTask: task, err := d.GetTask(*evt.ProjectID, *evt.ObjectID) if err != nil { - return "", err + // Task can be deleted, it is ok, just return empty string + return "", nil } return task.Playbook, nil default: From edd17647b1e7f822bd76565f06c7edfbb5e373f7 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Oct 2022 14:15:56 +0500 Subject: [PATCH 38/58] ci: update goreleaser version --- Taskfile.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Taskfile.yml b/Taskfile.yml index 61cbff51..d8280cec 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -50,7 +50,7 @@ tasks: desc: Installs tools needed dir: web2 vars: - GORELEASER_VERSION: "0.159.0" + GORELEASER_VERSION: "0.183.0" GOLINTER_VERSION: "1.46.2" cmds: - go install github.com/gobuffalo/packr/...@v1.10.4 From 2297bee2ba0068d3c547224e56381f994c9a23b2 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sun, 23 Oct 2022 14:48:52 +0500 Subject: [PATCH 39/58] ci: support docker buildx --- .github/workflows/dev.yml | 20 ++++++- .github/workflows/release.yml | 73 ++++++++++++++---------- Taskfile.yml | 14 ++++- deployment/docker/dev/buildx.Dockerfile | 47 +++++++++++++++ deployment/docker/prod/Dockerfile | 9 ++- deployment/docker/prod/buildx.Dockerfile | 42 ++++++++++++++ 6 files changed, 170 insertions(+), 35 deletions(-) create mode 100644 deployment/docker/dev/buildx.Dockerfile create mode 100644 deployment/docker/prod/buildx.Dockerfile diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 6309d7a5..18b020c7 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -97,10 +97,24 @@ jobs: - run: context=prod task docker:test - - run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASS }} - - run: context=prod tag=develop task docker:build - - run: tag=develop task docker:push + - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64,linux/arm64 + file: ./deployment/docker/dev/buildx.Dockerfile + push: true + tags: semaphoreui/semaphore:develop diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1f76d27..71e5db69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,31 +5,31 @@ on: - v* jobs: - release: - runs-on: [ubuntu-latest] - steps: - - uses: actions/setup-go@v3 - with: { go-version: 1.18 } - - - uses: actions/setup-node@v3 - with: { node-version: '16' } - - - run: go install github.com/go-task/task/v3/cmd/task@latest - - - run: sudo apt update && sudo apt-get install rpm - - - uses: actions/checkout@v3 - - - run: task deps - - - run: | - echo ${{ secrets.GPG_KEY }} | tr " " "\n" | base64 -d | gpg --import --batch - gpg --sign -u "58A7 CC3D 8A9C A2E5 BB5C 141D 4064 23EA F814 63CA" --pinentry-mode loopback --yes --batch --passphrase "${{ secrets.GPG_PASS }}" --output unlock.sig --detach-sign README.md - rm -f unlock.sig - - - run: git reset --hard - - - run: GITHUB_TOKEN=${{ secrets.GH_TOKEN }} task release:prod +# release: +# runs-on: [ubuntu-latest] +# steps: +# - uses: actions/setup-go@v3 +# with: { go-version: 1.18 } +# +# - uses: actions/setup-node@v3 +# with: { node-version: '16' } +# +# - run: go install github.com/go-task/task/v3/cmd/task@latest +# +# - run: sudo apt update && sudo apt-get install rpm +# +# - uses: actions/checkout@v3 +# +# - run: task deps +# +# - run: | +# echo ${{ secrets.GPG_KEY }} | tr " " "\n" | base64 -d | gpg --import --batch +# gpg --sign -u "58A7 CC3D 8A9C A2E5 BB5C 141D 4064 23EA F814 63CA" --pinentry-mode loopback --yes --batch --passphrase "${{ secrets.GPG_PASS }}" --output unlock.sig --detach-sign README.md +# rm -f unlock.sig +# +# - run: git reset --hard +# +# - run: GITHUB_TOKEN=${{ secrets.GH_TOKEN }} task release:prod deploy-prod: @@ -44,8 +44,21 @@ jobs: - run: context=prod task docker:test - - run: docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASS }} - - run: context=prod tag=latest task docker:build - - run: tag=latest task docker:push - - run: docker tag semaphoreui/semaphore:latest semaphoreui/semaphore:${{ github.ref_name }} - - run: tag=${{ github.ref_name }} task docker:push + - uses: docker/setup-qemu-action@v2 + + - uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64,linux/arm64 + file: ./deployment/docker/prod/buildx.Dockerfile + push: true + tags: semaphoreui/semaphore:latest,semaphoreui/semaphore:${{ github.ref_name }} \ No newline at end of file diff --git a/Taskfile.yml b/Taskfile.yml index d8280cec..8eec220a 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -262,6 +262,18 @@ tasks: tag: "{{ .tag }}" args: -t "{{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}" . + docker:buildx: + desc: Build a multiarch image for Semaphore, requires context + vars: + tag: "{{ if .tag }}{{ .tag }}{{ else }}latest{{ end }}" + cmds: + - task: docker + vars: + context: "{{ .context }}" + action: buildx build + tag: "{{ .tag }}" + args: --platform=linux/amd64,linux/arm64 -t "{{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}" . + deps:docker: desc: Install docker testing dependencies. These must be installed explicitly and are not included in the general deps task. status: @@ -273,7 +285,7 @@ tasks: - sudo chmod +rx /usr/local/bin/goss - sudo curl -L https://raw.githubusercontent.com/aelsabbahy/goss/v0.3.5/extras/dgoss/dgoss -o /usr/local/bin/dgoss - sudo chmod +rx /usr/local/bin/dgoss - - sudo curl -L https://github.com/hadolint/hadolint/releases/download/v1.5.0/hadolint-Linux-x86_64 -o /usr/local/bin/hadolint + - sudo curl -L https://github.com/hadolint/hadolint/releases/download/v2.10.0/hadolint-Linux-x86_64 -o /usr/local/bin/hadolint - sudo chmod +rx /usr/local/bin/hadolint docker:test: diff --git a/deployment/docker/dev/buildx.Dockerfile b/deployment/docker/dev/buildx.Dockerfile new file mode 100644 index 00000000..4506dad5 --- /dev/null +++ b/deployment/docker/dev/buildx.Dockerfile @@ -0,0 +1,47 @@ +ARG BUILDPLATFORM=linux/amd64 + +FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 + +ARG TARGETOS=linux +ARG TARGETARCH=amd64 +ENV GOOS="${TARGETOS}" +ENV GOARCH="${TARGETARCH}" + +ENV SEMAPHORE_VERSION="development" SEMAPHORE_ARCH="${TARGETOS}_${TARGETARCH}" \ + SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" \ + APP_ROOT="/go/src/github.com/ansible-semaphore/semaphore/" + +# hadolint ignore=DL3013 +RUN apk add --no-cache sshpass git mysql-client python3 py3-pip py-openssl openssl ca-certificates curl curl-dev openssh-client-default tini nodejs npm bash rsync && \ + apk --update add --virtual build-dependencies python3-dev libffi-dev openssl-dev build-base &&\ + rm -rf /var/cache/apk/* + +RUN pip3 install --upgrade pip cffi && \ + pip3 install ansible &&\ + apk del build-dependencies + +RUN adduser -D -u 1002 -g 0 semaphore && \ + mkdir -p /go/src/github.com/ansible-semaphore/semaphore && \ + mkdir -p /tmp/semaphore && \ + mkdir -p /etc/semaphore && \ + mkdir -p /var/lib/semaphore && \ + chown -R semaphore:0 /go && \ + chown -R semaphore:0 /tmp/semaphore && \ + chown -R semaphore:0 /etc/semaphore && \ + chown -R semaphore:0 /var/lib/semaphore && \ + ssh-keygen -t rsa -q -f "/root/.ssh/id_rsa" -N "" && \ + ssh-keyscan -H github.com > /root/.ssh/known_hosts + +RUN cd $(go env GOPATH) && curl -sL https://taskfile.dev/install.sh | sh + +RUN git config --global --add safe.directory /go/src/github.com/ansible-semaphore/semaphore + +# Copy in app source +WORKDIR ${APP_ROOT} +COPY . ${APP_ROOT} +RUN deployment/docker/dev/bin/install + +USER semaphore +EXPOSE 3000 +ENTRYPOINT ["/usr/local/bin/semaphore-wrapper"] +CMD ["./bin/semaphore", "server", "--config", "/etc/semaphore/config.json"] diff --git a/deployment/docker/prod/Dockerfile b/deployment/docker/prod/Dockerfile index 37e7210c..39a9d098 100644 --- a/deployment/docker/prod/Dockerfile +++ b/deployment/docker/prod/Dockerfile @@ -1,10 +1,17 @@ +ARG BUILDPLATFORM=linux/amd64 + # ansible-semaphore production image -FROM golang:1.18.3-alpine3.16 as builder +FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 as builder COPY ./ /go/src/github.com/ansible-semaphore/semaphore WORKDIR /go/src/github.com/ansible-semaphore/semaphore +ARG TARGETOS=linux +ARG TARGETARCH=amd64 +ENV GOOS="${TARGETOS}" +ENV GOARCH="${TARGETARCH}" + RUN apk add --no-cache -U libc-dev curl nodejs npm git && \ ./deployment/docker/prod/bin/install diff --git a/deployment/docker/prod/buildx.Dockerfile b/deployment/docker/prod/buildx.Dockerfile new file mode 100644 index 00000000..39a9d098 --- /dev/null +++ b/deployment/docker/prod/buildx.Dockerfile @@ -0,0 +1,42 @@ +ARG BUILDPLATFORM=linux/amd64 + +# ansible-semaphore production image +FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 as builder + + +COPY ./ /go/src/github.com/ansible-semaphore/semaphore +WORKDIR /go/src/github.com/ansible-semaphore/semaphore + +ARG TARGETOS=linux +ARG TARGETARCH=amd64 +ENV GOOS="${TARGETOS}" +ENV GOARCH="${TARGETARCH}" + +RUN apk add --no-cache -U libc-dev curl nodejs npm git && \ + ./deployment/docker/prod/bin/install + +# Uses frolvlad alpine so we have access to glibc which is needed for golang +# and when deploying in openshift +FROM frolvlad/alpine-glibc:alpine-3.16 as runner +LABEL maintainer="Tom Whiston " + +RUN apk add --no-cache sshpass git curl ansible mysql-client openssh-client-default tini py3-aiohttp && \ + adduser -D -u 1001 -G root semaphore && \ + mkdir -p /tmp/semaphore && \ + mkdir -p /etc/semaphore && \ + mkdir -p /var/lib/semaphore && \ + chown -R semaphore:0 /tmp/semaphore && \ + chown -R semaphore:0 /etc/semaphore && \ + chown -R semaphore:0 /var/lib/semaphore + +COPY --from=builder /usr/local/bin/semaphore-wrapper /usr/local/bin/ +COPY --from=builder /usr/local/bin/semaphore /usr/local/bin/ + +RUN chown -R semaphore:0 /usr/local/bin/semaphore-wrapper &&\ + chown -R semaphore:0 /usr/local/bin/semaphore + +WORKDIR /home/semaphore +USER 1001 + +ENTRYPOINT ["/sbin/tini", "--"] +CMD ["/usr/local/bin/semaphore-wrapper", "/usr/local/bin/semaphore", "server", "--config", "/etc/semaphore/config.json"] From dc6666c1e6fdf58bc790648e66ae247d6bfd429f Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Mon, 24 Oct 2022 10:10:11 +0500 Subject: [PATCH 40/58] ci: build docker from arm64 --- .github/workflows/dev.yml | 2 +- .github/workflows/release.yml | 52 ++++++++++++------------ Taskfile.yml | 15 +------ deployment/docker/dev/buildx.Dockerfile | 47 --------------------- deployment/docker/prod/Dockerfile | 14 +------ deployment/docker/prod/bin/install | 3 +- deployment/docker/prod/buildx.Dockerfile | 21 ++++------ 7 files changed, 40 insertions(+), 114 deletions(-) delete mode 100644 deployment/docker/dev/buildx.Dockerfile diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 18b020c7..cce203ab 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -112,7 +112,7 @@ jobs: with: context: . platforms: linux/amd64,linux/arm64 - file: ./deployment/docker/dev/buildx.Dockerfile + file: ./deployment/docker/prod/buildx.Dockerfile push: true tags: semaphoreui/semaphore:develop diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71e5db69..503d1ed9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,31 +5,31 @@ on: - v* jobs: -# release: -# runs-on: [ubuntu-latest] -# steps: -# - uses: actions/setup-go@v3 -# with: { go-version: 1.18 } -# -# - uses: actions/setup-node@v3 -# with: { node-version: '16' } -# -# - run: go install github.com/go-task/task/v3/cmd/task@latest -# -# - run: sudo apt update && sudo apt-get install rpm -# -# - uses: actions/checkout@v3 -# -# - run: task deps -# -# - run: | -# echo ${{ secrets.GPG_KEY }} | tr " " "\n" | base64 -d | gpg --import --batch -# gpg --sign -u "58A7 CC3D 8A9C A2E5 BB5C 141D 4064 23EA F814 63CA" --pinentry-mode loopback --yes --batch --passphrase "${{ secrets.GPG_PASS }}" --output unlock.sig --detach-sign README.md -# rm -f unlock.sig -# -# - run: git reset --hard -# -# - run: GITHUB_TOKEN=${{ secrets.GH_TOKEN }} task release:prod + release: + runs-on: [ubuntu-latest] + steps: + - uses: actions/setup-go@v3 + with: { go-version: 1.18 } + + - uses: actions/setup-node@v3 + with: { node-version: '16' } + + - run: go install github.com/go-task/task/v3/cmd/task@latest + + - run: sudo apt update && sudo apt-get install rpm + + - uses: actions/checkout@v3 + + - run: task deps + + - run: | + echo ${{ secrets.GPG_KEY }} | tr " " "\n" | base64 -d | gpg --import --batch + gpg --sign -u "58A7 CC3D 8A9C A2E5 BB5C 141D 4064 23EA F814 63CA" --pinentry-mode loopback --yes --batch --passphrase "${{ secrets.GPG_PASS }}" --output unlock.sig --detach-sign README.md + rm -f unlock.sig + + - run: git reset --hard + + - run: GITHUB_TOKEN=${{ secrets.GH_TOKEN }} task release:prod deploy-prod: @@ -42,7 +42,7 @@ jobs: - uses: actions/checkout@v3 - - run: context=prod task docker:test +# - run: context=prod task docker:test - uses: docker/setup-qemu-action@v2 diff --git a/Taskfile.yml b/Taskfile.yml index 8eec220a..d3512d62 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -127,7 +127,7 @@ tasks: desc: Build a binary for the current architecture dir: cli cmds: - - go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }} + - env GOOS={{ .GOOS }} GOARCH={{ .GOARCH }} go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }} release: desc: creates a release without performing validations or publishing artifacts @@ -249,7 +249,6 @@ tasks: prefix: -dredd args: up - docker:build: desc: Build an image for Semaphore, requires context vars: @@ -262,18 +261,6 @@ tasks: tag: "{{ .tag }}" args: -t "{{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}" . - docker:buildx: - desc: Build a multiarch image for Semaphore, requires context - vars: - tag: "{{ if .tag }}{{ .tag }}{{ else }}latest{{ end }}" - cmds: - - task: docker - vars: - context: "{{ .context }}" - action: buildx build - tag: "{{ .tag }}" - args: --platform=linux/amd64,linux/arm64 -t "{{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}" . - deps:docker: desc: Install docker testing dependencies. These must be installed explicitly and are not included in the general deps task. status: diff --git a/deployment/docker/dev/buildx.Dockerfile b/deployment/docker/dev/buildx.Dockerfile deleted file mode 100644 index 4506dad5..00000000 --- a/deployment/docker/dev/buildx.Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -ARG BUILDPLATFORM=linux/amd64 - -FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 - -ARG TARGETOS=linux -ARG TARGETARCH=amd64 -ENV GOOS="${TARGETOS}" -ENV GOARCH="${TARGETARCH}" - -ENV SEMAPHORE_VERSION="development" SEMAPHORE_ARCH="${TARGETOS}_${TARGETARCH}" \ - SEMAPHORE_CONFIG_PATH="${SEMAPHORE_CONFIG_PATH:-/etc/semaphore}" \ - APP_ROOT="/go/src/github.com/ansible-semaphore/semaphore/" - -# hadolint ignore=DL3013 -RUN apk add --no-cache sshpass git mysql-client python3 py3-pip py-openssl openssl ca-certificates curl curl-dev openssh-client-default tini nodejs npm bash rsync && \ - apk --update add --virtual build-dependencies python3-dev libffi-dev openssl-dev build-base &&\ - rm -rf /var/cache/apk/* - -RUN pip3 install --upgrade pip cffi && \ - pip3 install ansible &&\ - apk del build-dependencies - -RUN adduser -D -u 1002 -g 0 semaphore && \ - mkdir -p /go/src/github.com/ansible-semaphore/semaphore && \ - mkdir -p /tmp/semaphore && \ - mkdir -p /etc/semaphore && \ - mkdir -p /var/lib/semaphore && \ - chown -R semaphore:0 /go && \ - chown -R semaphore:0 /tmp/semaphore && \ - chown -R semaphore:0 /etc/semaphore && \ - chown -R semaphore:0 /var/lib/semaphore && \ - ssh-keygen -t rsa -q -f "/root/.ssh/id_rsa" -N "" && \ - ssh-keyscan -H github.com > /root/.ssh/known_hosts - -RUN cd $(go env GOPATH) && curl -sL https://taskfile.dev/install.sh | sh - -RUN git config --global --add safe.directory /go/src/github.com/ansible-semaphore/semaphore - -# Copy in app source -WORKDIR ${APP_ROOT} -COPY . ${APP_ROOT} -RUN deployment/docker/dev/bin/install - -USER semaphore -EXPOSE 3000 -ENTRYPOINT ["/usr/local/bin/semaphore-wrapper"] -CMD ["./bin/semaphore", "server", "--config", "/etc/semaphore/config.json"] diff --git a/deployment/docker/prod/Dockerfile b/deployment/docker/prod/Dockerfile index 39a9d098..3136a693 100644 --- a/deployment/docker/prod/Dockerfile +++ b/deployment/docker/prod/Dockerfile @@ -1,23 +1,13 @@ -ARG BUILDPLATFORM=linux/amd64 - # ansible-semaphore production image -FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 as builder - +FROM golang:1.18.3-alpine3.16 as builder COPY ./ /go/src/github.com/ansible-semaphore/semaphore WORKDIR /go/src/github.com/ansible-semaphore/semaphore -ARG TARGETOS=linux -ARG TARGETARCH=amd64 -ENV GOOS="${TARGETOS}" -ENV GOARCH="${TARGETARCH}" - RUN apk add --no-cache -U libc-dev curl nodejs npm git && \ ./deployment/docker/prod/bin/install -# Uses frolvlad alpine so we have access to glibc which is needed for golang -# and when deploying in openshift -FROM frolvlad/alpine-glibc:alpine-3.16 as runner +FROM alpine:3.16 as runner LABEL maintainer="Tom Whiston " RUN apk add --no-cache sshpass git curl ansible mysql-client openssh-client-default tini py3-aiohttp && \ diff --git a/deployment/docker/prod/bin/install b/deployment/docker/prod/bin/install index 8da9bf8b..4cea1417 100755 --- a/deployment/docker/prod/bin/install +++ b/deployment/docker/prod/bin/install @@ -10,7 +10,8 @@ task deps set +e task compile set -e -task build:local + +task build:local GOOS=$GOOS GOARCH=$GOARCH mv ./bin/semaphore /usr/local/bin/ chown 1001:0 /usr/local/bin/semaphore diff --git a/deployment/docker/prod/buildx.Dockerfile b/deployment/docker/prod/buildx.Dockerfile index 39a9d098..9fa990fb 100644 --- a/deployment/docker/prod/buildx.Dockerfile +++ b/deployment/docker/prod/buildx.Dockerfile @@ -1,23 +1,16 @@ -ARG BUILDPLATFORM=linux/amd64 - # ansible-semaphore production image FROM --platform=$BUILDPLATFORM golang:1.18.3-alpine3.16 as builder - COPY ./ /go/src/github.com/ansible-semaphore/semaphore WORKDIR /go/src/github.com/ansible-semaphore/semaphore -ARG TARGETOS=linux -ARG TARGETARCH=amd64 -ENV GOOS="${TARGETOS}" -ENV GOARCH="${TARGETARCH}" +ARG TARGETOS +ARG TARGETARCH -RUN apk add --no-cache -U libc-dev curl nodejs npm git && \ - ./deployment/docker/prod/bin/install +RUN apk add --no-cache -U libc-dev curl nodejs npm git +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} ./deployment/docker/prod/bin/install -# Uses frolvlad alpine so we have access to glibc which is needed for golang -# and when deploying in openshift -FROM frolvlad/alpine-glibc:alpine-3.16 as runner +FROM alpine:3.16 as runner LABEL maintainer="Tom Whiston " RUN apk add --no-cache sshpass git curl ansible mysql-client openssh-client-default tini py3-aiohttp && \ @@ -33,7 +26,9 @@ COPY --from=builder /usr/local/bin/semaphore-wrapper /usr/local/bin/ COPY --from=builder /usr/local/bin/semaphore /usr/local/bin/ RUN chown -R semaphore:0 /usr/local/bin/semaphore-wrapper &&\ - chown -R semaphore:0 /usr/local/bin/semaphore + chown -R semaphore:0 /usr/local/bin/semaphore &&\ + chmod +x /usr/local/bin/semaphore-wrapper &&\ + chmod +x /usr/local/bin/semaphore WORKDIR /home/semaphore USER 1001 From eb7a8b8a642cdf6c145787bb83c5026e04ad1b0a Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 27 Oct 2022 00:32:30 +0500 Subject: [PATCH 41/58] fix(ci): pass GOOS/GOARCH args to task --- Taskfile.yml | 3 +++ Taskfile_windows.yml | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Taskfile.yml b/Taskfile.yml index d3512d62..434e774b 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -19,6 +19,9 @@ tasks: - task: compile - task: test - task: build:local + vars: + GOOS: '' + GOARCH: '' deps: desc: Install all dependencies (except dredd requirements) diff --git a/Taskfile_windows.yml b/Taskfile_windows.yml index 01c97dc1..46e3690f 100644 --- a/Taskfile_windows.yml +++ b/Taskfile_windows.yml @@ -4,3 +4,7 @@ tasks: cmds: - packr - go run util/version_gen/generator.go 1 + build:local: + dir: cli + cmds: + - go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }} From a9046e3324751bbabca2f91ae850258c5922e7ab Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 27 Oct 2022 00:40:55 +0500 Subject: [PATCH 42/58] fix(ci): pass GOOS/GOARCH args to task --- .github/workflows/dev.yml | 2 +- deployment/docker/ci/bin/install | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index cce203ab..9d7d1ca7 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -25,7 +25,7 @@ jobs: - name: Test that compile did not create/modify untracked files run: git diff --exit-code --stat -- . ':(exclude)web2/package.json' ':(exclude)web2/package-lock.json' ':(exclude)go.mod' ':(exclude)go.sum' - - run: task build:local + - run: task build:local GOOS= GOARCH= - uses: actions/upload-artifact@master with: diff --git a/deployment/docker/ci/bin/install b/deployment/docker/ci/bin/install index b7bb800c..5352bbfe 100755 --- a/deployment/docker/ci/bin/install +++ b/deployment/docker/ci/bin/install @@ -11,4 +11,4 @@ echo "--> Install Semaphore entrypoint wrapper script" cp ./deployment/docker/common/semaphore-wrapper /usr/local/bin/semaphore-wrapper task deps task compile -task build:local +task build:local GOOS= GOARCH= From d92ffb07bbe765c6cbe4566926c2ff35122ffc89 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Thu, 27 Oct 2022 02:23:16 +0500 Subject: [PATCH 43/58] ci: pass os/arch via params --- deployment/docker/prod/bin/install | 2 +- deployment/docker/prod/buildx.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/docker/prod/bin/install b/deployment/docker/prod/bin/install index 4cea1417..d08858cf 100755 --- a/deployment/docker/prod/bin/install +++ b/deployment/docker/prod/bin/install @@ -11,7 +11,7 @@ set +e task compile set -e -task build:local GOOS=$GOOS GOARCH=$GOARCH +task build:local GOOS=$1 GOARCH=$2 mv ./bin/semaphore /usr/local/bin/ chown 1001:0 /usr/local/bin/semaphore diff --git a/deployment/docker/prod/buildx.Dockerfile b/deployment/docker/prod/buildx.Dockerfile index 9fa990fb..6abe0295 100644 --- a/deployment/docker/prod/buildx.Dockerfile +++ b/deployment/docker/prod/buildx.Dockerfile @@ -8,7 +8,7 @@ ARG TARGETOS ARG TARGETARCH RUN apk add --no-cache -U libc-dev curl nodejs npm git -RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} ./deployment/docker/prod/bin/install +RUN ./deployment/docker/prod/bin/install ${TARGETOS} ${TARGETARCH} FROM alpine:3.16 as runner LABEL maintainer="Tom Whiston " From b27611e56552ca40f653e68b1be1c49fea80f142 Mon Sep 17 00:00:00 2001 From: anarchistcat Date: Fri, 28 Oct 2022 05:05:13 +0200 Subject: [PATCH 44/58] Diff mode test --- api-docs.yml | 2 ++ db/Task.go | 1 + db/sql/migrations/v2.8.58.sql | 1 + services/tasks/runner.go | 4 ++++ web2/src/components/TaskForm.vue | 4 ++++ 5 files changed, 12 insertions(+) create mode 100644 db/sql/migrations/v2.8.58.sql diff --git a/api-docs.yml b/api-docs.yml index 9df7dd81..900bd5b3 100644 --- a/api-docs.yml +++ b/api-docs.yml @@ -1448,6 +1448,8 @@ paths: type: boolean dry_run: type: boolean + diff: + type: boolean playbook: type: string environment: diff --git a/db/Task.go b/db/Task.go index ff916595..c0934764 100644 --- a/db/Task.go +++ b/db/Task.go @@ -25,6 +25,7 @@ type Task struct { Debug bool `db:"debug" json:"debug"` DryRun bool `db:"dry_run" json:"dry_run"` + Diff bool `db:"diff" json:"diff"` // override variables Playbook string `db:"playbook" json:"playbook"` diff --git a/db/sql/migrations/v2.8.58.sql b/db/sql/migrations/v2.8.58.sql new file mode 100644 index 00000000..e6a9b72b --- /dev/null +++ b/db/sql/migrations/v2.8.58.sql @@ -0,0 +1 @@ +ALTER TABLE task ADD diff boolean NOT NULL DEFAULT false; \ No newline at end of file diff --git a/services/tasks/runner.go b/services/tasks/runner.go index 78ddde58..7859abfc 100644 --- a/services/tasks/runner.go +++ b/services/tasks/runner.go @@ -707,6 +707,10 @@ func (t *TaskRunner) getPlaybookArgs() (args []string, err error) { args = append(args, "-vvvv") } + if t.task.Diff { + args = append(args, "--diff") + } + if t.task.DryRun { args = append(args, "--check") } diff --git a/web2/src/components/TaskForm.vue b/web2/src/components/TaskForm.vue index d4e913e3..4d11ae54 100644 --- a/web2/src/components/TaskForm.vue +++ b/web2/src/components/TaskForm.vue @@ -123,6 +123,10 @@ Example: v-model="item.dry_run" label="Dry Run" > + From 68373c2b336cc8c832c3ead68e22adcca164af30 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Fri, 28 Oct 2022 19:59:50 +0500 Subject: [PATCH 45/58] fix(be): add migariton number --- db/Migration.go | 1 + 1 file changed, 1 insertion(+) diff --git a/db/Migration.go b/db/Migration.go index fa7ee445..832ff327 100644 --- a/db/Migration.go +++ b/db/Migration.go @@ -58,6 +58,7 @@ func GetMigrations() []Migration { {Version: "2.8.42"}, {Version: "2.8.51"}, {Version: "2.8.57"}, + {Version: "2.8.58"}, } } From e4cf341f9edf55980778e36325c0aeeaed231e60 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 15:00:56 +0500 Subject: [PATCH 46/58] fix(be): bug with derermining of playbook path, relates to https://github.com/ansible-semaphore/semaphore/issues/1068 --- services/tasks/runner.go | 10 +++------- services/tasks/runner_test.go | 32 +++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/services/tasks/runner.go b/services/tasks/runner.go index 7859abfc..5edf10cd 100644 --- a/services/tasks/runner.go +++ b/services/tasks/runner.go @@ -50,11 +50,7 @@ func getMD5Hash(filepath string) (string, error) { } func (t *TaskRunner) getPlaybookDir() string { - if strings.HasPrefix(t.task.Playbook, "/") { - return t.task.Playbook - } - - playbookPath := path.Join(t.getRepoPath(), t.task.Playbook) + playbookPath := path.Join(t.getRepoPath(), t.template.Playbook) return path.Dir(playbookPath) } @@ -326,7 +322,7 @@ func (t *TaskRunner) prepareError(err error, errMsg string) error { return nil } -//nolint: gocyclo +// nolint: gocyclo func (t *TaskRunner) populateDetails() error { // get template var err error @@ -650,7 +646,7 @@ func (t *TaskRunner) getEnvironmentExtraVars() (str string, err error) { return } -//nolint: gocyclo +// nolint: gocyclo func (t *TaskRunner) getPlaybookArgs() (args []string, err error) { playbookName := t.task.Playbook if playbookName == "" { diff --git a/services/tasks/runner_test.go b/services/tasks/runner_test.go index 92542da7..9669190a 100644 --- a/services/tasks/runner_test.go +++ b/services/tasks/runner_test.go @@ -22,9 +22,7 @@ func TestGetRepoPath(t *testing.T) { inventoryID := 1 tsk := TaskRunner{ - task: db.Task{ - Playbook: "deploy/test.yml", - }, + task: db.Task{}, inventory: db.Inventory{ SSHKeyID: &inventoryID, SSHKey: db.AccessKey{ @@ -44,6 +42,34 @@ func TestGetRepoPath(t *testing.T) { } } +func TestGetRepoPath_whenStartsWithSlash(t *testing.T) { + util.Config = &util.ConfigType{ + TmpPath: "/tmp", + } + + inventoryID := 1 + + tsk := TaskRunner{ + task: db.Task{}, + inventory: db.Inventory{ + SSHKeyID: &inventoryID, + SSHKey: db.AccessKey{ + ID: 12345, + Type: db.AccessKeySSH, + }, + Type: db.InventoryStatic, + }, + template: db.Template{ + Playbook: "/deploy/test.yml", + }, + } + + dir := tsk.getPlaybookDir() + if dir != "/tmp/repository_0_0/deploy" { + t.Fatal("Invalid playbook dir: " + dir) + } +} + func TestPopulateDetails(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UTC().UnixNano())) fn := "/tmp/test_semaphore_db_" + strconv.Itoa(r.Int()) From b9cafa949376436ec8b370e0af687decbd6b9667 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 15:18:21 +0500 Subject: [PATCH 47/58] ci: speed up dev workflow --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 9d7d1ca7..5e62313c 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -95,7 +95,7 @@ jobs: - uses: actions/checkout@v3 - - run: context=prod task docker:test +# - run: context=prod task docker:test - uses: docker/setup-qemu-action@v2 From c66c9482b106d6fcfc4cb0d5bc9892788c1846ea Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 15:18:42 +0500 Subject: [PATCH 48/58] feat(be): remove PAT key type --- db/AccessKey.go | 6 ------ db/Repository.go | 2 -- web2/src/components/KeyForm.vue | 11 ----------- 3 files changed, 19 deletions(-) diff --git a/db/AccessKey.go b/db/AccessKey.go index 716c7cbd..3ab9c001 100644 --- a/db/AccessKey.go +++ b/db/AccessKey.go @@ -22,7 +22,6 @@ const ( AccessKeySSH AccessKeyType = "ssh" AccessKeyNone AccessKeyType = "none" AccessKeyLoginPassword AccessKeyType = "login_password" - AccessKeyPAT AccessKeyType = "pat" ) // AccessKey represents a key used to access a machine with ansible from semaphore @@ -40,7 +39,6 @@ type AccessKey struct { LoginPassword LoginPassword `db:"-" json:"login_password"` SshKey SshKey `db:"-" json:"ssh"` - PAT string `db:"-" json:"pat"` OverrideSecret bool `db:"-" json:"override_secret"` InstallationKey int64 `db:"-" json:"-"` @@ -193,8 +191,6 @@ func (key *AccessKey) SerializeSecret() error { if err != nil { return err } - case AccessKeyPAT: - plaintext = []byte(key.PAT) case AccessKeyNone: key.Secret = nil return nil @@ -251,8 +247,6 @@ func (key *AccessKey) unmarshalAppropriateField(secret []byte) (err error) { if err == nil { key.LoginPassword = loginPass } - case AccessKeyPAT: - key.PAT = string(secret) } return } diff --git a/db/Repository.go b/db/Repository.go index 3e5eed3f..ad0d4239 100644 --- a/db/Repository.go +++ b/db/Repository.go @@ -80,8 +80,6 @@ func (r Repository) GetGitURL() string { switch r.SSHKey.Type { case AccessKeyLoginPassword: auth = r.SSHKey.LoginPassword.Login + ":" + r.SSHKey.LoginPassword.Password - case AccessKeyPAT: - auth = r.SSHKey.PAT } if auth != "" { auth += "@" diff --git a/web2/src/components/KeyForm.vue b/web2/src/components/KeyForm.vue index 052f77ed..cfb4cf22 100644 --- a/web2/src/components/KeyForm.vue +++ b/web2/src/components/KeyForm.vue @@ -71,13 +71,6 @@ v-if="item.type === 'ssh'" /> - - Date: Sat, 29 Oct 2022 15:24:52 +0500 Subject: [PATCH 49/58] ci: remove go-test job from dev, move test to build-local --- .github/workflows/dev.yml | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 5e62313c..06eac75e 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -27,28 +27,31 @@ jobs: - run: task build:local GOOS= GOARCH= + - run: task test + - uses: actions/upload-artifact@master with: name: semaphore path: bin/semaphore + retention-days: 1 - test-golang: - runs-on: [ubuntu-latest] - needs: build-local - steps: - - uses: actions/setup-go@v3 - with: { go-version: 1.18 } - - - run: go install github.com/go-task/task/v3/cmd/task@latest - - - uses: actions/checkout@v3 - - - run: task deps:tools - - run: task deps:be - - run: task compile:be +# test-golang: +# runs-on: [ubuntu-latest] +# needs: build-local +# steps: +# - uses: actions/setup-go@v3 +# with: { go-version: 1.18 } +# +# - run: go install github.com/go-task/task/v3/cmd/task@latest +# +# - uses: actions/checkout@v3 +# +# - run: task deps:tools +# - run: task deps:be +# - run: task compile:be # - run: task lint:be - - run: task test +# - run: task test test-db-migration: From f8d8b36fd302f0a4ae33b1f0b3cdf270cf0c428e Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 15:35:42 +0500 Subject: [PATCH 50/58] ci: fix workflow --- .github/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 06eac75e..f7b54032 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -56,7 +56,7 @@ jobs: test-db-migration: runs-on: [ubuntu-latest] - needs: [build-local, test-golang] + needs: [build-local] steps: - uses: shogo82148/actions-setup-mysql@v1 with: From 96e40b7e7e96d0312547959833e076614fbb6868 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 18:32:45 +0500 Subject: [PATCH 51/58] feat(fe): task run checkboxes --- web2/src/components/TaskForm.vue | 35 ++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/web2/src/components/TaskForm.vue b/web2/src/components/TaskForm.vue index 4d11ae54..cd1ec7f1 100644 --- a/web2/src/components/TaskForm.vue +++ b/web2/src/components/TaskForm.vue @@ -111,22 +111,27 @@ Example:
- - - + + + + + - - - + + + + + + + + + From d382a822fee114056cb8b9e259cba9126b47cc31 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 18:37:20 +0500 Subject: [PATCH 52/58] refactor: rename directory web2 to web --- .github/workflows/dev.yml | 2 +- .gitignore | 4 +- Taskfile.yml | 16 +- api/router.go | 2 +- {web2 => web}/.browserslistrc | 0 {web2 => web}/.editorconfig | 0 {web2 => web}/.eslintrc.js | 0 {web2 => web}/README.md | 2 +- {web2 => web}/babel.config.js | 0 {web2 => web}/package-lock.json | 4 +- {web2 => web}/package.json | 2 +- .../allow-override-cli-args-in-task.mp4 | Bin {web2 => web}/public/favicon.png | Bin {web2 => web}/public/favicon.svg | 0 {web2 => web}/public/index.html | 0 {web2 => web}/src/App.vue | 0 {web2 => web}/src/assets/fonts/LICENSE.txt | 404 +++++++++--------- .../src/assets/fonts/Roboto-Black.ttf | Bin .../src/assets/fonts/Roboto-Bold.ttf | Bin .../src/assets/fonts/Roboto-Light.ttf | Bin .../src/assets/fonts/Roboto-Medium.ttf | Bin .../src/assets/fonts/Roboto-Regular.ttf | Bin .../src/assets/fonts/Roboto-Thin.ttf | Bin {web2 => web}/src/assets/logo.png | Bin {web2 => web}/src/assets/logo.svg | 0 {web2 => web}/src/assets/scss/main.scss | 0 .../src/components/ChangePasswordForm.vue | 0 {web2 => web}/src/components/CronInput.vue | 0 {web2 => web}/src/components/EditDialog.vue | 0 .../src/components/EditViewsForm.vue | 0 .../src/components/EnvironmentForm.vue | 0 .../IndeterminateProgressCircular.vue | 0 .../src/components/InventoryForm.vue | 0 {web2 => web}/src/components/ItemFormBase.js | 0 .../src/components/ItemListPageBase.js | 0 {web2 => web}/src/components/KeyForm.vue | 0 .../src/components/ObjectRefsDialog.vue | 0 .../src/components/ObjectRefsView.vue | 0 .../src/components/PageBottomSheet.vue | 0 {web2 => web}/src/components/ProjectForm.vue | 0 .../src/components/RepositoryForm.vue | 0 {web2 => web}/src/components/SurveyVars.vue | 0 .../src/components/SystemInfoDialog.vue | 0 .../src/components/SystemSettingsDialog.vue | 0 .../src/components/TableSettingsSheet.vue | 0 {web2 => web}/src/components/TaskForm.vue | 0 {web2 => web}/src/components/TaskLink.vue | 0 {web2 => web}/src/components/TaskList.vue | 0 {web2 => web}/src/components/TaskLogView.vue | 0 {web2 => web}/src/components/TaskStatus.vue | 0 .../src/components/TeamMemberForm.vue | 0 {web2 => web}/src/components/TemplateForm.vue | 0 {web2 => web}/src/components/UserForm.vue | 0 {web2 => web}/src/components/YesNoDialog.vue | 0 {web2 => web}/src/event-bus.js | 0 {web2 => web}/src/lib/Listenable.js | 0 {web2 => web}/src/lib/PubSub.js | 0 {web2 => web}/src/lib/Socket.js | 0 {web2 => web}/src/lib/constants.js | 0 {web2 => web}/src/lib/delay.js | 0 {web2 => web}/src/lib/error.js | 0 {web2 => web}/src/main.js | 0 {web2 => web}/src/plugins/vuetify.js | 0 {web2 => web}/src/router/index.js | 0 {web2 => web}/src/scss/variables.scss | 0 {web2 => web}/src/socket.js | 0 {web2 => web}/src/views/Auth.vue | 0 {web2 => web}/src/views/Users.vue | 0 {web2 => web}/src/views/project/Activity.vue | 0 .../src/views/project/Environment.vue | 0 {web2 => web}/src/views/project/History.vue | 0 {web2 => web}/src/views/project/Inventory.vue | 0 {web2 => web}/src/views/project/Keys.vue | 0 {web2 => web}/src/views/project/New.vue | 0 .../src/views/project/Repositories.vue | 0 {web2 => web}/src/views/project/Settings.vue | 0 {web2 => web}/src/views/project/Team.vue | 0 .../src/views/project/TemplateView.vue | 0 {web2 => web}/src/views/project/Templates.vue | 0 {web2 => web}/tests/unit/example.spec.js | 0 .../tests/unit/lib/Listenable.spec.js | 0 {web2 => web}/tests/unit/lib/Socket.spec.js | 0 {web2 => web}/tests/unit/lib/error.spec.js | 0 {web2 => web}/vue.config.js | 0 84 files changed, 218 insertions(+), 218 deletions(-) rename {web2 => web}/.browserslistrc (100%) rename {web2 => web}/.editorconfig (100%) rename {web2 => web}/.eslintrc.js (100%) rename {web2 => web}/README.md (98%) rename {web2 => web}/babel.config.js (100%) rename {web2 => web}/package-lock.json (99%) rename {web2 => web}/package.json (98%) rename {web2 => web}/public/allow-override-cli-args-in-task.mp4 (100%) rename {web2 => web}/public/favicon.png (100%) rename {web2 => web}/public/favicon.svg (100%) rename {web2 => web}/public/index.html (100%) rename {web2 => web}/src/App.vue (100%) rename {web2 => web}/src/assets/fonts/LICENSE.txt (98%) rename {web2 => web}/src/assets/fonts/Roboto-Black.ttf (100%) rename {web2 => web}/src/assets/fonts/Roboto-Bold.ttf (100%) rename {web2 => web}/src/assets/fonts/Roboto-Light.ttf (100%) rename {web2 => web}/src/assets/fonts/Roboto-Medium.ttf (100%) rename {web2 => web}/src/assets/fonts/Roboto-Regular.ttf (100%) rename {web2 => web}/src/assets/fonts/Roboto-Thin.ttf (100%) rename {web2 => web}/src/assets/logo.png (100%) rename {web2 => web}/src/assets/logo.svg (100%) rename {web2 => web}/src/assets/scss/main.scss (100%) rename {web2 => web}/src/components/ChangePasswordForm.vue (100%) rename {web2 => web}/src/components/CronInput.vue (100%) rename {web2 => web}/src/components/EditDialog.vue (100%) rename {web2 => web}/src/components/EditViewsForm.vue (100%) rename {web2 => web}/src/components/EnvironmentForm.vue (100%) rename {web2 => web}/src/components/IndeterminateProgressCircular.vue (100%) rename {web2 => web}/src/components/InventoryForm.vue (100%) rename {web2 => web}/src/components/ItemFormBase.js (100%) rename {web2 => web}/src/components/ItemListPageBase.js (100%) rename {web2 => web}/src/components/KeyForm.vue (100%) rename {web2 => web}/src/components/ObjectRefsDialog.vue (100%) rename {web2 => web}/src/components/ObjectRefsView.vue (100%) rename {web2 => web}/src/components/PageBottomSheet.vue (100%) rename {web2 => web}/src/components/ProjectForm.vue (100%) rename {web2 => web}/src/components/RepositoryForm.vue (100%) rename {web2 => web}/src/components/SurveyVars.vue (100%) rename {web2 => web}/src/components/SystemInfoDialog.vue (100%) rename {web2 => web}/src/components/SystemSettingsDialog.vue (100%) rename {web2 => web}/src/components/TableSettingsSheet.vue (100%) rename {web2 => web}/src/components/TaskForm.vue (100%) rename {web2 => web}/src/components/TaskLink.vue (100%) rename {web2 => web}/src/components/TaskList.vue (100%) rename {web2 => web}/src/components/TaskLogView.vue (100%) rename {web2 => web}/src/components/TaskStatus.vue (100%) rename {web2 => web}/src/components/TeamMemberForm.vue (100%) rename {web2 => web}/src/components/TemplateForm.vue (100%) rename {web2 => web}/src/components/UserForm.vue (100%) rename {web2 => web}/src/components/YesNoDialog.vue (100%) rename {web2 => web}/src/event-bus.js (100%) rename {web2 => web}/src/lib/Listenable.js (100%) rename {web2 => web}/src/lib/PubSub.js (100%) rename {web2 => web}/src/lib/Socket.js (100%) rename {web2 => web}/src/lib/constants.js (100%) rename {web2 => web}/src/lib/delay.js (100%) rename {web2 => web}/src/lib/error.js (100%) rename {web2 => web}/src/main.js (100%) rename {web2 => web}/src/plugins/vuetify.js (100%) rename {web2 => web}/src/router/index.js (100%) rename {web2 => web}/src/scss/variables.scss (100%) rename {web2 => web}/src/socket.js (100%) rename {web2 => web}/src/views/Auth.vue (100%) rename {web2 => web}/src/views/Users.vue (100%) rename {web2 => web}/src/views/project/Activity.vue (100%) rename {web2 => web}/src/views/project/Environment.vue (100%) rename {web2 => web}/src/views/project/History.vue (100%) rename {web2 => web}/src/views/project/Inventory.vue (100%) rename {web2 => web}/src/views/project/Keys.vue (100%) rename {web2 => web}/src/views/project/New.vue (100%) rename {web2 => web}/src/views/project/Repositories.vue (100%) rename {web2 => web}/src/views/project/Settings.vue (100%) rename {web2 => web}/src/views/project/Team.vue (100%) rename {web2 => web}/src/views/project/TemplateView.vue (100%) rename {web2 => web}/src/views/project/Templates.vue (100%) rename {web2 => web}/tests/unit/example.spec.js (100%) rename {web2 => web}/tests/unit/lib/Listenable.spec.js (100%) rename {web2 => web}/tests/unit/lib/Socket.spec.js (100%) rename {web2 => web}/tests/unit/lib/error.spec.js (100%) rename {web2 => web}/vue.config.js (100%) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index f7b54032..9719caa8 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -23,7 +23,7 @@ jobs: - run: task compile - name: Test that compile did not create/modify untracked files - run: git diff --exit-code --stat -- . ':(exclude)web2/package.json' ':(exclude)web2/package-lock.json' ':(exclude)go.mod' ':(exclude)go.sum' + run: git diff --exit-code --stat -- . ':(exclude)web/package.json' ':(exclude)web/package-lock.json' ':(exclude)go.mod' ':(exclude)go.sum' - run: task build:local GOOS= GOARCH= diff --git a/.gitignore b/.gitignore index cca257b4..9fba14ee 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ web/public/js/bundle.js web/public/css/*.* web/public/html/**/*.* web/public/fonts/*.* -web2/.nyc_output -web2/dist/**/* +web/.nyc_output +web/dist/**/* /config.json /.dredd/config.json /database.boltdb diff --git a/Taskfile.yml b/Taskfile.yml index 434e774b..8c692235 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -37,21 +37,21 @@ tasks: deps:fe2: desc: Installs npm requirements for front end from package.json - dir: web2 + dir: web cmds: - npm install # - npm audit fix deps:integration: desc: Installs requirements for integration testing with dredd - dir: web2 + dir: web cmds: - npm install dredd@13.1.2 # - npm audit fix deps:tools: desc: Installs tools needed - dir: web2 + dir: web vars: GORELEASER_VERSION: "0.183.0" GOLINTER_VERSION: "1.46.2" @@ -73,7 +73,7 @@ tasks: compile:fe2: desc: Build vue.js project - dir: web2 + dir: web sources: - src/*.* - src/**/*.* @@ -94,13 +94,13 @@ tasks: compile:be: desc: Runs Packr for static assets sources: - - web2/dist/* + - web/dist/* - db/migrations/* generates: - db/db-packr.go - api/api-packr.go cmds: - - mkdir -p web2/dist + - mkdir -p web/dist - go run util/version_gen/generator.go {{ if .TAG }}{{ .TAG }}{{ else }}{{ if .SEMAPHORE_VERSION }}{{ .SEMAPHORE_VERSION }}{{ else }}{{ .BRANCH }}-{{ .SHA }}-{{ .TIMESTAMP }}{{ if .DIRTY }}-dirty{{ end }}{{ end }}{{end}} - packr vars: @@ -110,7 +110,7 @@ tasks: sh: git rev-parse --abbrev-ref HEAD DIRTY: # We must exclude the package-lock file as npm install can change it! - sh: git diff --exit-code --stat -- . ':(exclude)web2/package-lock.json' ':(exclude)web2/package.json' || true + sh: git diff --exit-code --stat -- . ':(exclude)web/package-lock.json' ':(exclude)web/package.json' || true SHA: sh: git log --pretty=format:'%h' -n 1 TIMESTAMP: @@ -164,7 +164,7 @@ tasks: test:api: desc: test the api with dredd cmds: - - ./web2/node_modules/.bin/dredd --config .dredd/dredd.yml + - ./web/node_modules/.bin/dredd --config .dredd/dredd.yml ci:artifacts: cmds: diff --git a/api/router.go b/api/router.go index 745144af..e9657f49 100644 --- a/api/router.go +++ b/api/router.go @@ -14,7 +14,7 @@ import ( "github.com/gorilla/mux" ) -var publicAssets2 = packr.NewBox("../web2/dist") +var publicAssets2 = packr.NewBox("../web/dist") //JSONMiddleware ensures that all the routes respond with Json, this is added by default to all routes func JSONMiddleware(next http.Handler) http.Handler { diff --git a/web2/.browserslistrc b/web/.browserslistrc similarity index 100% rename from web2/.browserslistrc rename to web/.browserslistrc diff --git a/web2/.editorconfig b/web/.editorconfig similarity index 100% rename from web2/.editorconfig rename to web/.editorconfig diff --git a/web2/.eslintrc.js b/web/.eslintrc.js similarity index 100% rename from web2/.eslintrc.js rename to web/.eslintrc.js diff --git a/web2/README.md b/web/README.md similarity index 98% rename from web2/README.md rename to web/README.md index e86be3b7..10cb6dc3 100644 --- a/web2/README.md +++ b/web/README.md @@ -1,4 +1,4 @@ -# web2 +# web ## Project setup ``` diff --git a/web2/babel.config.js b/web/babel.config.js similarity index 100% rename from web2/babel.config.js rename to web/babel.config.js diff --git a/web2/package-lock.json b/web/package-lock.json similarity index 99% rename from web2/package-lock.json rename to web/package-lock.json index 4760a1de..c2a32b0f 100644 --- a/web2/package-lock.json +++ b/web/package-lock.json @@ -1,11 +1,11 @@ { - "name": "web2", + "name": "web", "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "web2", + "name": "web", "version": "0.1.0", "dependencies": { "@mdi/font": "^5.9.55", diff --git a/web2/package.json b/web/package.json similarity index 98% rename from web2/package.json rename to web/package.json index 9243998b..e5b411bf 100644 --- a/web2/package.json +++ b/web/package.json @@ -1,5 +1,5 @@ { - "name": "web2", + "name": "web", "version": "0.1.0", "private": true, "scripts": { diff --git a/web2/public/allow-override-cli-args-in-task.mp4 b/web/public/allow-override-cli-args-in-task.mp4 similarity index 100% rename from web2/public/allow-override-cli-args-in-task.mp4 rename to web/public/allow-override-cli-args-in-task.mp4 diff --git a/web2/public/favicon.png b/web/public/favicon.png similarity index 100% rename from web2/public/favicon.png rename to web/public/favicon.png diff --git a/web2/public/favicon.svg b/web/public/favicon.svg similarity index 100% rename from web2/public/favicon.svg rename to web/public/favicon.svg diff --git a/web2/public/index.html b/web/public/index.html similarity index 100% rename from web2/public/index.html rename to web/public/index.html diff --git a/web2/src/App.vue b/web/src/App.vue similarity index 100% rename from web2/src/App.vue rename to web/src/App.vue diff --git a/web2/src/assets/fonts/LICENSE.txt b/web/src/assets/fonts/LICENSE.txt similarity index 98% rename from web2/src/assets/fonts/LICENSE.txt rename to web/src/assets/fonts/LICENSE.txt index 75b52484..d6456956 100644 --- a/web2/src/assets/fonts/LICENSE.txt +++ b/web/src/assets/fonts/LICENSE.txt @@ -1,202 +1,202 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/web2/src/assets/fonts/Roboto-Black.ttf b/web/src/assets/fonts/Roboto-Black.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Black.ttf rename to web/src/assets/fonts/Roboto-Black.ttf diff --git a/web2/src/assets/fonts/Roboto-Bold.ttf b/web/src/assets/fonts/Roboto-Bold.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Bold.ttf rename to web/src/assets/fonts/Roboto-Bold.ttf diff --git a/web2/src/assets/fonts/Roboto-Light.ttf b/web/src/assets/fonts/Roboto-Light.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Light.ttf rename to web/src/assets/fonts/Roboto-Light.ttf diff --git a/web2/src/assets/fonts/Roboto-Medium.ttf b/web/src/assets/fonts/Roboto-Medium.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Medium.ttf rename to web/src/assets/fonts/Roboto-Medium.ttf diff --git a/web2/src/assets/fonts/Roboto-Regular.ttf b/web/src/assets/fonts/Roboto-Regular.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Regular.ttf rename to web/src/assets/fonts/Roboto-Regular.ttf diff --git a/web2/src/assets/fonts/Roboto-Thin.ttf b/web/src/assets/fonts/Roboto-Thin.ttf similarity index 100% rename from web2/src/assets/fonts/Roboto-Thin.ttf rename to web/src/assets/fonts/Roboto-Thin.ttf diff --git a/web2/src/assets/logo.png b/web/src/assets/logo.png similarity index 100% rename from web2/src/assets/logo.png rename to web/src/assets/logo.png diff --git a/web2/src/assets/logo.svg b/web/src/assets/logo.svg similarity index 100% rename from web2/src/assets/logo.svg rename to web/src/assets/logo.svg diff --git a/web2/src/assets/scss/main.scss b/web/src/assets/scss/main.scss similarity index 100% rename from web2/src/assets/scss/main.scss rename to web/src/assets/scss/main.scss diff --git a/web2/src/components/ChangePasswordForm.vue b/web/src/components/ChangePasswordForm.vue similarity index 100% rename from web2/src/components/ChangePasswordForm.vue rename to web/src/components/ChangePasswordForm.vue diff --git a/web2/src/components/CronInput.vue b/web/src/components/CronInput.vue similarity index 100% rename from web2/src/components/CronInput.vue rename to web/src/components/CronInput.vue diff --git a/web2/src/components/EditDialog.vue b/web/src/components/EditDialog.vue similarity index 100% rename from web2/src/components/EditDialog.vue rename to web/src/components/EditDialog.vue diff --git a/web2/src/components/EditViewsForm.vue b/web/src/components/EditViewsForm.vue similarity index 100% rename from web2/src/components/EditViewsForm.vue rename to web/src/components/EditViewsForm.vue diff --git a/web2/src/components/EnvironmentForm.vue b/web/src/components/EnvironmentForm.vue similarity index 100% rename from web2/src/components/EnvironmentForm.vue rename to web/src/components/EnvironmentForm.vue diff --git a/web2/src/components/IndeterminateProgressCircular.vue b/web/src/components/IndeterminateProgressCircular.vue similarity index 100% rename from web2/src/components/IndeterminateProgressCircular.vue rename to web/src/components/IndeterminateProgressCircular.vue diff --git a/web2/src/components/InventoryForm.vue b/web/src/components/InventoryForm.vue similarity index 100% rename from web2/src/components/InventoryForm.vue rename to web/src/components/InventoryForm.vue diff --git a/web2/src/components/ItemFormBase.js b/web/src/components/ItemFormBase.js similarity index 100% rename from web2/src/components/ItemFormBase.js rename to web/src/components/ItemFormBase.js diff --git a/web2/src/components/ItemListPageBase.js b/web/src/components/ItemListPageBase.js similarity index 100% rename from web2/src/components/ItemListPageBase.js rename to web/src/components/ItemListPageBase.js diff --git a/web2/src/components/KeyForm.vue b/web/src/components/KeyForm.vue similarity index 100% rename from web2/src/components/KeyForm.vue rename to web/src/components/KeyForm.vue diff --git a/web2/src/components/ObjectRefsDialog.vue b/web/src/components/ObjectRefsDialog.vue similarity index 100% rename from web2/src/components/ObjectRefsDialog.vue rename to web/src/components/ObjectRefsDialog.vue diff --git a/web2/src/components/ObjectRefsView.vue b/web/src/components/ObjectRefsView.vue similarity index 100% rename from web2/src/components/ObjectRefsView.vue rename to web/src/components/ObjectRefsView.vue diff --git a/web2/src/components/PageBottomSheet.vue b/web/src/components/PageBottomSheet.vue similarity index 100% rename from web2/src/components/PageBottomSheet.vue rename to web/src/components/PageBottomSheet.vue diff --git a/web2/src/components/ProjectForm.vue b/web/src/components/ProjectForm.vue similarity index 100% rename from web2/src/components/ProjectForm.vue rename to web/src/components/ProjectForm.vue diff --git a/web2/src/components/RepositoryForm.vue b/web/src/components/RepositoryForm.vue similarity index 100% rename from web2/src/components/RepositoryForm.vue rename to web/src/components/RepositoryForm.vue diff --git a/web2/src/components/SurveyVars.vue b/web/src/components/SurveyVars.vue similarity index 100% rename from web2/src/components/SurveyVars.vue rename to web/src/components/SurveyVars.vue diff --git a/web2/src/components/SystemInfoDialog.vue b/web/src/components/SystemInfoDialog.vue similarity index 100% rename from web2/src/components/SystemInfoDialog.vue rename to web/src/components/SystemInfoDialog.vue diff --git a/web2/src/components/SystemSettingsDialog.vue b/web/src/components/SystemSettingsDialog.vue similarity index 100% rename from web2/src/components/SystemSettingsDialog.vue rename to web/src/components/SystemSettingsDialog.vue diff --git a/web2/src/components/TableSettingsSheet.vue b/web/src/components/TableSettingsSheet.vue similarity index 100% rename from web2/src/components/TableSettingsSheet.vue rename to web/src/components/TableSettingsSheet.vue diff --git a/web2/src/components/TaskForm.vue b/web/src/components/TaskForm.vue similarity index 100% rename from web2/src/components/TaskForm.vue rename to web/src/components/TaskForm.vue diff --git a/web2/src/components/TaskLink.vue b/web/src/components/TaskLink.vue similarity index 100% rename from web2/src/components/TaskLink.vue rename to web/src/components/TaskLink.vue diff --git a/web2/src/components/TaskList.vue b/web/src/components/TaskList.vue similarity index 100% rename from web2/src/components/TaskList.vue rename to web/src/components/TaskList.vue diff --git a/web2/src/components/TaskLogView.vue b/web/src/components/TaskLogView.vue similarity index 100% rename from web2/src/components/TaskLogView.vue rename to web/src/components/TaskLogView.vue diff --git a/web2/src/components/TaskStatus.vue b/web/src/components/TaskStatus.vue similarity index 100% rename from web2/src/components/TaskStatus.vue rename to web/src/components/TaskStatus.vue diff --git a/web2/src/components/TeamMemberForm.vue b/web/src/components/TeamMemberForm.vue similarity index 100% rename from web2/src/components/TeamMemberForm.vue rename to web/src/components/TeamMemberForm.vue diff --git a/web2/src/components/TemplateForm.vue b/web/src/components/TemplateForm.vue similarity index 100% rename from web2/src/components/TemplateForm.vue rename to web/src/components/TemplateForm.vue diff --git a/web2/src/components/UserForm.vue b/web/src/components/UserForm.vue similarity index 100% rename from web2/src/components/UserForm.vue rename to web/src/components/UserForm.vue diff --git a/web2/src/components/YesNoDialog.vue b/web/src/components/YesNoDialog.vue similarity index 100% rename from web2/src/components/YesNoDialog.vue rename to web/src/components/YesNoDialog.vue diff --git a/web2/src/event-bus.js b/web/src/event-bus.js similarity index 100% rename from web2/src/event-bus.js rename to web/src/event-bus.js diff --git a/web2/src/lib/Listenable.js b/web/src/lib/Listenable.js similarity index 100% rename from web2/src/lib/Listenable.js rename to web/src/lib/Listenable.js diff --git a/web2/src/lib/PubSub.js b/web/src/lib/PubSub.js similarity index 100% rename from web2/src/lib/PubSub.js rename to web/src/lib/PubSub.js diff --git a/web2/src/lib/Socket.js b/web/src/lib/Socket.js similarity index 100% rename from web2/src/lib/Socket.js rename to web/src/lib/Socket.js diff --git a/web2/src/lib/constants.js b/web/src/lib/constants.js similarity index 100% rename from web2/src/lib/constants.js rename to web/src/lib/constants.js diff --git a/web2/src/lib/delay.js b/web/src/lib/delay.js similarity index 100% rename from web2/src/lib/delay.js rename to web/src/lib/delay.js diff --git a/web2/src/lib/error.js b/web/src/lib/error.js similarity index 100% rename from web2/src/lib/error.js rename to web/src/lib/error.js diff --git a/web2/src/main.js b/web/src/main.js similarity index 100% rename from web2/src/main.js rename to web/src/main.js diff --git a/web2/src/plugins/vuetify.js b/web/src/plugins/vuetify.js similarity index 100% rename from web2/src/plugins/vuetify.js rename to web/src/plugins/vuetify.js diff --git a/web2/src/router/index.js b/web/src/router/index.js similarity index 100% rename from web2/src/router/index.js rename to web/src/router/index.js diff --git a/web2/src/scss/variables.scss b/web/src/scss/variables.scss similarity index 100% rename from web2/src/scss/variables.scss rename to web/src/scss/variables.scss diff --git a/web2/src/socket.js b/web/src/socket.js similarity index 100% rename from web2/src/socket.js rename to web/src/socket.js diff --git a/web2/src/views/Auth.vue b/web/src/views/Auth.vue similarity index 100% rename from web2/src/views/Auth.vue rename to web/src/views/Auth.vue diff --git a/web2/src/views/Users.vue b/web/src/views/Users.vue similarity index 100% rename from web2/src/views/Users.vue rename to web/src/views/Users.vue diff --git a/web2/src/views/project/Activity.vue b/web/src/views/project/Activity.vue similarity index 100% rename from web2/src/views/project/Activity.vue rename to web/src/views/project/Activity.vue diff --git a/web2/src/views/project/Environment.vue b/web/src/views/project/Environment.vue similarity index 100% rename from web2/src/views/project/Environment.vue rename to web/src/views/project/Environment.vue diff --git a/web2/src/views/project/History.vue b/web/src/views/project/History.vue similarity index 100% rename from web2/src/views/project/History.vue rename to web/src/views/project/History.vue diff --git a/web2/src/views/project/Inventory.vue b/web/src/views/project/Inventory.vue similarity index 100% rename from web2/src/views/project/Inventory.vue rename to web/src/views/project/Inventory.vue diff --git a/web2/src/views/project/Keys.vue b/web/src/views/project/Keys.vue similarity index 100% rename from web2/src/views/project/Keys.vue rename to web/src/views/project/Keys.vue diff --git a/web2/src/views/project/New.vue b/web/src/views/project/New.vue similarity index 100% rename from web2/src/views/project/New.vue rename to web/src/views/project/New.vue diff --git a/web2/src/views/project/Repositories.vue b/web/src/views/project/Repositories.vue similarity index 100% rename from web2/src/views/project/Repositories.vue rename to web/src/views/project/Repositories.vue diff --git a/web2/src/views/project/Settings.vue b/web/src/views/project/Settings.vue similarity index 100% rename from web2/src/views/project/Settings.vue rename to web/src/views/project/Settings.vue diff --git a/web2/src/views/project/Team.vue b/web/src/views/project/Team.vue similarity index 100% rename from web2/src/views/project/Team.vue rename to web/src/views/project/Team.vue diff --git a/web2/src/views/project/TemplateView.vue b/web/src/views/project/TemplateView.vue similarity index 100% rename from web2/src/views/project/TemplateView.vue rename to web/src/views/project/TemplateView.vue diff --git a/web2/src/views/project/Templates.vue b/web/src/views/project/Templates.vue similarity index 100% rename from web2/src/views/project/Templates.vue rename to web/src/views/project/Templates.vue diff --git a/web2/tests/unit/example.spec.js b/web/tests/unit/example.spec.js similarity index 100% rename from web2/tests/unit/example.spec.js rename to web/tests/unit/example.spec.js diff --git a/web2/tests/unit/lib/Listenable.spec.js b/web/tests/unit/lib/Listenable.spec.js similarity index 100% rename from web2/tests/unit/lib/Listenable.spec.js rename to web/tests/unit/lib/Listenable.spec.js diff --git a/web2/tests/unit/lib/Socket.spec.js b/web/tests/unit/lib/Socket.spec.js similarity index 100% rename from web2/tests/unit/lib/Socket.spec.js rename to web/tests/unit/lib/Socket.spec.js diff --git a/web2/tests/unit/lib/error.spec.js b/web/tests/unit/lib/error.spec.js similarity index 100% rename from web2/tests/unit/lib/error.spec.js rename to web/tests/unit/lib/error.spec.js diff --git a/web2/vue.config.js b/web/vue.config.js similarity index 100% rename from web2/vue.config.js rename to web/vue.config.js From a3c4ecbb1432f3be663c6c657a3f7817461c0a28 Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 20:44:16 +0500 Subject: [PATCH 53/58] feat(fe): restyle tempate form --- web/src/components/InventoryForm.vue | 2 +- web/src/components/SurveyVars.vue | 36 +++++-- web/src/components/TaskForm.vue | 69 ++++++------ web/src/components/TemplateForm.vue | 156 +++++++++++++++++++-------- 4 files changed, 171 insertions(+), 92 deletions(-) diff --git a/web/src/components/InventoryForm.vue b/web/src/components/InventoryForm.vue index 5b1525a5..45a534ec 100644 --- a/web/src/components/InventoryForm.vue +++ b/web/src/components/InventoryForm.vue @@ -100,7 +100,7 @@ diff --git a/web/src/views/project/TemplateView.vue b/web/src/views/project/TemplateView.vue index 5f514e76..28fea64c 100644 --- a/web/src/views/project/TemplateView.vue +++ b/web/src/views/project/TemplateView.vue @@ -7,6 +7,14 @@
+ + Task Templates + > + Task Templates mdi-chevron-right {{ item.name }} @@ -76,6 +85,10 @@ + + {{ TEMPLATE_TYPE_ACTION_TITLES[item.type] }} + + - - - - - + :project-id="projectId" + :template-id="itemId" + :template-alias="templateAlias" + :template-type="templateType" + /> @@ -245,19 +228,25 @@ import ItemListPageBase from '@/components/ItemListPageBase'; import TemplateForm from '@/components/TemplateForm.vue'; import TaskLink from '@/components/TaskLink.vue'; import axios from 'axios'; -import TaskForm from '@/components/TaskForm.vue'; import EditViewsForm from '@/components/EditViewsForm.vue'; import TableSettingsSheet from '@/components/TableSettingsSheet.vue'; import TaskList from '@/components/TaskList.vue'; import EventBus from '@/event-bus'; import TaskStatus from '@/components/TaskStatus.vue'; import socket from '@/socket'; +import NewTaskDialog from '@/components/NewTaskDialog.vue'; import { TEMPLATE_TYPE_ACTION_TITLES, TEMPLATE_TYPE_ICONS } from '../../lib/constants'; export default { components: { - TemplateForm, TaskForm, TableSettingsSheet, TaskStatus, TaskLink, TaskList, EditViewsForm, + TemplateForm, + TableSettingsSheet, + TaskStatus, + TaskLink, + TaskList, + EditViewsForm, + NewTaskDialog, }, mixins: [ItemListPageBase], async created() { @@ -383,13 +372,6 @@ export default { }); }, - onTaskCreated(e) { - EventBus.$emit('i-show-task', { - taskId: e.item.id, - }); - this.itemId = null; - }, - showTaskLog(taskId) { EventBus.$emit('i-show-task', { taskId, From 31e532548b403d3b3735dad726de2fdcbde2bf3a Mon Sep 17 00:00:00 2001 From: Denis Gukov Date: Sat, 29 Oct 2022 22:05:42 +0500 Subject: [PATCH 56/58] fix(fe): new task dialog --- web/src/components/NewTaskDialog.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/src/components/NewTaskDialog.vue b/web/src/components/NewTaskDialog.vue index 4066fe5e..9c579cd9 100644 --- a/web/src/components/NewTaskDialog.vue +++ b/web/src/components/NewTaskDialog.vue @@ -3,8 +3,8 @@ v-model="dialog" :save-button-text="TEMPLATE_TYPE_ACTION_TITLES[templateType]" title="New Task" - @save="close" - @close="close" + @save="closeDialog" + @close="closeDialog" >