From 93393682329381084ef3416b0cd9a0a5ae8d6122 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 16 Aug 2023 16:23:09 +0100 Subject: [PATCH 001/115] switch to new data source --- .../components/dashboard/line_chart.vue | 4 +- .../composables/use_csv_converter.ts | 2 +- _dashboard/DotNetPerfMonitor/pnpm-lock.yaml | 2073 +++++++++-------- 3 files changed, 1094 insertions(+), 985 deletions(-) diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue index 33d2bfe..36580ce 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue @@ -13,8 +13,8 @@ const props = defineProps({ scenario: String }) -const path = 'https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv' - +const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/nuget.csv" +const file = '../../../../data/nuget.csv' const converted = await useCsvConverter(path) const scenario = useAlphaScenario() const filtered = useScenarioFilter(converted, props.scenario) diff --git a/_dashboard/DotNetPerfMonitor/composables/use_csv_converter.ts b/_dashboard/DotNetPerfMonitor/composables/use_csv_converter.ts index 54cdae2..5fef38c 100644 --- a/_dashboard/DotNetPerfMonitor/composables/use_csv_converter.ts +++ b/_dashboard/DotNetPerfMonitor/composables/use_csv_converter.ts @@ -15,6 +15,6 @@ export default async function useCsvConverter(csvPath: string) { }); const str = JSON.stringify(parsed.data); const json = JSON.parse(str); - //console.log(`json: ${str}`); + console.log(`json: ${str}`); return json; } diff --git a/_dashboard/DotNetPerfMonitor/pnpm-lock.yaml b/_dashboard/DotNetPerfMonitor/pnpm-lock.yaml index 0c5f9e1..7486fd0 100644 --- a/_dashboard/DotNetPerfMonitor/pnpm-lock.yaml +++ b/_dashboard/DotNetPerfMonitor/pnpm-lock.yaml @@ -36,13 +36,13 @@ dependencies: devDependencies: '@element-plus/nuxt': specifier: ^1.0.5 - version: 1.0.5(@element-plus/icons-vue@2.1.0)(element-plus@2.3.7) + version: 1.0.5(@element-plus/icons-vue@2.1.0)(element-plus@2.3.9) '@nuxt/devtools': specifier: latest - version: 0.7.5(nuxt@3.6.2)(vite@4.4.1) + version: 0.7.5(nuxt@3.6.2)(vite@4.4.9) '@nuxthq/ui': specifier: ^2.5.0 - version: 2.5.0(vue@3.3.4)(webpack@5.88.1) + version: 2.5.0(vue@3.3.4)(webpack@5.88.2) '@nuxtjs/google-fonts': specifier: ^3.0.1 version: 3.0.1 @@ -88,13 +88,13 @@ packages: d3-transition: 3.0.1(d3-selection@3.0.0) d3-voronoi-treemap: 1.1.2 flatpickr: 4.6.13 - markerjs2: 2.29.5 + markerjs2: 2.29.7 pdfmake: 0.2.7 polylabel: 1.1.0 regression: 2.0.1 seedrandom: 3.0.5 svg-arc-to-cubic-bezier: 3.2.0 - tslib: 2.6.0 + tslib: 2.6.1 dev: false /@ampproject/remapping@2.2.1: @@ -102,7 +102,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 dev: true /@antfu/install-pkg@0.1.1: @@ -112,52 +112,53 @@ packages: find-up: 5.0.0 dev: true - /@antfu/utils@0.7.5: - resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==} + /@antfu/utils@0.7.6: + resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} dev: true - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + /@babel/code-frame@7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.22.10 + chalk: 2.4.2 dev: true - /@babel/compat-data@7.22.6: - resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.22.8: - resolution: {integrity: sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==} + /@babel/core@7.22.10: + resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.7 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.8) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.7 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10) + '@babel/helpers': 7.22.10 + '@babel/parser': 7.22.10 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/generator@7.22.7: - resolution: {integrity: sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==} + /@babel/generator@7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 dev: true @@ -165,41 +166,36 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true - /@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.8): - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + /@babel/helper-compilation-targets@7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.8 + '@babel/compat-data': 7.22.9 '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 + browserslist: 4.21.10 lru-cache: 5.1.1 + semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.6(@babel/core@7.22.8): - resolution: {integrity: sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==} + /@babel/helper-create-class-features-plugin@7.22.10(@babel/core@7.22.10): + resolution: {integrity: sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.10) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@nicolo-ribaudo/semver-v6': 6.3.3 - transitivePeerDependencies: - - supports-color + semver: 6.3.1 dev: true /@babel/helper-environment-visitor@7.22.5: @@ -212,51 +208,49 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.5 - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-member-expression-to-functions@7.22.5: resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true - /@babel/helper-module-transforms@7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: + '@babel/core': 7.22.10 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -264,39 +258,37 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.10): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: + '@babel/core': 7.22.10 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 dev: true /@babel/helper-string-parser@7.22.5: @@ -312,19 +304,19 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.22.6: - resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + /@babel/helpers@7.22.10: + resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/highlight@7.22.10: + resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.5 @@ -332,66 +324,64 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.22.7: - resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + /@babel/parser@7.22.10: + resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.22.10 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.8): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.10): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.8): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.8): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.10): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.22.8): - resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} + /@babel/plugin-transform-typescript@7.22.10(@babel/core@7.22.10): + resolution: {integrity: sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.6(@babel/core@7.22.8) + '@babel/helper-create-class-features-plugin': 7.22.10(@babel/core@7.22.10) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.8) - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.10) dev: true - /@babel/runtime@7.22.6: - resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + /@babel/runtime@7.22.10: + resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 dev: false - /@babel/standalone@7.22.8: - resolution: {integrity: sha512-Bm9Sn+FfDqcvxYo/lz5BFo/PWBcjhxD6rtifkchFes/rU8/u4FacCFY/WdqwPtycH54THlXqMYMjaWigQaMpYA==} + /@babel/standalone@7.22.10: + resolution: {integrity: sha512-VmK2sWxUTfDDh9mPfCtFJPIehZToteqK+Zpwq8oJUjJ+WeeKIFTTQIrDzH7jEdom+cAaaguU7FI/FBsBWFkIeQ==} engines: {node: '>=6.9.0'} dev: true @@ -399,31 +389,31 @@ packages: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/code-frame': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 dev: true - /@babel/traverse@7.22.8: - resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + /@babel/traverse@7.22.10: + resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.7 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + /@babel/types@7.22.10: + resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.22.5 @@ -436,28 +426,28 @@ packages: mime: 3.0.0 dev: true - /@csstools/cascade-layer-name-parser@1.0.3(@csstools/css-parser-algorithms@2.3.0)(@csstools/css-tokenizer@2.1.1): - resolution: {integrity: sha512-ks9ysPP8012j90EQCCFtDsQIXOTCOpTQFIyyoRku06y8CXtUQ+8bXI8KVm9Q9ovwDUVthWuWKZWJD3u1rwnEfw==} + /@csstools/cascade-layer-name-parser@1.0.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0): + resolution: {integrity: sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.3.0 - '@csstools/css-tokenizer': ^2.1.1 + '@csstools/css-parser-algorithms': ^2.3.1 + '@csstools/css-tokenizer': ^2.2.0 dependencies: - '@csstools/css-parser-algorithms': 2.3.0(@csstools/css-tokenizer@2.1.1) - '@csstools/css-tokenizer': 2.1.1 + '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0) + '@csstools/css-tokenizer': 2.2.0 dev: true - /@csstools/css-parser-algorithms@2.3.0(@csstools/css-tokenizer@2.1.1): - resolution: {integrity: sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA==} + /@csstools/css-parser-algorithms@2.3.1(@csstools/css-tokenizer@2.2.0): + resolution: {integrity: sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-tokenizer': ^2.1.1 + '@csstools/css-tokenizer': ^2.2.0 dependencies: - '@csstools/css-tokenizer': 2.1.1 + '@csstools/css-tokenizer': 2.2.0 dev: true - /@csstools/css-tokenizer@2.1.1: - resolution: {integrity: sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==} + /@csstools/css-tokenizer@2.2.0: + resolution: {integrity: sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==} engines: {node: ^14 || ^16 || >=18} dev: true @@ -475,13 +465,13 @@ packages: engines: {node: '>=10'} dev: true - /@egoist/tailwindcss-icons@1.1.0(tailwindcss@3.3.2): + /@egoist/tailwindcss-icons@1.1.0(tailwindcss@3.3.3): resolution: {integrity: sha512-3zIBtwMH4viBDtDF7nDgGOFS/mxu4qtfhimeyyGlK+RHJu26YaLhHrJf6NaEK5Gwxt8chNntJwslklR+66AErg==} peerDependencies: tailwindcss: '*' dependencies: '@iconify/utils': 2.1.7 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 transitivePeerDependencies: - supports-color dev: true @@ -494,17 +484,17 @@ packages: vue: 3.3.4 dev: true - /@element-plus/nuxt@1.0.5(@element-plus/icons-vue@2.1.0)(element-plus@2.3.7): + /@element-plus/nuxt@1.0.5(@element-plus/icons-vue@2.1.0)(element-plus@2.3.9): resolution: {integrity: sha512-FdU0jxAOYaHvbQpW0xQ1/bO1tvFKVS12Jonfr5X0JSe6CiN23zosoDL3Ca94NBaTqwHo8Mrbjzo8h7z3Q4stng==} peerDependencies: '@element-plus/icons-vue': '>=0.2.6' element-plus: '>=2' dependencies: '@element-plus/icons-vue': 2.1.0(vue@3.3.4) - '@nuxt/kit': 3.6.2 - element-plus: 2.3.7(vue@3.3.4) + '@nuxt/kit': 3.6.5 + element-plus: 2.3.9(vue@3.3.4) magic-string: 0.27.0 - unplugin: 1.3.2 + unplugin: 1.4.0 transitivePeerDependencies: - rollup - supports-color @@ -514,7 +504,7 @@ packages: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.6.2 + get-tsconfig: 4.7.0 dev: true /@esbuild-kit/core-utils@3.1.0: @@ -528,7 +518,7 @@ packages: resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} dependencies: '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.6.2 + get-tsconfig: 4.7.0 dev: true /@esbuild/android-arm64@0.17.19: @@ -540,8 +530,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -558,8 +548,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -576,8 +566,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -594,8 +584,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -612,8 +602,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -630,8 +620,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -648,8 +638,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -666,8 +656,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -684,8 +674,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -702,8 +692,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -720,8 +710,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -738,8 +728,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -756,8 +746,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -774,8 +764,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -792,8 +782,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -810,8 +800,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -828,8 +818,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -846,8 +836,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -864,8 +854,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -882,8 +872,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -900,8 +890,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -918,8 +908,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -927,14 +917,21 @@ packages: dev: true optional: true - /@floating-ui/core@1.3.1: - resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} + /@floating-ui/core@1.4.1: + resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} + dependencies: + '@floating-ui/utils': 0.1.1 dev: true - /@floating-ui/dom@1.4.4: - resolution: {integrity: sha512-21hhDEPOiWkGp0Ys4Wi6Neriah7HweToKra626CIK712B5m9qkdz54OP9gVldUg+URnBTpv/j/bi/skmGdstXQ==} + /@floating-ui/dom@1.5.1: + resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} dependencies: - '@floating-ui/core': 1.3.1 + '@floating-ui/core': 1.4.1 + '@floating-ui/utils': 0.1.1 + dev: true + + /@floating-ui/utils@0.1.1: + resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} dev: true /@foliojs-fork/fontkit@1.9.1: @@ -945,7 +942,7 @@ packages: brotli: 1.3.3 browserify-optional: 1.0.1 clone: 1.0.4 - deep-equal: 1.0.1 + deep-equal: 1.1.1 dfa: 1.2.0 tiny-inflate: 1.0.3 unicode-properties: 1.4.1 @@ -983,8 +980,8 @@ packages: '@hapi/hoek': 9.3.0 dev: true - /@headlessui/vue@1.7.14(vue@3.3.4): - resolution: {integrity: sha512-aL9U9Sa7wdOzlrfjx6EjMIYNRCma5mngWcWzQBcHFwznpRZ8g/QZ/AYFtRDrZZUw22Ttttja4D7ZRXFwhONewA==} + /@headlessui/vue@1.7.15(vue@3.3.4): + resolution: {integrity: sha512-3ozVEgQ8mw09nWvUPN+8S6C8l3SM0lVT1aEN/+oP5Y4LF0WNMM9UrVisVTN9LLQ06v/X3EFA0blyL/vg8XNZlg==} engines: {node: '>=10'} peerDependencies: vue: ^3.2.0 @@ -992,8 +989,8 @@ packages: vue: 3.3.4 dev: true - /@iconify-json/heroicons@1.1.11: - resolution: {integrity: sha512-Autw98FvUTmBCgb4CuKZ7iQQ2633YBCmcCbAbVNU9hAo6vms9uVcbtrAQt/qlB+qzNi52PV3DWDiRtJgmPeZIw==} + /@iconify-json/heroicons@1.1.12: + resolution: {integrity: sha512-9tsn/xUU+HX56OngEDRTej4LzVm2qcMVLvEJ+q+1ZJBO4sjMDxycmbHq16HGl1LOeVG21fq4jNZHslVveVCwSQ==} dependencies: '@iconify/types': 2.0.0 dev: true @@ -1006,7 +1003,7 @@ packages: resolution: {integrity: sha512-P8S3z/L1LcV4Qem9AoCfVAaTFGySEMzFEY4CHZLkfRj0Fv9LiR+AwjDgrDrzyI93U2L2mg9JHsbTJ52mF8suNw==} dependencies: '@antfu/install-pkg': 0.1.1 - '@antfu/utils': 0.7.5 + '@antfu/utils': 0.7.6 '@iconify/types': 2.0.0 debug: 4.3.4 kolorist: 1.8.0 @@ -1037,11 +1034,11 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true @@ -1054,21 +1051,17 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + '@jridgewell/trace-mapping': 0.3.19 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@koa/router@9.4.0: @@ -1088,11 +1081,11 @@ packages: resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} dev: false - /@mapbox/node-pre-gyp@1.0.10: - resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true dependencies: - detect-libc: 2.0.1 + detect-libc: 2.0.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.6.12 @@ -1113,11 +1106,6 @@ packages: is-promise: 4.0.0 dev: true - /@nicolo-ribaudo/semver-v6@6.3.3: - resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} - hasBin: true - dev: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1152,7 +1140,7 @@ packages: dependencies: '@npmcli/promise-spawn': 6.0.2 lru-cache: 7.18.3 - npm-pick-manifest: 8.0.1 + npm-pick-manifest: 8.0.2 proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 @@ -1200,7 +1188,7 @@ packages: resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} dev: true - /@nuxt/devtools-kit@0.7.5(nuxt@3.6.2)(vite@4.4.1): + /@nuxt/devtools-kit@0.7.5(nuxt@3.6.2)(vite@4.4.9): resolution: {integrity: sha512-Zadd4s2vHlFQYRBLqmCADLMs1qxht8KKCZzfdhEdCAHby/s3EkfnYIuRUBlrfuAuNxa4cyExKFpeDpQ67N5fIQ==} peerDependencies: nuxt: ^3.6.5 @@ -1210,7 +1198,7 @@ packages: '@nuxt/schema': 3.6.5 execa: 7.2.0 nuxt: 3.6.2(@types/node@18.0.0) - vite: 4.4.1(@types/node@18.0.0) + vite: 4.4.9(@types/node@18.0.0) transitivePeerDependencies: - rollup - supports-color @@ -1233,26 +1221,26 @@ packages: semver: 7.5.4 dev: true - /@nuxt/devtools@0.7.5(nuxt@3.6.2)(vite@4.4.1): + /@nuxt/devtools@0.7.5(nuxt@3.6.2)(vite@4.4.9): resolution: {integrity: sha512-Uxjow3J0QcYnbgMA8XR/1myr6Nw8P5vA/PMxTTj8LKqSZhd2+BgjnAg1gRUmMeKQCvkUfNOD+AqTK2HOBdHaBw==} hasBin: true peerDependencies: nuxt: ^3.6.5 vite: '*' dependencies: - '@nuxt/devtools-kit': 0.7.5(nuxt@3.6.2)(vite@4.4.1) + '@nuxt/devtools-kit': 0.7.5(nuxt@3.6.2)(vite@4.4.9) '@nuxt/devtools-wizard': 0.7.5 '@nuxt/kit': 3.6.5 birpc: 0.2.12 boxen: 7.1.1 consola: 3.2.3 - error-stack-parser-es: 0.1.0 + error-stack-parser-es: 0.1.1 execa: 7.2.0 - fast-folder-size: 2.1.0 + fast-folder-size: 2.2.0 fast-glob: 3.3.1 get-port-please: 3.0.1 global-dirs: 3.0.1 - h3: 1.7.1 + h3: 1.8.0 hookable: 5.5.3 image-meta: 0.1.1 is-installed-globally: 0.4.0 @@ -1269,10 +1257,10 @@ packages: rc9: 2.1.1 semver: 7.5.4 sirv: 2.0.3 - unimport: 3.1.3 - vite: 4.4.1(@types/node@18.0.0) - vite-plugin-inspect: 0.7.35(@nuxt/kit@3.6.5)(vite@4.4.1) - vite-plugin-vue-inspector: 3.5.0(vite@4.4.1) + unimport: 3.1.3(rollup@3.28.0) + vite: 4.4.9(@types/node@18.0.0) + vite-plugin-inspect: 0.7.38(@nuxt/kit@3.6.5)(vite@4.4.9) + vite-plugin-vue-inspector: 3.6.0(vite@4.4.9) wait-on: 7.0.1 which: 3.0.1 ws: 8.13.0 @@ -1302,10 +1290,10 @@ packages: pathe: 1.1.1 pkg-types: 1.0.3 scule: 1.0.0 - semver: 7.5.3 + semver: 7.5.4 unctx: 2.3.1 - unimport: 3.0.14(rollup@3.26.2) - untyped: 1.3.2 + unimport: 3.1.3(rollup@3.28.0) + untyped: 1.4.0 transitivePeerDependencies: - rollup - supports-color @@ -1330,24 +1318,24 @@ packages: scule: 1.0.0 semver: 7.5.4 unctx: 2.3.1 - unimport: 3.1.0 - untyped: 1.3.2 + unimport: 3.1.3(rollup@3.28.0) + untyped: 1.4.0 transitivePeerDependencies: - rollup - supports-color dev: true - /@nuxt/postcss8@1.1.3(webpack@5.88.1): + /@nuxt/postcss8@1.1.3(webpack@5.88.2): resolution: {integrity: sha512-CdHtErhvQwueNZPBOmlAAKrNCK7aIpZDYhtS7TzXlSgPHHox1g3cSlf+Ke9oB/8t4mNNjdB+prclme2ibuCOEA==} dependencies: - autoprefixer: 10.4.14(postcss@8.4.25) - css-loader: 5.2.7(webpack@5.88.1) + autoprefixer: 10.4.15(postcss@8.4.28) + css-loader: 5.2.7(webpack@5.88.2) defu: 3.2.2 - postcss: 8.4.25 - postcss-import: 13.0.0(postcss@8.4.25) - postcss-loader: 4.3.0(postcss@8.4.25)(webpack@5.88.1) - postcss-url: 10.1.3(postcss@8.4.25) - semver: 7.5.3 + postcss: 8.4.28 + postcss-import: 13.0.0(postcss@8.4.28) + postcss-loader: 4.3.0(postcss@8.4.28)(webpack@5.88.2) + postcss-url: 10.1.3(postcss@8.4.28) + semver: 7.5.4 transitivePeerDependencies: - webpack dev: true @@ -1362,9 +1350,9 @@ packages: pkg-types: 1.0.3 postcss-import-resolver: 2.0.0 std-env: 3.3.3 - ufo: 1.1.2 - unimport: 3.0.14(rollup@3.26.2) - untyped: 1.3.2 + ufo: 1.2.0 + unimport: 3.1.3(rollup@3.28.0) + untyped: 1.4.0 transitivePeerDependencies: - rollup - supports-color @@ -1380,25 +1368,25 @@ packages: pkg-types: 1.0.3 postcss-import-resolver: 2.0.0 std-env: 3.3.3 - ufo: 1.1.2 - unimport: 3.1.0 - untyped: 1.3.2 + ufo: 1.2.0 + unimport: 3.1.3(rollup@3.28.0) + untyped: 1.4.0 transitivePeerDependencies: - rollup - supports-color dev: true - /@nuxt/telemetry@2.3.1: - resolution: {integrity: sha512-7kr2VDirYIXqyTHqaiWCrfQLgUjAa4qAHzykJOspMCFJWalHU9SVfnv+cTOKGqoXQ4TWOCd09tEd7sLlMFTEqw==} + /@nuxt/telemetry@2.4.1: + resolution: {integrity: sha512-Cj+4sXjO5pZNW2sX7Y+djYpf4pZwgYF3rV/YHLWIOq9nAjo2UcDXjh1z7qnhkoUkvJN3lHnvhnCNhfAioe6k/A==} hasBin: true dependencies: - '@nuxt/kit': 3.6.2 + '@nuxt/kit': 3.6.5 chalk: 5.3.0 ci-info: 3.8.0 consola: 3.2.3 create-require: 1.1.1 defu: 6.1.2 - destr: 2.0.0 + destr: 2.0.1 dotenv: 16.3.1 fs-extra: 11.1.1 git-url-parse: 13.1.0 @@ -1406,9 +1394,10 @@ packages: jiti: 1.19.1 mri: 1.2.0 nanoid: 4.0.2 - node-fetch: 3.3.1 + node-fetch: 3.3.2 ofetch: 1.1.1 parse-git-config: 3.0.0 + pathe: 1.1.1 rc9: 2.1.1 std-env: 3.3.3 transitivePeerDependencies: @@ -1416,8 +1405,8 @@ packages: - supports-color dev: true - /@nuxt/ui-templates@1.2.0: - resolution: {integrity: sha512-MSZza7dxccNb/p7nuzGF8/m4POaFpHzVhNdR7f4xahOpH7Ja02lFeYR+rHtoHIJC0yym4qriqv0mQ+Qf/R61bQ==} + /@nuxt/ui-templates@1.3.1: + resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==} dev: true /@nuxt/vite-builder@3.6.2(@types/node@18.0.0)(vue@3.3.4): @@ -1427,36 +1416,36 @@ packages: vue: ^3.3.4 dependencies: '@nuxt/kit': 3.6.2 - '@rollup/plugin-replace': 5.0.2(rollup@3.26.2) + '@rollup/plugin-replace': 5.0.2(rollup@3.28.0) '@vitejs/plugin-vue': 4.2.3(vite@4.3.9)(vue@3.3.4) '@vitejs/plugin-vue-jsx': 3.0.1(vite@4.3.9)(vue@3.3.4) - autoprefixer: 10.4.14(postcss@8.4.25) + autoprefixer: 10.4.15(postcss@8.4.28) clear: 0.1.0 consola: 3.2.3 - cssnano: 6.0.1(postcss@8.4.25) + cssnano: 6.0.1(postcss@8.4.28) defu: 6.1.2 - esbuild: 0.18.11 + esbuild: 0.18.20 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 externality: 1.0.2 fs-extra: 11.1.1 get-port-please: 3.0.1 - h3: 1.7.1 + h3: 1.8.0 knitwork: 1.0.0 - magic-string: 0.30.1 + magic-string: 0.30.2 mlly: 1.4.0 - ohash: 1.1.2 + ohash: 1.1.3 pathe: 1.1.1 perfect-debounce: 1.0.0 pkg-types: 1.0.3 - postcss: 8.4.25 - postcss-import: 15.1.0(postcss@8.4.25) - postcss-url: 10.1.3(postcss@8.4.25) - rollup-plugin-visualizer: 5.9.2(rollup@3.26.2) + postcss: 8.4.28 + postcss-import: 15.1.0(postcss@8.4.28) + postcss-url: 10.1.3(postcss@8.4.28) + rollup-plugin-visualizer: 5.9.2(rollup@3.28.0) std-env: 3.3.3 - strip-literal: 1.0.1 - ufo: 1.1.2 - unplugin: 1.3.2 + strip-literal: 1.3.0 + ufo: 1.2.0 + unplugin: 1.4.0 vite: 4.3.9(@types/node@18.0.0) vite-node: 0.32.4(@types/node@18.0.0) vite-plugin-checker: 0.6.1(vite@4.3.9) @@ -1481,28 +1470,28 @@ packages: - vue-tsc dev: true - /@nuxthq/ui@2.5.0(vue@3.3.4)(webpack@5.88.1): + /@nuxthq/ui@2.5.0(vue@3.3.4)(webpack@5.88.2): resolution: {integrity: sha512-KQ+bf8HyyIH1gvuja8NwNRZetyqrRT3fFDipohWlvCrOpds2kLUUhF6SMOaVTWWzugKLUhIDCsDFsAMX/4I9Nw==} engines: {node: '>=v16.14.0'} dependencies: - '@egoist/tailwindcss-icons': 1.1.0(tailwindcss@3.3.2) - '@headlessui/vue': 1.7.14(vue@3.3.4) - '@iconify-json/heroicons': 1.1.11 - '@nuxt/kit': 3.6.2 + '@egoist/tailwindcss-icons': 1.1.0(tailwindcss@3.3.3) + '@headlessui/vue': 1.7.15(vue@3.3.4) + '@iconify-json/heroicons': 1.1.12 + '@nuxt/kit': 3.6.5 '@nuxtjs/color-mode': 3.3.0 - '@nuxtjs/tailwindcss': 6.8.0(webpack@5.88.1) + '@nuxtjs/tailwindcss': 6.8.0(webpack@5.88.2) '@popperjs/core': 2.11.8 - '@tailwindcss/aspect-ratio': 0.4.2(tailwindcss@3.3.2) - '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.3.2) - '@tailwindcss/forms': 0.5.3(tailwindcss@3.3.2) - '@tailwindcss/typography': 0.5.9(tailwindcss@3.3.2) - '@vueuse/core': 10.2.1(vue@3.3.4) - '@vueuse/integrations': 10.2.1(fuse.js@6.6.2)(vue@3.3.4) - '@vueuse/math': 10.2.1(vue@3.3.4) + '@tailwindcss/aspect-ratio': 0.4.2(tailwindcss@3.3.3) + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.3.3) + '@tailwindcss/forms': 0.5.4(tailwindcss@3.3.3) + '@tailwindcss/typography': 0.5.9(tailwindcss@3.3.3) + '@vueuse/core': 10.3.0(vue@3.3.4) + '@vueuse/integrations': 10.3.0(fuse.js@6.6.2)(vue@3.3.4) + '@vueuse/math': 10.3.0(vue@3.3.4) defu: 6.1.2 fuse.js: 6.6.2 lodash-es: 4.17.21 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 transitivePeerDependencies: - '@vue/composition-api' - async-validator @@ -1526,7 +1515,7 @@ packages: /@nuxtjs/color-mode@3.3.0: resolution: {integrity: sha512-YVFNmTISke1eL7uk5p9I1suOsM222FxrqKoF13HS4x94OKCWwPLLeTCEzHZ8orzKnaFUbCXpuL4pRv8gvW+0Kw==} dependencies: - '@nuxt/kit': 3.6.2 + '@nuxt/kit': 3.6.5 lodash.template: 4.5.0 pathe: 1.1.1 transitivePeerDependencies: @@ -1537,37 +1526,37 @@ packages: /@nuxtjs/google-fonts@3.0.1: resolution: {integrity: sha512-9W5jZhpJ4UTmiPebljdoxs+ju89rOBVD5gb0sPRe73BVXCUUv46lV2Q0ynPZPsnono5WlTB6nyZbOCECa7IWDQ==} dependencies: - '@nuxt/kit': 3.6.2 - google-fonts-helper: 3.3.0 + '@nuxt/kit': 3.6.5 + google-fonts-helper: 3.3.1 pathe: 1.1.1 transitivePeerDependencies: - rollup - supports-color dev: true - /@nuxtjs/tailwindcss@6.8.0(webpack@5.88.1): + /@nuxtjs/tailwindcss@6.8.0(webpack@5.88.2): resolution: {integrity: sha512-jzuvD1nfA2BPnSbHtKK0aiI51ndMa7lNGL1iDEFuEPsltzilZ9ED7zOP6niGTrImg0n5Yt4GEJpixi6yWwp9Hw==} dependencies: - '@nuxt/kit': 3.6.2 - '@nuxt/postcss8': 1.1.3(webpack@5.88.1) - autoprefixer: 10.4.14(postcss@8.4.25) + '@nuxt/kit': 3.6.5 + '@nuxt/postcss8': 1.1.3(webpack@5.88.2) + autoprefixer: 10.4.15(postcss@8.4.28) chokidar: 3.5.3 clear-module: 4.1.2 colorette: 2.0.20 cookie-es: 1.0.0 defu: 6.1.2 - destr: 2.0.0 - h3: 1.7.1 + destr: 2.0.1 + h3: 1.8.0 iron-webcrypto: 0.7.1 micromatch: 4.0.5 pathe: 1.1.1 - postcss: 8.4.25 - postcss-custom-properties: 13.2.1(postcss@8.4.25) - postcss-nesting: 11.3.0(postcss@8.4.25) + postcss: 8.4.28 + postcss-custom-properties: 13.3.0(postcss@8.4.28) + postcss-nesting: 11.3.0(postcss@8.4.28) radix3: 1.0.1 - tailwind-config-viewer: 1.7.2(tailwindcss@3.3.2) - tailwindcss: 3.3.2 - ufo: 1.1.2 + tailwind-config-viewer: 1.7.2(tailwindcss@3.3.3) + tailwindcss: 3.3.3 + ufo: 1.2.0 uncrypto: 0.1.3 transitivePeerDependencies: - rollup @@ -1576,6 +1565,126 @@ packages: - webpack dev: true + /@parcel/watcher-android-arm64@2.2.0: + resolution: {integrity: sha512-nU2wh00CTQT9rr1TIKTjdQ9lAGYpmz6XuKw0nAwAN+S2A5YiD55BK1u+E5WMCT8YOIDe/n6gaj4o/Bi9294SSQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-darwin-arm64@2.2.0: + resolution: {integrity: sha512-cJl0UZDcodciy3TDMomoK/Huxpjlkkim3SyMgWzjovHGOZKNce9guLz2dzuFwfObBFCjfznbFMIvAZ5syXotYw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-darwin-x64@2.2.0: + resolution: {integrity: sha512-QI77zxaGrCV1StKcoRYfsUfmUmvPMPfQrubkBBy5XujV2fwaLgZivQOTQMBgp5K2+E19u1ufpspKXAPqSzpbyg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm-glibc@2.2.0: + resolution: {integrity: sha512-I2GPBcAXazPzabCmfsa3HRRW+MGlqxYd8g8RIueJU+a4o5nyNZDz0CR1cu0INT0QSQXEZV7w6UE8Hz9CF8u3Pg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.2.0: + resolution: {integrity: sha512-St5mlfp+2lS9AmgixUqfwJa/DwVmTCJxC1HcOubUTz6YFOKIlkHCeUa1Bxi4E/tR/HSez8+heXHL8HQkJ4Bd8g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-arm64-musl@2.2.0: + resolution: {integrity: sha512-jS+qfhhoOBVWwMLP65MaG8xdInMK30pPW8wqTCg2AAuVJh5xepMbzkhHJ4zURqHiyY3EiIRuYu4ONJKCxt8iqA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-x64-glibc@2.2.0: + resolution: {integrity: sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-linux-x64-musl@2.2.0: + resolution: {integrity: sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-wasm@2.3.0-alpha.1: + resolution: {integrity: sha512-wo6065l1MQ6SJPPchYw/q8J+pFL40qBXLu4Td2CXeQ/+mUk8NenNqC75P/P1Cyvpam0kfk91iszd+XL+xKDQww==} + engines: {node: '>= 10.0.0'} + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.5 + napi-wasm: 1.1.0 + dev: true + + /@parcel/watcher-win32-arm64@2.2.0: + resolution: {integrity: sha512-z225cPn3aygJsyVUOWwfyW+fY0Tvk7N3XCOl66qUPFxpbuXeZuiuuJemmtm8vxyqa3Ur7peU/qJxrpC64aeI7Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher-win32-x64@2.2.0: + resolution: {integrity: sha512-JqGW0RJ61BkKx+yYzIURt9s53P7xMVbv0uxYPzAXLBINGaFmkIKSuUPyBVfy8TMbvp93lvF4SPBNDzVRJfvgOw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@parcel/watcher@2.2.0: + resolution: {integrity: sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==} + engines: {node: '>= 10.0.0'} + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.0.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.2.0 + '@parcel/watcher-darwin-arm64': 2.2.0 + '@parcel/watcher-darwin-x64': 2.2.0 + '@parcel/watcher-linux-arm-glibc': 2.2.0 + '@parcel/watcher-linux-arm64-glibc': 2.2.0 + '@parcel/watcher-linux-arm64-musl': 2.2.0 + '@parcel/watcher-linux-x64-glibc': 2.2.0 + '@parcel/watcher-linux-x64-musl': 2.2.0 + '@parcel/watcher-win32-arm64': 2.2.0 + '@parcel/watcher-win32-x64': 2.2.0 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1591,7 +1700,7 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: true - /@rollup/plugin-alias@5.0.0(rollup@3.26.2): + /@rollup/plugin-alias@5.0.0(rollup@3.28.0): resolution: {integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1600,12 +1709,12 @@ packages: rollup: optional: true dependencies: - rollup: 3.26.2 + rollup: 3.28.0 slash: 4.0.0 dev: true - /@rollup/plugin-commonjs@25.0.2(rollup@3.26.2): - resolution: {integrity: sha512-NGTwaJxIO0klMs+WSFFtBP7b9TdTJ3K76HZkewT8/+yHzMiUGVQgaPtLQxNVYIgT5F7lxkEyVID+yS3K7bhCow==} + /@rollup/plugin-commonjs@25.0.4(rollup@3.28.0): + resolution: {integrity: sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -1613,16 +1722,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 - rollup: 3.26.2 + rollup: 3.28.0 dev: true - /@rollup/plugin-inject@5.0.3(rollup@3.26.2): + /@rollup/plugin-inject@5.0.3(rollup@3.28.0): resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1631,13 +1740,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) estree-walker: 2.0.2 magic-string: 0.27.0 - rollup: 3.26.2 + rollup: 3.28.0 dev: true - /@rollup/plugin-json@6.0.0(rollup@3.26.2): + /@rollup/plugin-json@6.0.0(rollup@3.28.0): resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1646,11 +1755,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) - rollup: 3.26.2 + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) + rollup: 3.28.0 dev: true - /@rollup/plugin-node-resolve@15.1.0(rollup@3.26.2): + /@rollup/plugin-node-resolve@15.1.0(rollup@3.28.0): resolution: {integrity: sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1659,16 +1768,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 - resolve: 1.22.2 - rollup: 3.26.2 + resolve: 1.22.4 + rollup: 3.28.0 dev: true - /@rollup/plugin-replace@5.0.2(rollup@3.26.2): + /@rollup/plugin-replace@5.0.2(rollup@3.28.0): resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1677,12 +1786,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) magic-string: 0.27.0 - rollup: 3.26.2 + rollup: 3.28.0 dev: true - /@rollup/plugin-terser@0.4.3(rollup@3.26.2): + /@rollup/plugin-terser@0.4.3(rollup@3.28.0): resolution: {integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1691,13 +1800,13 @@ packages: rollup: optional: true dependencies: - rollup: 3.26.2 + rollup: 3.28.0 serialize-javascript: 6.0.1 smob: 1.4.0 - terser: 5.18.2 + terser: 5.19.2 dev: true - /@rollup/plugin-wasm@6.1.3(rollup@3.26.2): + /@rollup/plugin-wasm@6.1.3(rollup@3.28.0): resolution: {integrity: sha512-7ItTTeyauE6lwdDtQWceEHZ9+txbi4RRy0mYPFn9BW7rD7YdgBDu7HTHsLtHrRzJc313RM/1m6GKgV3np/aEaw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1706,7 +1815,7 @@ packages: rollup: optional: true dependencies: - rollup: 3.26.2 + rollup: 3.28.0 dev: true /@rollup/pluginutils@4.2.1: @@ -1717,8 +1826,8 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.2(rollup@3.26.2): - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + /@rollup/pluginutils@5.0.3(rollup@3.28.0): + resolution: {integrity: sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0 @@ -1729,7 +1838,7 @@ packages: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.26.2 + rollup: 3.28.0 dev: true /@sideway/address@4.1.4: @@ -1746,16 +1855,34 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true - /@sigstore/protobuf-specs@0.1.0: - resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} + /@sigstore/bundle@1.1.0: + resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@sigstore/protobuf-specs': 0.2.0 + dev: true + + /@sigstore/protobuf-specs@0.2.0: + resolution: {integrity: sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@sigstore/sign@1.0.0: + resolution: {integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.0 + make-fetch-happen: 11.1.1 + transitivePeerDependencies: + - supports-color dev: true - /@sigstore/tuf@1.0.2: - resolution: {integrity: sha512-vjwcYePJzM01Ha6oWWZ9gNcdIgnzyFxfqfWzph483DPJTH8Tb7f7bQRRll3CYVkyH56j0AgcPAcl6Vg95DPF+Q==} + /@sigstore/tuf@1.0.3: + resolution: {integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - '@sigstore/protobuf-specs': 0.1.0 + '@sigstore/protobuf-specs': 0.2.0 tuf-js: 1.1.7 transitivePeerDependencies: - supports-color @@ -1765,32 +1892,32 @@ packages: resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} dev: true - /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.3.2): + /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.3.3): resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' dependencies: - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 dev: true - /@tailwindcss/container-queries@0.1.1(tailwindcss@3.3.2): + /@tailwindcss/container-queries@0.1.1(tailwindcss@3.3.3): resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: tailwindcss: '>=3.2.0' dependencies: - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 dev: true - /@tailwindcss/forms@0.5.3(tailwindcss@3.3.2): - resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==} + /@tailwindcss/forms@0.5.4(tailwindcss@3.3.3): + resolution: {integrity: sha512-YAm12D3R7/9Mh4jFbYSMnsd6jG++8KxogWgqs7hbdo/86aWjjlIEvL7+QYdVELmAI0InXTpZqFIg5e7aDVWI2Q==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 dev: true - /@tailwindcss/typography@0.5.9(tailwindcss@3.3.2): + /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -1799,7 +1926,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 dev: true /@tootallnate/once@2.0.0: @@ -2023,12 +2150,12 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.40.2 + '@types/eslint': 8.44.2 '@types/estree': 1.0.1 dev: true - /@types/eslint@8.40.2: - resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==} + /@types/eslint@8.44.2: + resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} dependencies: '@types/estree': 1.0.1 '@types/json-schema': 7.0.12 @@ -2052,14 +2179,14 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true - /@types/lodash-es@4.17.7: - resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} + /@types/lodash-es@4.17.8: + resolution: {integrity: sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==} dependencies: - '@types/lodash': 4.14.195 + '@types/lodash': 4.14.197 dev: true - /@types/lodash@4.14.195: - resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + /@types/lodash@4.14.197: + resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} dev: true /@types/node@18.0.0: @@ -2096,42 +2223,42 @@ packages: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true - /@unhead/dom@1.1.30: - resolution: {integrity: sha512-EvASOkk36lW5sRfIe+StCojpkPEExsQNt+cqcpdVr9iiRH54jziCDFxcLfjawc+jp4NO86KvmfHo86GIly3/SQ==} + /@unhead/dom@1.3.4: + resolution: {integrity: sha512-wQK31cqjcZHqmMLI0PEDbzigp0KwQjG4P/H8BybcARvGQoaWdgZkiOu+iYmW0sl7e5V08CBL+PXiyiJ1TU6K3Q==} dependencies: - '@unhead/schema': 1.1.30 - '@unhead/shared': 1.1.30 + '@unhead/schema': 1.3.4 + '@unhead/shared': 1.3.4 dev: true - /@unhead/schema@1.1.30: - resolution: {integrity: sha512-lgz0aw+OP1PlKHBhNWAVabV2iAHBhSXCt3Ynswu0m++MwJxOVXizYJRZOVKK7Zx3u7vwPRV/nweYc6rmNHv5gA==} + /@unhead/schema@1.3.4: + resolution: {integrity: sha512-9a/5l6YpyW36ud0AKRkHzIVc9mWBxFqvE/ASFLjef2trmHhIVNewu5hjegotAO3uNSxC32AX4FoeJBgTDpYmHA==} dependencies: hookable: 5.5.3 - zhead: 2.0.9 + zhead: 2.0.10 dev: true - /@unhead/shared@1.1.30: - resolution: {integrity: sha512-OPS+d4SZuYSWquQZVLfbyFYggdqKz8DtcdHXObRoKWnosrgVPyGJoOaFnjfkYYuvU6BFYnUtnZNMRQVUjmER1g==} + /@unhead/shared@1.3.4: + resolution: {integrity: sha512-cBi6gIdSxl5kNrVWJS3zTXsyTeF6JQmub2SQEWzLnCy/+S/1K0pmrbj5d1B01AKBVKgJ4UVS+AaAfKfXKyv4tg==} dependencies: - '@unhead/schema': 1.1.30 + '@unhead/schema': 1.3.4 dev: true - /@unhead/ssr@1.1.30: - resolution: {integrity: sha512-0XBgoPZoPjLCEQpGc/PhTYPvXEcWufcpcHWo6jxRham3VCoQN5RoSzFNGPEtd4ZhMMVRMQLJ7yPDGfFXtu78Pg==} + /@unhead/ssr@1.3.4: + resolution: {integrity: sha512-aovNY0LPMZbOSJ46arLIV9y7kj6agqFnI1HtK+mupbGgTkEIwQhlrL1Xm8P8SP0HijR4j4Wkv9qOErMeVmzlUg==} dependencies: - '@unhead/schema': 1.1.30 - '@unhead/shared': 1.1.30 + '@unhead/schema': 1.3.4 + '@unhead/shared': 1.3.4 dev: true - /@unhead/vue@1.1.30(vue@3.3.4): - resolution: {integrity: sha512-jWDfYDjiNj8a8GTQoYeJrpKisI7YKIWwuMP1IREKa4cx41oCsbCKUDjomjnpmdBcpqvb/Kw32Tm+EMcuE/CYkA==} + /@unhead/vue@1.3.4(vue@3.3.4): + resolution: {integrity: sha512-+LIQ/2W2Kyo0+Z3OvdpOh54tx+LOVURt9dbudHdol2wpioZ6JN6VJlOBBaesIrHqj48fSQP10GdaZDqrIkNUgw==} peerDependencies: vue: '>=2.7 || >=3' dependencies: - '@unhead/schema': 1.1.30 - '@unhead/shared': 1.1.30 + '@unhead/schema': 1.3.4 + '@unhead/shared': 1.3.4 hookable: 5.5.3 - unhead: 1.1.30 + unhead: 1.3.4 vue: 3.3.4 dev: true @@ -2140,7 +2267,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - '@mapbox/node-pre-gyp': 1.0.10 + '@mapbox/node-pre-gyp': 1.0.11 '@rollup/pluginutils': 4.2.1 acorn: 8.10.0 async-sema: 3.1.1 @@ -2163,9 +2290,9 @@ packages: vite: ^4.0.0 vue: ^3.0.0 dependencies: - '@babel/core': 7.22.8 - '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.8) - '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.8) + '@babel/core': 7.22.10 + '@babel/plugin-transform-typescript': 7.22.10(@babel/core@7.22.10) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.10) vite: 4.3.9(@types/node@18.0.0) vue: 3.3.4 transitivePeerDependencies: @@ -2183,8 +2310,8 @@ packages: vue: 3.3.4 dev: true - /@vue-macros/common@1.4.0(vue@3.3.4): - resolution: {integrity: sha512-Wnpk6OVPYw7ZrrShOS7RZL5AINFbuQWfkNCVWVESSPY+8id75YOKGzMs4X5YcNayywdSGEvV7ntVJ2RQ+ez21A==} + /@vue-macros/common@1.7.0(vue@3.3.4): + resolution: {integrity: sha512-177tzAjvEiFxAsOM+zd8EWCfAdneePoZroGg6R5QhMcycC28r+2k4wyzrjupjkDBgx7KAZkJ/KzkSfuEi31U0A==} engines: {node: '>=16.14.0'} peerDependencies: vue: ^2.7.0 || ^3.2.25 @@ -2192,12 +2319,12 @@ packages: vue: optional: true dependencies: - '@babel/types': 7.22.5 - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@babel/types': 7.22.10 + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) '@vue/compiler-sfc': 3.3.4 - ast-kit: 0.6.5 + ast-kit: 0.9.5 local-pkg: 0.4.3 - magic-string-ast: 0.1.2 + magic-string-ast: 0.3.0 vue: 3.3.4 transitivePeerDependencies: - rollup @@ -2207,17 +2334,17 @@ packages: resolution: {integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==} dev: true - /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.8): + /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.10): resolution: {integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.8 + '@babel/core': 7.22.10 '@babel/helper-module-imports': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.8) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.10) '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 '@vue/babel-helper-vue-transform-on': 1.1.5 camelcase: 6.3.0 html-tags: 3.3.1 @@ -2229,7 +2356,7 @@ packages: /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.22.7 + '@babel/parser': 7.22.10 '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 @@ -2243,15 +2370,15 @@ packages: /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.22.7 + '@babel/parser': 7.22.10 '@vue/compiler-core': 3.3.4 '@vue/compiler-dom': 3.3.4 '@vue/compiler-ssr': 3.3.4 '@vue/reactivity-transform': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.1 - postcss: 8.4.25 + magic-string: 0.30.2 + postcss: 8.4.28 source-map-js: 1.0.2 /@vue/compiler-ssr@3.3.4: @@ -2267,11 +2394,11 @@ packages: /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.22.7 + '@babel/parser': 7.22.10 '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.1 + magic-string: 0.30.2 /@vue/reactivity@3.3.4: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} @@ -2303,12 +2430,12 @@ packages: /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} - /@vueuse/core@10.2.1(vue@3.3.4): - resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==} + /@vueuse/core@10.3.0(vue@3.3.4): + resolution: {integrity: sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q==} dependencies: '@types/web-bluetooth': 0.0.17 - '@vueuse/metadata': 10.2.1 - '@vueuse/shared': 10.2.1(vue@3.3.4) + '@vueuse/metadata': 10.3.0 + '@vueuse/shared': 10.3.0(vue@3.3.4) vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' @@ -2327,8 +2454,8 @@ packages: - vue dev: true - /@vueuse/integrations@10.2.1(fuse.js@6.6.2)(vue@3.3.4): - resolution: {integrity: sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==} + /@vueuse/integrations@10.3.0(fuse.js@6.6.2)(vue@3.3.4): + resolution: {integrity: sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg==} peerDependencies: async-validator: '*' axios: '*' @@ -2368,8 +2495,8 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.2.1(vue@3.3.4) - '@vueuse/shared': 10.2.1(vue@3.3.4) + '@vueuse/core': 10.3.0(vue@3.3.4) + '@vueuse/shared': 10.3.0(vue@3.3.4) fuse.js: 6.6.2 vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: @@ -2377,26 +2504,26 @@ packages: - vue dev: true - /@vueuse/math@10.2.1(vue@3.3.4): - resolution: {integrity: sha512-5mOoPhezfgcRhBT0E2FXPEjCbrLWG9hjhGlg574yWYmwhcLKLtN993CsL3AucD8ULCmWZJJ/J03K4fLyPyaEzw==} + /@vueuse/math@10.3.0(vue@3.3.4): + resolution: {integrity: sha512-egJN5b7Ks1s92XS/DuP/irxC2GyR59BfLm19aeWDHbAXhDgK9L+X/z9fZGobI9U7dZ/2A9nlqf0FeMDgh+oWEA==} dependencies: - '@vueuse/shared': 10.2.1(vue@3.3.4) + '@vueuse/shared': 10.3.0(vue@3.3.4) vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/metadata@10.2.1: - resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==} + /@vueuse/metadata@10.3.0: + resolution: {integrity: sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==} dev: true /@vueuse/metadata@9.13.0: resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} dev: true - /@vueuse/shared@10.2.1(vue@3.3.4): - resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==} + /@vueuse/shared@10.3.0(vue@3.3.4): + resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} dependencies: vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: @@ -2590,15 +2717,11 @@ packages: - supports-color dev: true - /agentkeepalive@4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4 - depd: 2.0.0 humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color dev: true /aggregate-error@3.1.0: @@ -2777,12 +2900,12 @@ packages: util: 0.12.5 dev: true - /ast-kit@0.6.5: - resolution: {integrity: sha512-XCg0VWvmWU2T/6aMp8VRfJWZ6LZv1P0o8otWY7RAGtfKj0qGi45vtnKNkltJhu9tmbQNZxv+gJA4o7FtLDfmWg==} + /ast-kit@0.9.5: + resolution: {integrity: sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==} engines: {node: '>=16.14.0'} dependencies: - '@babel/parser': 7.22.7 - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@babel/parser': 7.22.10 + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) pathe: 1.1.1 transitivePeerDependencies: - rollup @@ -2800,7 +2923,7 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.0 + tslib: 2.6.1 dev: true /ast-types@0.7.8: @@ -2812,8 +2935,8 @@ packages: resolution: {integrity: sha512-vdCU9JvpsrxWxvJiRHAr8If8cu07LWJXDPhkqLiP4ErbN1fu/mK623QGmU4Qbn2Nq4Mx0vR/Q017B6+HcHg1aQ==} engines: {node: '>=16.14.0'} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 dev: true /async-sema@3.1.1: @@ -2843,19 +2966,19 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.14(postcss@8.4.25): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + /autoprefixer@10.4.15(postcss@8.4.28): + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.9 - caniuse-lite: 1.0.30001512 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001521 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true @@ -2973,7 +3096,7 @@ packages: hasBin: true dependencies: quote-stream: 1.0.2 - resolve: 1.22.2 + resolve: 1.22.4 static-module: 3.0.4 through2: 2.0.5 dev: false @@ -2998,15 +3121,15 @@ packages: browser-resolve: 1.11.3 dev: false - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001512 - electron-to-chromium: 1.4.451 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001521 + electron-to-chromium: 1.4.492 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: true /buffer-alloc-unsafe@1.1.0: @@ -3077,7 +3200,7 @@ packages: giget: 1.1.2 jiti: 1.19.1 mlly: 1.4.0 - ohash: 1.1.2 + ohash: 1.1.3 pathe: 1.1.1 perfect-debounce: 1.0.0 pkg-types: 1.0.3 @@ -3091,20 +3214,20 @@ packages: engines: {node: '>=8'} dev: true - /cacache@17.1.3: - resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} + /cacache@17.1.4: + resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/fs': 3.1.0 - fs-minipass: 3.0.2 - glob: 10.3.1 + fs-minipass: 3.0.3 + glob: 10.3.3 lru-cache: 7.18.3 - minipass: 5.0.0 + minipass: 7.0.3 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 p-map: 4.0.0 - ssri: 10.0.4 + ssri: 10.0.5 tar: 6.1.15 unique-filename: 3.0.0 dev: true @@ -3122,7 +3245,6 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -3147,14 +3269,14 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.9 - caniuse-lite: 1.0.30001512 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001521 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001512: - resolution: {integrity: sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==} + /caniuse-lite@1.0.30001521: + resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} dev: true /chalk@2.4.2: @@ -3480,32 +3602,32 @@ packages: resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} dev: false - /css-declaration-sorter@6.4.0(postcss@8.4.25): - resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + /css-declaration-sorter@6.4.1(postcss@8.4.28): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /css-loader@5.2.7(webpack@5.88.1): + /css-loader@5.2.7(webpack@5.88.2): resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.25) + icss-utils: 5.1.0(postcss@8.4.28) loader-utils: 2.0.4 - postcss: 8.4.25 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.25) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.25) - postcss-modules-scope: 3.0.0(postcss@8.4.25) - postcss-modules-values: 4.0.0(postcss@8.4.25) + postcss: 8.4.28 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.28) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.28) + postcss-modules-scope: 3.0.0(postcss@8.4.28) + postcss-modules-values: 4.0.0(postcss@8.4.28) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 - semver: 7.5.3 - webpack: 5.88.1 + semver: 7.5.4 + webpack: 5.88.2 dev: true /css-select@5.1.0: @@ -3545,62 +3667,62 @@ packages: hasBin: true dev: true - /cssnano-preset-default@6.0.1(postcss@8.4.25): + /cssnano-preset-default@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - css-declaration-sorter: 6.4.0(postcss@8.4.25) - cssnano-utils: 4.0.0(postcss@8.4.25) - postcss: 8.4.25 - postcss-calc: 9.0.1(postcss@8.4.25) - postcss-colormin: 6.0.0(postcss@8.4.25) - postcss-convert-values: 6.0.0(postcss@8.4.25) - postcss-discard-comments: 6.0.0(postcss@8.4.25) - postcss-discard-duplicates: 6.0.0(postcss@8.4.25) - postcss-discard-empty: 6.0.0(postcss@8.4.25) - postcss-discard-overridden: 6.0.0(postcss@8.4.25) - postcss-merge-longhand: 6.0.0(postcss@8.4.25) - postcss-merge-rules: 6.0.1(postcss@8.4.25) - postcss-minify-font-values: 6.0.0(postcss@8.4.25) - postcss-minify-gradients: 6.0.0(postcss@8.4.25) - postcss-minify-params: 6.0.0(postcss@8.4.25) - postcss-minify-selectors: 6.0.0(postcss@8.4.25) - postcss-normalize-charset: 6.0.0(postcss@8.4.25) - postcss-normalize-display-values: 6.0.0(postcss@8.4.25) - postcss-normalize-positions: 6.0.0(postcss@8.4.25) - postcss-normalize-repeat-style: 6.0.0(postcss@8.4.25) - postcss-normalize-string: 6.0.0(postcss@8.4.25) - postcss-normalize-timing-functions: 6.0.0(postcss@8.4.25) - postcss-normalize-unicode: 6.0.0(postcss@8.4.25) - postcss-normalize-url: 6.0.0(postcss@8.4.25) - postcss-normalize-whitespace: 6.0.0(postcss@8.4.25) - postcss-ordered-values: 6.0.0(postcss@8.4.25) - postcss-reduce-initial: 6.0.0(postcss@8.4.25) - postcss-reduce-transforms: 6.0.0(postcss@8.4.25) - postcss-svgo: 6.0.0(postcss@8.4.25) - postcss-unique-selectors: 6.0.0(postcss@8.4.25) - dev: true - - /cssnano-utils@4.0.0(postcss@8.4.25): + css-declaration-sorter: 6.4.1(postcss@8.4.28) + cssnano-utils: 4.0.0(postcss@8.4.28) + postcss: 8.4.28 + postcss-calc: 9.0.1(postcss@8.4.28) + postcss-colormin: 6.0.0(postcss@8.4.28) + postcss-convert-values: 6.0.0(postcss@8.4.28) + postcss-discard-comments: 6.0.0(postcss@8.4.28) + postcss-discard-duplicates: 6.0.0(postcss@8.4.28) + postcss-discard-empty: 6.0.0(postcss@8.4.28) + postcss-discard-overridden: 6.0.0(postcss@8.4.28) + postcss-merge-longhand: 6.0.0(postcss@8.4.28) + postcss-merge-rules: 6.0.1(postcss@8.4.28) + postcss-minify-font-values: 6.0.0(postcss@8.4.28) + postcss-minify-gradients: 6.0.0(postcss@8.4.28) + postcss-minify-params: 6.0.0(postcss@8.4.28) + postcss-minify-selectors: 6.0.0(postcss@8.4.28) + postcss-normalize-charset: 6.0.0(postcss@8.4.28) + postcss-normalize-display-values: 6.0.0(postcss@8.4.28) + postcss-normalize-positions: 6.0.0(postcss@8.4.28) + postcss-normalize-repeat-style: 6.0.0(postcss@8.4.28) + postcss-normalize-string: 6.0.0(postcss@8.4.28) + postcss-normalize-timing-functions: 6.0.0(postcss@8.4.28) + postcss-normalize-unicode: 6.0.0(postcss@8.4.28) + postcss-normalize-url: 6.0.0(postcss@8.4.28) + postcss-normalize-whitespace: 6.0.0(postcss@8.4.28) + postcss-ordered-values: 6.0.0(postcss@8.4.28) + postcss-reduce-initial: 6.0.0(postcss@8.4.28) + postcss-reduce-transforms: 6.0.0(postcss@8.4.28) + postcss-svgo: 6.0.0(postcss@8.4.28) + postcss-unique-selectors: 6.0.0(postcss@8.4.28) + dev: true + + /cssnano-utils@4.0.0(postcss@8.4.28): resolution: {integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /cssnano@6.0.1(postcss@8.4.25): + /cssnano@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 6.0.1(postcss@8.4.25) + cssnano-preset-default: 6.0.1(postcss@8.4.28) lilconfig: 2.1.0 - postcss: 8.4.25 + postcss: 8.4.28 dev: true /csso@5.0.5: @@ -3942,7 +4064,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.22.10 dev: false /dayjs@1.11.9: @@ -4037,6 +4159,18 @@ packages: /deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + dev: true + + /deep-equal@1.1.1: + resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} + dependencies: + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + object-is: 1.1.5 + object-keys: 1.1.1 + regexp.prototype.flags: 1.5.0 + dev: false /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4081,7 +4215,6 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true /defu@3.2.2: resolution: {integrity: sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ==} @@ -4121,8 +4254,8 @@ packages: engines: {node: '>= 0.8'} dev: true - /destr@2.0.0: - resolution: {integrity: sha512-FJ9RDpf3GicEBvzI3jxc2XhHzbqD8p4ANw/1kPsFBfTvP1b7Gn/Lg1vO7R9J4IVgoMbyUmFrFGZafJ1hPZpvlg==} + /destr@2.0.1: + resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} dev: true /destroy@1.2.0: @@ -4130,8 +4263,14 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-libc@2.0.1: - resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} dev: true @@ -4220,28 +4359,28 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.451: - resolution: {integrity: sha512-YYbXHIBxAHe3KWvGOJOuWa6f3tgow44rBW+QAuwVp2DvGqNZeE//K2MowNdWS7XE8li5cgQDrX1LdBr41LufkA==} + /electron-to-chromium@1.4.492: + resolution: {integrity: sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==} dev: true - /element-plus@2.3.7(vue@3.3.4): - resolution: {integrity: sha512-h6TxclbaLUJxg/Bv5j/ZKsK+K5yadQliw5+R30HWyE69pXlqXTX24oYx+yw3pA4Dy+lqEDi5501FQ0CORk3OSA==} + /element-plus@2.3.9(vue@3.3.4): + resolution: {integrity: sha512-TIOLnPl4cnoCPXqK3QYh+jpkthUBQnAM21O7o3Lhbse8v9pfrRXRTaBJtoEKnYNa8GZ4lZptUfH0PeZgDCNLUg==} peerDependencies: vue: ^3.2.0 dependencies: '@ctrl/tinycolor': 3.6.0 '@element-plus/icons-vue': 2.1.0(vue@3.3.4) - '@floating-ui/dom': 1.4.4 + '@floating-ui/dom': 1.5.1 '@popperjs/core': /@sxzz/popperjs-es@2.11.7 - '@types/lodash': 4.14.195 - '@types/lodash-es': 4.17.7 + '@types/lodash': 4.14.197 + '@types/lodash-es': 4.17.8 '@vueuse/core': 9.13.0(vue@3.3.4) async-validator: 4.2.5 dayjs: 1.11.9 escape-html: 1.0.3 lodash: 4.17.21 lodash-es: 4.17.21 - lodash-unified: 1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21) + lodash-unified: 1.0.3(@types/lodash-es@4.17.8)(lodash-es@4.17.21)(lodash@4.17.21) memoize-one: 6.0.0 normalize-wheel-es: 1.2.0 vue: 3.3.4 @@ -4329,8 +4468,8 @@ packages: is-arrayish: 0.2.1 dev: true - /error-stack-parser-es@0.1.0: - resolution: {integrity: sha512-K5/Oncl6ZizGM7tqGUc3Sd82zVKGsZ+l8FqhhnF8+10QujC/xT2VKwdaM/8rAR5F1BouVqgemMrhHG23vhOpMw==} + /error-stack-parser-es@0.1.1: + resolution: {integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==} dev: true /es-module-lexer@1.3.0: @@ -4419,34 +4558,34 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 dev: true /escalade@3.1.1: @@ -4599,21 +4738,6 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: - resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} @@ -4645,35 +4769,24 @@ packages: enhanced-resolve: 5.15.0 mlly: 1.4.0 pathe: 1.1.1 - ufo: 1.1.2 + ufo: 1.2.0 dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-folder-size@2.1.0: - resolution: {integrity: sha512-3h+e4YJJ6fze5RMaByScrfRdHE+DnM/as8r/jbjmIGhgty6v2yBRNbtOiItqhRitv4kBv8WAOQvbPtnyYK3gHw==} + /fast-folder-size@2.2.0: + resolution: {integrity: sha512-7VsTlT/ELl5OQ4fnckM3idvaUkdJxf6VaYn0sC43GWoRmKqvbGfpoyC4BC/imTd9CEZtlfNsEf8/ZqdfoU4Nwg==} hasBin: true requiresBuild: true dependencies: decompress: 4.2.1 - https-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.1 transitivePeerDependencies: - supports-color dev: true - /fast-glob@3.3.0: - resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -4808,7 +4921,7 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.2 + signal-exit: 4.1.0 dev: true /form-data@4.0.0: @@ -4875,11 +4988,11 @@ packages: minipass: 3.3.6 dev: true - /fs-minipass@3.0.2: - resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==} + /fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 5.0.0 + minipass: 7.0.3 dev: true /fs.realpath@1.0.0: @@ -4897,6 +5010,10 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + /fuse.js@6.6.2: resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} engines: {node: '>=10'} @@ -4952,7 +5069,6 @@ packages: has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true /get-port-please@3.0.1: resolution: {integrity: sha512-R5pcVO8Z1+pVDu8Ml3xaJCEkBiiy1VQN9za0YqH8GIi1nIqD4IzQhzY6dDzMRtdS1lyiGlucRzm8IN8wtLIXng==} @@ -4971,8 +5087,8 @@ packages: engines: {node: '>=10'} dev: true - /get-tsconfig@4.6.2: - resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==} + /get-tsconfig@4.7.0: + resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -5042,16 +5158,16 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.1: - resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} + /glob@10.3.3: + resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.1 + jackspeak: 2.3.0 minimatch: 9.0.3 - minipass: 5.0.0 - path-scurry: 1.10.0 + minipass: 7.0.3 + path-scurry: 1.10.1 dev: true /glob@7.1.6: @@ -5104,7 +5220,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.0 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -5121,13 +5237,13 @@ packages: pinkie-promise: 2.0.1 dev: true - /google-fonts-helper@3.3.0: - resolution: {integrity: sha512-aFEVbmaavTY6wN3m6jZaWXQHfakMy6XNqdWN8YzHqHWCGpGma91zp8MiWsyb5i8gXQXYeGUWegb9ca/Jf/Q7Yw==} + /google-fonts-helper@3.3.1: + resolution: {integrity: sha512-zMycq4nUUaplGe7pzCOGBC52LB3VpwxS9temmCx1EucEaBdBEpG5MeQlJhtRu63gKI1hb/l+yHkasQtee59sFA==} dependencies: deepmerge: 4.3.1 hookable: 5.5.3 ofetch: 1.1.1 - ufo: 1.1.2 + ufo: 1.2.0 dev: true /gopd@1.0.1: @@ -5147,16 +5263,17 @@ packages: duplexer: 0.1.2 dev: true - /h3@1.7.1: - resolution: {integrity: sha512-A9V2NEDNHet7v1gCg7CMwerSigLi0SRbhTy7C3lGb0N4YKIpPmLDjedTUopqp4dnn7COHfqUjjaz3zbtz4QduA==} + /h3@1.8.0: + resolution: {integrity: sha512-057VY83X7Tg5n4XU2GV9M3dsCWUU4jtw2Lc/r4GjAcf9Jb6GI1mD5F8TCQHUcvLMEgtx6lbfobOFu7Vdmejihg==} dependencies: cookie-es: 1.0.0 defu: 6.1.2 - destr: 2.0.0 - iron-webcrypto: 0.7.1 + destr: 2.0.1 + iron-webcrypto: 0.8.0 radix3: 1.0.1 - ufo: 1.1.2 + ufo: 1.2.0 uncrypto: 0.1.3 + unenv: 1.7.1 dev: true /hammerjs@2.0.8: @@ -5178,24 +5295,20 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.1 - dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -5317,8 +5430,8 @@ packages: - supports-color dev: true - /https-proxy-agent@7.0.0: - resolution: {integrity: sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==} + /https-proxy-agent@7.0.1: + resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 @@ -5349,13 +5462,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.25): + /icss-utils@5.1.0(postcss@8.4.28): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true /ieee754@1.2.1: @@ -5446,11 +5559,6 @@ packages: - supports-color dev: true - /ip-regex@5.0.0: - resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true @@ -5459,13 +5567,16 @@ packages: resolution: {integrity: sha512-K/UmlEhPCPXEHV5hAtH5C0tI5JnFuOrv4yO/j7ODPl3HaiiHBLbOLTde+ieUaAyfCATe4LoAnclyF+hmSCOVmQ==} dev: true + /iron-webcrypto@0.8.0: + resolution: {integrity: sha512-gScdcWHjTGclCU15CIv2r069NoQrys1UeUFFfaO1hL++ytLHkVw7N5nXJmFf3J2LEDMz1PkrvC0m62JEeu1axQ==} + dev: true + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -5490,11 +5601,18 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -5592,6 +5710,14 @@ packages: '@types/estree': 1.0.1 dev: true + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + /is-ssh@1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} dependencies: @@ -5613,15 +5739,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.11 dev: true /is-wsl@2.2.0: @@ -5638,8 +5760,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + /jackspeak@2.3.0: + resolution: {integrity: sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -5850,17 +5972,26 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /listhen@1.0.4: - resolution: {integrity: sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g==} + /listhen@1.3.0: + resolution: {integrity: sha512-QhlP01ReqSXpu8OgBaFQjYMU/4YJTCWLFtoDTxBhitPQWfu0UuBoG2HizMysaRkUEAr/CVxB/20T8ni0zQDPtw==} + hasBin: true dependencies: + '@parcel/watcher': 2.2.0 + '@parcel/watcher-wasm': 2.3.0-alpha.1 + citty: 0.1.2 clipboardy: 3.0.0 - colorette: 2.0.20 + consola: 3.2.3 defu: 6.1.2 get-port-please: 3.0.1 + h3: 1.8.0 http-shutdown: 1.2.2 - ip-regex: 5.0.0 + jiti: 1.19.1 + mlly: 1.4.0 node-forge: 1.3.1 - ufo: 1.1.2 + pathe: 1.1.1 + ufo: 1.2.0 + untun: 0.1.1 + uqr: 0.1.2 dev: true /loader-runner@4.3.0: @@ -5900,14 +6031,14 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true - /lodash-unified@1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21): + /lodash-unified@1.0.3(@types/lodash-es@4.17.8)(lodash-es@4.17.21)(lodash@4.17.21): resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} peerDependencies: '@types/lodash-es': '*' lodash: '*' lodash-es: '*' dependencies: - '@types/lodash-es': 4.17.7 + '@types/lodash-es': 4.17.8 lodash: 4.17.21 lodash-es: 4.17.21 dev: true @@ -5981,8 +6112,8 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /lru-cache@10.0.0: - resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} dev: true @@ -6004,11 +6135,11 @@ packages: engines: {node: '>=12'} dev: true - /magic-string-ast@0.1.2: - resolution: {integrity: sha512-P53AZrzq7hclCU6HWj88xNZHmP15DKjMmK/vBytO1qnpYP3ul4IEZlyCE0aU3JRnmgWmZPmoTKj4Bls7v0pMyA==} - engines: {node: '>=14.19.0'} + /magic-string-ast@0.3.0: + resolution: {integrity: sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==} + engines: {node: '>=16.14.0'} dependencies: - magic-string: 0.30.1 + magic-string: 0.30.2 dev: true /magic-string@0.25.1: @@ -6024,25 +6155,18 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /magic-string@0.30.1: - resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - /magic-string@0.30.2: resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /magicast@0.2.10: resolution: {integrity: sha512-Ah2qatigknxwmoYCd9hx/mmVyrRNhDKiaWZIuW4gL6dWrAGMoOpCVkQ3VpGWARtkaJVFhe8uIphcsxDzLPQUyg==} dependencies: - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 - recast: 0.23.3 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 + recast: 0.23.4 dev: true /make-dir@1.3.0: @@ -6056,34 +6180,34 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 dev: true /make-fetch-happen@11.1.1: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - agentkeepalive: 4.3.0 - cacache: 17.1.3 + agentkeepalive: 4.5.0 + cacache: 17.1.4 http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 lru-cache: 7.18.3 minipass: 5.0.0 - minipass-fetch: 3.0.3 + minipass-fetch: 3.0.4 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 0.6.3 promise-retry: 2.0.1 socks-proxy-agent: 7.0.0 - ssri: 10.0.4 + ssri: 10.0.5 transitivePeerDependencies: - supports-color dev: true - /markerjs2@2.29.5: - resolution: {integrity: sha512-hg0dkVyhj+bLd0yCq+xz6ZRWG8SjKh801gUOVb54b39TvRsAVcV7ZWWM7W1p41HiPExUicwGg9xCllXbORS5DQ==} + /markerjs2@2.29.7: + resolution: {integrity: sha512-QP88yWYYXyhbsiryVhfkIgwLX/2FhGmeduEb/Nhaur5o2wBWdnMQdoCKClDRSCRwauIO9dw69KmxJQ5qvgtskw==} dev: false /mdn-data@2.0.28: @@ -6220,11 +6344,11 @@ packages: minipass: 3.3.6 dev: true - /minipass-fetch@3.0.3: - resolution: {integrity: sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==} + /minipass-fetch@3.0.4: + resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 5.0.0 + minipass: 7.0.3 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -6271,6 +6395,11 @@ packages: engines: {node: '>=8'} dev: true + /minipass@7.0.3: + resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -6298,7 +6427,7 @@ packages: acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.1.2 + ufo: 1.2.0 dev: true /mri@1.2.0: @@ -6342,6 +6471,10 @@ packages: hasBin: true dev: true + /napi-wasm@1.1.0: + resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -6362,15 +6495,15 @@ packages: dependencies: '@cloudflare/kv-asset-handler': 0.3.0 '@netlify/functions': 1.6.0 - '@rollup/plugin-alias': 5.0.0(rollup@3.26.2) - '@rollup/plugin-commonjs': 25.0.2(rollup@3.26.2) - '@rollup/plugin-inject': 5.0.3(rollup@3.26.2) - '@rollup/plugin-json': 6.0.0(rollup@3.26.2) - '@rollup/plugin-node-resolve': 15.1.0(rollup@3.26.2) - '@rollup/plugin-replace': 5.0.2(rollup@3.26.2) - '@rollup/plugin-terser': 0.4.3(rollup@3.26.2) - '@rollup/plugin-wasm': 6.1.3(rollup@3.26.2) - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/plugin-alias': 5.0.0(rollup@3.28.0) + '@rollup/plugin-commonjs': 25.0.4(rollup@3.28.0) + '@rollup/plugin-inject': 5.0.3(rollup@3.28.0) + '@rollup/plugin-json': 6.0.0(rollup@3.28.0) + '@rollup/plugin-node-resolve': 15.1.0(rollup@3.28.0) + '@rollup/plugin-replace': 5.0.2(rollup@3.28.0) + '@rollup/plugin-terser': 0.4.3(rollup@3.28.0) + '@rollup/plugin-wasm': 6.1.3(rollup@3.28.0) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) '@types/http-proxy': 1.17.11 '@vercel/nft': 0.22.6 archiver: 5.3.1 @@ -6381,15 +6514,15 @@ packages: consola: 3.2.3 cookie-es: 1.0.0 defu: 6.1.2 - destr: 2.0.0 + destr: 2.0.1 dot-prop: 7.2.0 - esbuild: 0.18.11 + esbuild: 0.18.20 escape-string-regexp: 5.0.0 etag: 1.8.1 fs-extra: 11.1.1 globby: 13.2.2 gzip-size: 7.0.0 - h3: 1.7.1 + h3: 1.8.0 hookable: 5.5.3 http-graceful-shutdown: 3.1.13 http-proxy: 1.18.1 @@ -6397,33 +6530,33 @@ packages: jiti: 1.19.1 klona: 2.0.6 knitwork: 1.0.0 - listhen: 1.0.4 - magic-string: 0.30.1 + listhen: 1.3.0 + magic-string: 0.30.2 mime: 3.0.0 mlly: 1.4.0 mri: 1.2.0 node-fetch-native: 1.2.0 ofetch: 1.1.1 - ohash: 1.1.2 - openapi-typescript: 6.2.8 + ohash: 1.1.3 + openapi-typescript: 6.5.0 pathe: 1.1.1 perfect-debounce: 1.0.0 pkg-types: 1.0.3 - pretty-bytes: 6.1.0 + pretty-bytes: 6.1.1 radix3: 1.0.1 - rollup: 3.26.2 - rollup-plugin-visualizer: 5.9.2(rollup@3.26.2) + rollup: 3.28.0 + rollup-plugin-visualizer: 5.9.2(rollup@3.28.0) scule: 1.0.0 - semver: 7.5.3 + semver: 7.5.4 serve-placeholder: 2.0.1 serve-static: 1.15.0 source-map-support: 0.5.21 std-env: 3.3.3 - ufo: 1.1.2 + ufo: 1.2.0 uncrypto: 0.1.3 - unenv: 1.5.1 - unimport: 3.0.14(rollup@3.26.2) - unstorage: 1.8.0 + unenv: 1.7.1 + unimport: 3.1.3(rollup@3.28.0) + unstorage: 1.9.0 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6431,14 +6564,20 @@ packages: - '@azure/identity' - '@azure/keyvault-secrets' - '@azure/storage-blob' + - '@capacitor/preferences' - '@planetscale/database' - '@upstash/redis' - '@vercel/kv' - debug - encoding + - idb-keyval - supports-color dev: true + /node-addon-api@7.0.0: + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} + dev: true + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6460,8 +6599,8 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 @@ -6499,8 +6638,8 @@ packages: - supports-color dev: true - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true /nopt@5.0.0: @@ -6524,7 +6663,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 - is-core-module: 2.12.1 + is-core-module: 2.13.0 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true @@ -6550,8 +6689,8 @@ packages: npm-normalize-package-bin: 3.0.1 dev: true - /npm-install-checks@6.1.1: - resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} + /npm-install-checks@6.2.0: + resolution: {integrity: sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: semver: 7.5.4 @@ -6579,11 +6718,11 @@ packages: ignore-walk: 6.0.3 dev: true - /npm-pick-manifest@8.0.1: - resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} + /npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - npm-install-checks: 6.1.1 + npm-install-checks: 6.2.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 semver: 7.5.4 @@ -6595,7 +6734,7 @@ packages: dependencies: make-fetch-happen: 11.1.1 minipass: 5.0.0 - minipass-fetch: 3.0.3 + minipass-fetch: 3.0.4 minipass-json-stream: 1.0.1 minizlib: 2.1.2 npm-package-arg: 10.1.0 @@ -6655,7 +6794,7 @@ packages: resolution: {integrity: sha512-Rv9mkdPgzVQ/YbE41ra/EMfhST9sCB4N17WLClO6HsmTbaXBFY/pQu5/2KSNKQUgLq1b7NX+E4o6WbBw1oeCsg==} dependencies: '@nuxt/kit': 3.6.5 - plotly.js-dist-min: 2.25.0 + plotly.js-dist-min: 2.25.2 uuid: 9.0.0 transitivePeerDependencies: - rollup @@ -6676,52 +6815,52 @@ packages: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 3.6.2 '@nuxt/schema': 3.6.2 - '@nuxt/telemetry': 2.3.1 - '@nuxt/ui-templates': 1.2.0 + '@nuxt/telemetry': 2.4.1 + '@nuxt/ui-templates': 1.3.1 '@nuxt/vite-builder': 3.6.2(@types/node@18.0.0)(vue@3.3.4) '@types/node': 18.0.0 - '@unhead/ssr': 1.1.30 - '@unhead/vue': 1.1.30(vue@3.3.4) + '@unhead/ssr': 1.3.4 + '@unhead/vue': 1.3.4(vue@3.3.4) '@vue/shared': 3.3.4 acorn: 8.10.0 c12: 1.4.2 chokidar: 3.5.3 cookie-es: 1.0.0 defu: 6.1.2 - destr: 2.0.0 + destr: 2.0.1 devalue: 4.3.2 - esbuild: 0.18.11 + esbuild: 0.18.20 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 fs-extra: 11.1.1 globby: 13.2.2 - h3: 1.7.1 + h3: 1.8.0 hookable: 5.5.3 jiti: 1.19.1 klona: 2.0.6 knitwork: 1.0.0 local-pkg: 0.4.3 - magic-string: 0.30.1 + magic-string: 0.30.2 mlly: 1.4.0 nitropack: 2.5.2 nuxi: 3.6.2 nypm: 0.2.2 ofetch: 1.1.1 - ohash: 1.1.2 + ohash: 1.1.3 pathe: 1.1.1 perfect-debounce: 1.0.0 prompts: 2.4.2 scule: 1.0.0 - strip-literal: 1.0.1 - ufo: 1.1.2 - ultrahtml: 1.2.0 + strip-literal: 1.3.0 + ufo: 1.2.0 + ultrahtml: 1.3.0 uncrypto: 0.1.3 unctx: 2.3.1 - unenv: 1.5.1 - unimport: 3.0.14(rollup@3.26.2) - unplugin: 1.3.2 + unenv: 1.7.1 + unimport: 3.1.3(rollup@3.28.0) + unplugin: 1.4.0 unplugin-vue-router: 0.6.4(vue-router@4.2.4)(vue@3.3.4) - untyped: 1.3.2 + untyped: 1.4.0 vue: 3.3.4 vue-bundle-renderer: 1.0.3 vue-devtools-stub: 0.1.0 @@ -6733,12 +6872,14 @@ packages: - '@azure/identity' - '@azure/keyvault-secrets' - '@azure/storage-blob' + - '@capacitor/preferences' - '@planetscale/database' - '@upstash/redis' - '@vercel/kv' - debug - encoding - eslint + - idb-keyval - less - meow - optionator @@ -6759,7 +6900,7 @@ packages: resolution: {integrity: sha512-O7bumfWgUXlJefT1Y41SF4vsCvzeUYmnKABuOKStheCObzrkWPDmqJc+RJVU+57oFu9bITcrUq8sKFIHgjCnTg==} engines: {node: ^14.16.0 || >=16.10.0} dependencies: - execa: 7.1.1 + execa: 7.2.0 dev: true /object-assign@4.1.1: @@ -6782,23 +6923,21 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: true /ofetch@1.1.1: resolution: {integrity: sha512-SSMoktrp9SNLi20BWfB/BnnKcL0RDigXThD/mZBeQxkIRv1xrd9183MtLdsqRYLYSqW0eTr5t8w8MqjNhvoOQQ==} dependencies: - destr: 2.0.0 + destr: 2.0.1 node-fetch-native: 1.2.0 - ufo: 1.1.2 + ufo: 1.2.0 dev: true - /ohash@1.1.2: - resolution: {integrity: sha512-9CIOSq5945rI045GFtcO3uudyOkYVY1nyfFxVQp+9BRgslr8jPNiSSrsFGg/BNTUFOLqx0P5tng6G32brIPw0w==} + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true /on-finished@2.4.1: @@ -6859,15 +6998,15 @@ packages: is-wsl: 2.2.0 dev: true - /openapi-typescript@6.2.8: - resolution: {integrity: sha512-yA+y5MHiu6cjmtsGfNLavzVuvGCKzjL3H+exgHDPK6bnp6ZVFibtAiafenNSRDWL0x+7Sw/VPv5SbaqiPLW46w==} + /openapi-typescript@6.5.0: + resolution: {integrity: sha512-FHrCCZdwNP47OcEPrjHcw7IhRcky3SpTA8lI8q+mvI27ow5UQEvWjGJk7pK0XzmiXjgYKtIoL6+vmL7x3tzvCg==} hasBin: true dependencies: ansi-colors: 4.1.3 fast-glob: 3.3.1 js-yaml: 4.1.0 supports-color: 9.4.0 - undici: 5.22.1 + undici: 5.23.0 yargs-parser: 21.1.1 dev: true @@ -6932,19 +7071,19 @@ packages: '@npmcli/installed-package-contents': 2.0.2 '@npmcli/promise-spawn': 6.0.2 '@npmcli/run-script': 6.0.2 - cacache: 17.1.3 - fs-minipass: 3.0.2 + cacache: 17.1.4 + fs-minipass: 3.0.3 minipass: 5.0.0 npm-package-arg: 10.1.0 npm-packlist: 7.0.4 - npm-pick-manifest: 8.0.1 + npm-pick-manifest: 8.0.2 npm-registry-fetch: 14.0.5 proc-log: 3.0.0 promise-retry: 2.0.1 read-package-json: 6.0.4 read-package-json-fast: 3.0.2 - sigstore: 1.7.0 - ssri: 10.0.4 + sigstore: 1.9.0 + ssri: 10.0.5 tar: 6.1.15 transitivePeerDependencies: - bluebird @@ -6985,7 +7124,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7031,12 +7170,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.0: - resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.0 - minipass: 5.0.0 + lru-cache: 10.0.1 + minipass: 7.0.3 dev: true /path-to-regexp@6.2.1: @@ -7120,8 +7259,8 @@ packages: pathe: 1.1.1 dev: true - /plotly.js-dist-min@2.25.0: - resolution: {integrity: sha512-hyUhc/9RdVorvyq+q3wdN59kh4+OOG7YSuYnszoV68rSUQtq22YSh24wgMR11PbKXalaxXYkg5t1dyBYwSWzCg==} + /plotly.js-dist-min@2.25.2: + resolution: {integrity: sha512-ktajQ3QcbKSOhQ3Oin5igm0JYtaJstOrWXP7KFG9XbgAOmLFX4mcm1NytbIxSStRNvEZSey/5M0uxL3zARG51Q==} dev: true /png-js@1.0.0: @@ -7145,88 +7284,88 @@ packages: - supports-color dev: true - /postcss-calc@9.0.1(postcss@8.4.25): + /postcss-calc@9.0.1(postcss@8.4.28): resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: true - /postcss-colormin@6.0.0(postcss@8.4.25): + /postcss-colormin@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 + browserslist: 4.21.10 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-convert-values@6.0.0(postcss@8.4.25): + /postcss-convert-values@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 - postcss: 8.4.25 + browserslist: 4.21.10 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-properties@13.2.1(postcss@8.4.25): - resolution: {integrity: sha512-Z8UmzwVkRh8aITyeZoZnT4McSSPmS2EFl+OyPspfvx7v+N36V2UseMAODp3oBriZvcf/tQpzag9165x/VcC3kg==} + /postcss-custom-properties@13.3.0(postcss@8.4.28): + resolution: {integrity: sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/cascade-layer-name-parser': 1.0.3(@csstools/css-parser-algorithms@2.3.0)(@csstools/css-tokenizer@2.1.1) - '@csstools/css-parser-algorithms': 2.3.0(@csstools/css-tokenizer@2.1.1) - '@csstools/css-tokenizer': 2.1.1 - postcss: 8.4.25 + '@csstools/cascade-layer-name-parser': 1.0.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0) + '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0) + '@csstools/css-tokenizer': 2.2.0 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-discard-comments@6.0.0(postcss@8.4.25): + /postcss-discard-comments@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-discard-duplicates@6.0.0(postcss@8.4.25): + /postcss-discard-duplicates@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-discard-empty@6.0.0(postcss@8.4.25): + /postcss-discard-empty@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-discard-overridden@6.0.0(postcss@8.4.25): + /postcss-discard-overridden@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true /postcss-import-resolver@2.0.0: @@ -7235,41 +7374,41 @@ packages: enhanced-resolve: 4.5.0 dev: true - /postcss-import@13.0.0(postcss@8.4.25): + /postcss-import@13.0.0(postcss@8.4.28): resolution: {integrity: sha512-LPUbm3ytpYopwQQjqgUH4S3EM/Gb9QsaSPP/5vnoi+oKVy3/mIk2sc0Paqw7RL57GpScm9MdIMUypw2znWiBpg==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.4 dev: true - /postcss-import@15.1.0(postcss@8.4.25): + /postcss-import@15.1.0(postcss@8.4.28): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.4 dev: true - /postcss-js@4.0.1(postcss@8.4.25): + /postcss-js@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-load-config@4.0.1(postcss@8.4.25): + /postcss-load-config@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -7282,11 +7421,11 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.25 + postcss: 8.4.28 yaml: 2.3.1 dev: true - /postcss-loader@4.3.0(postcss@8.4.25)(webpack@5.88.1): + /postcss-loader@4.3.0(postcss@8.4.28)(webpack@5.88.2): resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -7296,261 +7435,261 @@ packages: cosmiconfig: 7.1.0 klona: 2.0.6 loader-utils: 2.0.4 - postcss: 8.4.25 + postcss: 8.4.28 schema-utils: 3.3.0 - semver: 7.5.3 - webpack: 5.88.1 + semver: 7.5.4 + webpack: 5.88.2 dev: true - /postcss-merge-longhand@6.0.0(postcss@8.4.25): + /postcss-merge-longhand@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 - stylehacks: 6.0.0(postcss@8.4.25) + stylehacks: 6.0.0(postcss@8.4.28) dev: true - /postcss-merge-rules@6.0.1(postcss@8.4.25): + /postcss-merge-rules@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 + browserslist: 4.21.10 caniuse-api: 3.0.0 - cssnano-utils: 4.0.0(postcss@8.4.25) - postcss: 8.4.25 + cssnano-utils: 4.0.0(postcss@8.4.28) + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-minify-font-values@6.0.0(postcss@8.4.25): + /postcss-minify-font-values@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-gradients@6.0.0(postcss@8.4.25): + /postcss-minify-gradients@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: colord: 2.9.3 - cssnano-utils: 4.0.0(postcss@8.4.25) - postcss: 8.4.25 + cssnano-utils: 4.0.0(postcss@8.4.28) + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-params@6.0.0(postcss@8.4.25): + /postcss-minify-params@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 - cssnano-utils: 4.0.0(postcss@8.4.25) - postcss: 8.4.25 + browserslist: 4.21.10 + cssnano-utils: 4.0.0(postcss@8.4.28) + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-selectors@6.0.0(postcss@8.4.25): + /postcss-minify-selectors@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.25): + /postcss-modules-extract-imports@3.0.0(postcss@8.4.28): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-modules-local-by-default@4.0.3(postcss@8.4.25): + /postcss-modules-local-by-default@4.0.3(postcss@8.4.28): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.25) - postcss: 8.4.25 + icss-utils: 5.1.0(postcss@8.4.28) + postcss: 8.4.28 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.0.0(postcss@8.4.25): + /postcss-modules-scope@3.0.0(postcss@8.4.28): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.25): + /postcss-modules-values@4.0.0(postcss@8.4.28): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.25) - postcss: 8.4.25 + icss-utils: 5.1.0(postcss@8.4.28) + postcss: 8.4.28 dev: true - /postcss-nested@6.0.1(postcss@8.4.25): + /postcss-nested@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-nesting@11.3.0(postcss@8.4.25): + /postcss-nesting@11.3.0(postcss@8.4.28): resolution: {integrity: sha512-JlS10AQm/RzyrUGgl5irVkAlZYTJ99mNueUl+Qab+TcHhVedLiylWVkKBhRale+rS9yWIJK48JVzQlq3LcSdeA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.13) - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-normalize-charset@6.0.0(postcss@8.4.25): + /postcss-normalize-charset@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-normalize-display-values@6.0.0(postcss@8.4.25): + /postcss-normalize-display-values@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-positions@6.0.0(postcss@8.4.25): + /postcss-normalize-positions@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-repeat-style@6.0.0(postcss@8.4.25): + /postcss-normalize-repeat-style@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-string@6.0.0(postcss@8.4.25): + /postcss-normalize-string@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-timing-functions@6.0.0(postcss@8.4.25): + /postcss-normalize-timing-functions@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-unicode@6.0.0(postcss@8.4.25): + /postcss-normalize-unicode@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 - postcss: 8.4.25 + browserslist: 4.21.10 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-url@6.0.0(postcss@8.4.25): + /postcss-normalize-url@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-whitespace@6.0.0(postcss@8.4.25): + /postcss-normalize-whitespace@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-ordered-values@6.0.0(postcss@8.4.25): + /postcss-ordered-values@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 4.0.0(postcss@8.4.25) - postcss: 8.4.25 + cssnano-utils: 4.0.0(postcss@8.4.28) + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true - /postcss-reduce-initial@6.0.0(postcss@8.4.25): + /postcss-reduce-initial@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 + browserslist: 4.21.10 caniuse-api: 3.0.0 - postcss: 8.4.25 + postcss: 8.4.28 dev: true - /postcss-reduce-transforms@6.0.0(postcss@8.4.25): + /postcss-reduce-transforms@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: true @@ -7570,28 +7709,28 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-svgo@6.0.0(postcss@8.4.25): + /postcss-svgo@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==} engines: {node: ^14 || ^16 || >= 18} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-value-parser: 4.2.0 svgo: 3.0.2 dev: true - /postcss-unique-selectors@6.0.0(postcss@8.4.25): + /postcss-unique-selectors@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.25 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /postcss-url@10.1.3(postcss@8.4.25): + /postcss-url@10.1.3(postcss@8.4.28): resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} engines: {node: '>=10'} peerDependencies: @@ -7600,7 +7739,7 @@ packages: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.0.8 - postcss: 8.4.25 + postcss: 8.4.28 xxhashjs: 0.2.2 dev: true @@ -7608,8 +7747,8 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.25: - resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==} + /postcss@8.4.28: + resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -7621,8 +7760,8 @@ packages: engines: {node: '>= 0.8.0'} dev: false - /pretty-bytes@6.1.0: - resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==} + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} dev: true @@ -7704,7 +7843,7 @@ packages: resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} dependencies: defu: 6.1.2 - destr: 2.0.0 + destr: 2.0.1 flat: 5.0.2 dev: true @@ -7726,7 +7865,7 @@ packages: resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - glob: 10.3.1 + glob: 10.3.3 json-parse-even-better-errors: 3.0.0 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -7765,15 +7904,15 @@ packages: picomatch: 2.3.1 dev: true - /recast@0.23.3: - resolution: {integrity: sha512-HbCVFh2ANP6a09nzD4lx7XthsxMOJWKX5pIcUwtLrmeEIl3I0DwjCoVXDE0Aobk+7k/mS3H50FK4iuYArpcT6Q==} + /recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} engines: {node: '>= 4'} dependencies: assert: 2.0.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.6.0 + tslib: 2.6.1 dev: true /redis-errors@1.2.0: @@ -7788,8 +7927,17 @@ packages: redis-errors: 1.2.0 dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: false + + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 dev: false /regression@2.0.1: @@ -7841,11 +7989,11 @@ packages: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: false - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true dependencies: - is-core-module: 2.12.1 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -7870,7 +8018,7 @@ packages: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false - /rollup-plugin-visualizer@5.9.2(rollup@3.26.2): + /rollup-plugin-visualizer@5.9.2(rollup@3.28.0): resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} engines: {node: '>=14'} hasBin: true @@ -7882,13 +8030,13 @@ packages: dependencies: open: 8.4.2 picomatch: 2.3.1 - rollup: 3.26.2 + rollup: 3.28.0 source-map: 0.7.4 yargs: 17.7.2 dev: true - /rollup@3.26.2: - resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + /rollup@3.28.0: + resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -7915,7 +8063,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.0 + tslib: 2.6.1 dev: true /safe-buffer@5.1.2: @@ -7968,17 +8116,9 @@ packages: commander: 2.20.3 dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true - - /semver@7.5.3: - resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} - engines: {node: '>=10'} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: true /semver@7.5.4: @@ -8070,18 +8210,20 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} dev: true - /sigstore@1.7.0: - resolution: {integrity: sha512-KP7QULhWdlu3hlp+jw2EvgWKlOGOY9McLj/jrchLjHNlNPK0KWIwF919cbmOp6QiKXLmPijR2qH/5KYWlbtG9Q==} + /sigstore@1.9.0: + resolution: {integrity: sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: - '@sigstore/protobuf-specs': 0.1.0 - '@sigstore/tuf': 1.0.2 + '@sigstore/bundle': 1.1.0 + '@sigstore/protobuf-specs': 0.2.0 + '@sigstore/sign': 1.0.0 + '@sigstore/tuf': 1.0.3 make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color @@ -8194,11 +8336,11 @@ packages: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /ssri@10.0.4: - resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==} + /ssri@10.0.5: + resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 5.0.0 + minipass: 7.0.3 dev: true /standard-as-callback@2.1.0: @@ -8308,12 +8450,6 @@ packages: engines: {node: '>=12'} dev: true - /strip-literal@1.0.1: - resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} - dependencies: - acorn: 8.10.0 - dev: true - /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: @@ -8327,19 +8463,19 @@ packages: escape-string-regexp: 1.0.5 dev: true - /stylehacks@6.0.0(postcss@8.4.25): + /stylehacks@6.0.0(postcss@8.4.28): resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.9 - postcss: 8.4.25 + browserslist: 4.21.10 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} hasBin: true dependencies: @@ -8403,7 +8539,7 @@ packages: picocolors: 1.0.0 dev: true - /tailwind-config-viewer@1.7.2(tailwindcss@3.3.2): + /tailwind-config-viewer@1.7.2(tailwindcss@3.3.3): resolution: {integrity: sha512-3JJCeAAlvG+i/EBj+tQb0x4weo30QjdSAo4hlcnVbtD+CkpzHi/UwU9InbPMcYH+ESActoa2kCyjpLEyjEkn0Q==} engines: {node: '>=8'} hasBin: true @@ -8418,13 +8554,13 @@ packages: open: 7.4.2 portfinder: 1.0.32 replace-in-file: 6.3.5 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 transitivePeerDependencies: - supports-color dev: true - /tailwindcss@3.3.2: - resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -8433,7 +8569,7 @@ packages: chokidar: 3.5.3 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.0 + fast-glob: 3.3.1 glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.19.1 @@ -8442,15 +8578,14 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.25 - postcss-import: 15.1.0(postcss@8.4.25) - postcss-js: 4.0.1(postcss@8.4.25) - postcss-load-config: 4.0.1(postcss@8.4.25) - postcss-nested: 6.0.1(postcss@8.4.25) + postcss: 8.4.28 + postcss-import: 15.1.0(postcss@8.4.28) + postcss-js: 4.0.1(postcss@8.4.28) + postcss-load-config: 4.0.1(postcss@8.4.28) + postcss-nested: 6.0.1(postcss@8.4.28) postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 - resolve: 1.22.2 - sucrase: 3.32.0 + resolve: 1.22.4 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node dev: true @@ -8501,7 +8636,7 @@ packages: yallist: 4.0.0 dev: true - /terser-webpack-plugin@5.3.9(webpack@5.88.1): + /terser-webpack-plugin@5.3.9(webpack@5.88.2): resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -8517,16 +8652,16 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.18.2 - webpack: 5.88.1 + terser: 5.19.2 + webpack: 5.88.2 dev: true - /terser@5.18.2: - resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==} + /terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -8616,8 +8751,8 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /tslib@2.6.0: - resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} @@ -8683,12 +8818,12 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false - /ufo@1.1.2: - resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + /ufo@1.2.0: + resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} dev: true - /ultrahtml@1.2.0: - resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} + /ultrahtml@1.3.0: + resolution: {integrity: sha512-xmXvE8tC8t4PVqy0/g1fe7H9USY/Brr425q4dD/0QbQMQit7siCtb06+SCqE4GfU24nwsZz8Th1g7L7mm1lL5g==} dev: true /unbzip2-stream@1.4.3: @@ -8707,19 +8842,19 @@ packages: dependencies: acorn: 8.10.0 estree-walker: 3.0.3 - magic-string: 0.30.1 - unplugin: 1.3.2 + magic-string: 0.30.2 + unplugin: 1.4.0 dev: true - /undici@5.22.1: - resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 dev: true - /unenv@1.5.1: - resolution: {integrity: sha512-tQHlmQUPyIoyGc2bF8phugmQd6wVatkVe5FqxxhM1vHfmPKWTiogSVTHA0mO8gNztDKZLpBEJx3M3CJrTZyExg==} + /unenv@1.7.1: + resolution: {integrity: sha512-iINrdDcqoAjGqoIeOW85TIfI13KGgW1VWwqNO/IzcvvZ/JGBApMAQPZhWcKhE5oC/woFSpCSXg5lc7r1UaLPng==} dependencies: consola: 3.2.3 defu: 6.1.2 @@ -8728,12 +8863,12 @@ packages: pathe: 1.1.1 dev: true - /unhead@1.1.30: - resolution: {integrity: sha512-25N/P1GnnC8EYCDerzE0hl2nOdRqS1NOFh1STEyKWRo/Bi5dXn8Z2NTaqzkbr5ExJTZEAiDfZ+eALvMTmvlXlA==} + /unhead@1.3.4: + resolution: {integrity: sha512-cSl5Xsmb99JzV0lE0D9TQxU9sU2vu3ZMdeIBy48Y0J6XVVY4WXVAyhbeSzhLVRaBfjYn7O43BGsgN7TjxSCSrg==} dependencies: - '@unhead/dom': 1.1.30 - '@unhead/schema': 1.1.30 - '@unhead/shared': 1.1.30 + '@unhead/dom': 1.3.4 + '@unhead/schema': 1.3.4 + '@unhead/shared': 1.3.4 hookable: 5.5.3 dev: true @@ -8751,46 +8886,10 @@ packages: tiny-inflate: 1.0.3 dev: false - /unimport@3.0.14(rollup@3.26.2): - resolution: {integrity: sha512-67Rh/sGpEuVqdHWkXaZ6NOq+I7sKt86o+DUtKeGB6dh4Hk1A8AQrzyVGg2+LaVEYotStH7HwvV9YSaRjyT7Uqg==} - dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) - escape-string-regexp: 5.0.0 - fast-glob: 3.3.0 - local-pkg: 0.4.3 - magic-string: 0.30.1 - mlly: 1.4.0 - pathe: 1.1.1 - pkg-types: 1.0.3 - scule: 1.0.0 - strip-literal: 1.0.1 - unplugin: 1.3.2 - transitivePeerDependencies: - - rollup - dev: true - - /unimport@3.1.0: - resolution: {integrity: sha512-ybK3NVWh30MdiqSyqakrrQOeiXyu5507tDA0tUf7VJHrsq4DM6S43gR7oAsZaFojM32hzX982Lqw02D3yf2aiA==} - dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) - escape-string-regexp: 5.0.0 - fast-glob: 3.3.1 - local-pkg: 0.4.3 - magic-string: 0.30.1 - mlly: 1.4.0 - pathe: 1.1.1 - pkg-types: 1.0.3 - scule: 1.0.0 - strip-literal: 1.0.1 - unplugin: 1.4.0 - transitivePeerDependencies: - - rollup - dev: true - - /unimport@3.1.3: + /unimport@3.1.3(rollup@3.28.0): resolution: {integrity: sha512-up4TE2yA+nMyyErGTjbYGVw95MriGa2hVRXQ3/JRp7984cwwqULcnBjHaovVpsO8tZc2j0fvgGu9yiBKOyxvYw==} dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) escape-string-regexp: 5.0.0 fast-glob: 3.3.1 local-pkg: 0.4.3 @@ -8837,18 +8936,18 @@ packages: vue-router: optional: true dependencies: - '@babel/types': 7.22.5 - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) - '@vue-macros/common': 1.4.0(vue@3.3.4) + '@babel/types': 7.22.10 + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) + '@vue-macros/common': 1.7.0(vue@3.3.4) ast-walker-scope: 0.4.2 chokidar: 3.5.3 - fast-glob: 3.3.0 + fast-glob: 3.3.1 json5: 2.2.3 local-pkg: 0.4.3 mlly: 1.4.0 pathe: 1.1.1 scule: 1.0.0 - unplugin: 1.3.2 + unplugin: 1.4.0 vue-router: 4.2.4(vue@3.3.4) yaml: 2.3.1 transitivePeerDependencies: @@ -8856,15 +8955,6 @@ packages: - vue dev: true - /unplugin@1.3.2: - resolution: {integrity: sha512-Lh7/2SryjXe/IyWqx9K7IKwuKhuOFZEhotiBquOODsv2IVyDkI9lv/XhgfjdXf/xdbv32txmnBNnC/JVTDJlsA==} - dependencies: - acorn: 8.10.0 - chokidar: 3.5.3 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.5.0 - dev: true - /unplugin@1.4.0: resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} dependencies: @@ -8874,8 +8964,8 @@ packages: webpack-virtual-modules: 0.5.0 dev: true - /unstorage@1.8.0: - resolution: {integrity: sha512-Wl6a0fYIIPx8yWIHAVNzsNRcIpagVnBV05UXeIFCNqPZ5tu0w0MPE+eTjpRe/yxCD60K7qX55K5Px/PeKvNntw==} + /unstorage@1.9.0: + resolution: {integrity: sha512-VpD8ZEYc/le8DZCrny3bnqKE4ZjioQxBRnWE+j5sGNvziPjeDlaS1NaFFHzl/kkXaO3r7UaF8MGQrs14+1B4pQ==} peerDependencies: '@azure/app-configuration': ^1.4.1 '@azure/cosmos': ^3.17.3 @@ -8883,9 +8973,11 @@ packages: '@azure/identity': ^3.2.3 '@azure/keyvault-secrets': ^4.7.0 '@azure/storage-blob': ^12.14.0 - '@planetscale/database': ^1.7.0 - '@upstash/redis': ^1.21.0 + '@capacitor/preferences': ^5.0.0 + '@planetscale/database': ^1.8.0 + '@upstash/redis': ^1.22.0 '@vercel/kv': ^0.2.2 + idb-keyval: ^6.2.1 peerDependenciesMeta: '@azure/app-configuration': optional: true @@ -8899,24 +8991,28 @@ packages: optional: true '@azure/storage-blob': optional: true + '@capacitor/preferences': + optional: true '@planetscale/database': optional: true '@upstash/redis': optional: true '@vercel/kv': optional: true + idb-keyval: + optional: true dependencies: anymatch: 3.1.3 chokidar: 3.5.3 - destr: 2.0.0 - h3: 1.7.1 + destr: 2.0.1 + h3: 1.8.0 ioredis: 5.3.2 - listhen: 1.0.4 - lru-cache: 10.0.0 + listhen: 1.3.0 + lru-cache: 10.0.1 mri: 1.2.0 node-fetch-native: 1.2.0 ofetch: 1.1.1 - ufo: 1.1.2 + ufo: 1.2.0 transitivePeerDependencies: - supports-color dev: true @@ -8926,13 +9022,22 @@ packages: engines: {node: '>=8'} dev: true - /untyped@1.3.2: - resolution: {integrity: sha512-z219Z65rOGD6jXIvIhpZFfwWdqQckB8sdZec2NO+TkcH1Bph7gL0hwLzRJs1KsOo4Jz4mF9guBXhsEnyEBGVfw==} + /untun@0.1.1: + resolution: {integrity: sha512-Xyo/3TLi2pMLr8SFSXAHVTEpEtVrqXZTzXkZAglRIairiO+utD6y7bCemYejj7GazEwomMwpNB1Gg3hoehY+zA==} hasBin: true dependencies: - '@babel/core': 7.22.8 - '@babel/standalone': 7.22.8 - '@babel/types': 7.22.5 + citty: 0.1.2 + consola: 3.2.3 + pathe: 1.1.1 + dev: true + + /untyped@1.4.0: + resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==} + hasBin: true + dependencies: + '@babel/core': 7.22.10 + '@babel/standalone': 7.22.10 + '@babel/types': 7.22.10 defu: 6.1.2 jiti: 1.19.1 mri: 1.2.0 @@ -8941,17 +9046,21 @@ packages: - supports-color dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.9): + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.9 + browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 dev: true + /uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -8967,8 +9076,8 @@ packages: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.10 - which-typed-array: 1.1.9 + is-typed-array: 1.1.12 + which-typed-array: 1.1.11 dev: true /uuid@9.0.0: @@ -9047,7 +9156,7 @@ packages: vue-tsc: optional: true dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 ansi-escapes: 4.3.2 chalk: 4.1.2 chokidar: 3.5.3 @@ -9067,8 +9176,8 @@ packages: vscode-uri: 3.0.7 dev: true - /vite-plugin-inspect@0.7.35(@nuxt/kit@3.6.5)(vite@4.4.1): - resolution: {integrity: sha512-e5w5dJAj3vDcHTxn8hHbiH+mVqYs17gaW00f3aGuMTXiqUog+T1Lsxr9Jb4WRiip84cpuhR0KFFBT1egtXboiA==} + /vite-plugin-inspect@0.7.38(@nuxt/kit@3.6.5)(vite@4.4.9): + resolution: {integrity: sha512-+p6pJVtBOLGv+RBrcKAFUdx+euizg0bjL35HhPyM0MjtKlqoC5V9xkCmO9Ctc8JrTyXqODbHqiLWJKumu5zJ7g==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': '*' @@ -9077,35 +9186,36 @@ packages: '@nuxt/kit': optional: true dependencies: - '@antfu/utils': 0.7.5 + '@antfu/utils': 0.7.6 '@nuxt/kit': 3.6.5 - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.0.3(rollup@3.28.0) debug: 4.3.4 + error-stack-parser-es: 0.1.1 fs-extra: 11.1.1 open: 9.1.0 picocolors: 1.0.0 sirv: 2.0.3 - vite: 4.4.1(@types/node@18.0.0) + vite: 4.4.9(@types/node@18.0.0) transitivePeerDependencies: - rollup - supports-color dev: true - /vite-plugin-vue-inspector@3.5.0(vite@4.4.1): - resolution: {integrity: sha512-dDoxEi5VWkfsKflVUYxElC3XD/MOn8s/6mjCqWRDlFIQ+OsY0cW5PNTbqxGllbBBCr5SDnDmPWFS1vMJxrLVEw==} + /vite-plugin-vue-inspector@3.6.0(vite@4.4.9): + resolution: {integrity: sha512-Fi+9JaMx/reuic+MWbrdw8g5TwZM5a/BmdBT8OKKZi3rK4Qw3wND9smT+Ld+Daitbgly17uvuCiull2KV/hEBQ==} peerDependencies: vite: ^3.0.0-0 || ^4.0.0-0 dependencies: - '@babel/core': 7.22.8 - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.8) - '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.22.8) - '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.8) + '@babel/core': 7.22.10 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.10) + '@babel/plugin-transform-typescript': 7.22.10(@babel/core@7.22.10) + '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.22.10) '@vue/compiler-dom': 3.3.4 esno: 0.16.3 kolorist: 1.8.0 - magic-string: 0.30.1 + magic-string: 0.30.2 shell-quote: 1.8.1 - vite: 4.4.1(@types/node@18.0.0) + vite: 4.4.9(@types/node@18.0.0) transitivePeerDependencies: - supports-color dev: true @@ -9137,14 +9247,14 @@ packages: dependencies: '@types/node': 18.0.0 esbuild: 0.17.19 - postcss: 8.4.25 - rollup: 3.26.2 + postcss: 8.4.28 + rollup: 3.28.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.4.1(@types/node@18.0.0): - resolution: {integrity: sha512-8mmwPlsy7t+ZcTme7vdbVGuZ3Tri+lrLXr6hsF5UHdyYyARPPPMtM16QlqC9TZuCd5j3NmWs1rwka3cVSRHZTw==} + /vite@4.4.9(@types/node@18.0.0): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -9172,9 +9282,9 @@ packages: optional: true dependencies: '@types/node': 18.0.0 - esbuild: 0.18.11 - postcss: 8.4.25 - rollup: 3.26.2 + esbuild: 0.18.20 + postcss: 8.4.28 + rollup: 3.28.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -9222,7 +9332,7 @@ packages: /vue-bundle-renderer@1.0.3: resolution: {integrity: sha512-EfjX+5TTUl70bki9hPuVp+54JiZOvFIfoWBcfXsSwLzKEiDYyHNi5iX8srnqLIv3YRnvxgbntdcG1WPq0MvffQ==} dependencies: - ufo: 1.1.2 + ufo: 1.2.0 dev: true /vue-chartjs@5.2.0(chart.js@4.3.0)(vue@3.3.4): @@ -9312,8 +9422,8 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.88.1: - resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + /webpack@5.88.2: + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -9329,7 +9439,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.10.0 acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.9 + browserslist: 4.21.10 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.3.0 @@ -9343,7 +9453,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.88.1) + terser-webpack-plugin: 5.3.9(webpack@5.88.2) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -9359,8 +9469,8 @@ packages: webidl-conversions: 3.0.1 dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 @@ -9368,7 +9478,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 dev: true /which@2.0.2: @@ -9514,8 +9623,8 @@ packages: engines: {node: '>=10'} dev: true - /zhead@2.0.9: - resolution: {integrity: sha512-Y3g6EegQc6PVrYXPq2OS7/s27UGVS5Y6NY6SY3XGH4Hg+yQWbQTtWsjCgmpR8kZnYrv8auB54sz+x5FEDrvqzQ==} + /zhead@2.0.10: + resolution: {integrity: sha512-irug8fXNKjqazkA27cFQs7C6/ZD3qNiEzLC56kDyzQART/Z9GMGfg8h2i6fb9c8ZWnIx/QgOgFJxK3A/CYHG0g==} dev: true /zip-stream@4.1.0: From 026d57b5d4acb1d91d4b675d83b4fe06c37dbf8d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 16 Aug 2023 23:31:08 +0100 Subject: [PATCH 002/115] init msbuild benchmarks --- .github/workflows/benchmarks_nuget.yml | 9 +++++---- .../DotNetPerfMonitor/components/dashboard/c_sharp.vue | 2 +- .../DotNetPerfMonitor/components/dashboard/f_sharp.vue | 2 +- .../components/dashboard/line_chart.vue | 5 +++-- .../DotNetPerfMonitor/components/dashboard/ms_build.vue | 2 +- .../DotNetPerfMonitor/components/dashboard/nuget.vue | 4 ++-- _dashboard/DotNetPerfMonitor/composables/states.ts | 2 +- data/nuget.csv | 7 ++----- 8 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.github/workflows/benchmarks_nuget.yml b/.github/workflows/benchmarks_nuget.yml index 7eaf93c..2b903b5 100644 --- a/.github/workflows/benchmarks_nuget.yml +++ b/.github/workflows/benchmarks_nuget.yml @@ -1,4 +1,4 @@ -name: benchmarks +name: benchmarks_nuget on: workflow_dispatch: @@ -101,13 +101,14 @@ jobs: with: python-version: 3.11 - - name: Install dependencies - run: pip3 install -r requirements.txt - - uses: actions/download-artifact@v3 with: path: artifacts + - name: Install python3 dependencies + working-directory: scripts/processors/ + run: pip3 install -r requirements.txt + - name: Process data working-directory: scripts/processors/ shell: pwsh diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/c_sharp.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/c_sharp.vue index 50ca354..1752440 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/c_sharp.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/c_sharp.vue @@ -59,7 +59,7 @@ const generateBooleans = (length) => { for (let i = 0; i < length; i++) arr.push(true) return arr; } -const path = 'https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv' +const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/csharp.csv" const converted = await useCsvConverter(path) const scenariosList = useColumnsetExtractor(converted, 'scenario') diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/f_sharp.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/f_sharp.vue index 50ca354..fa1401f 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/f_sharp.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/f_sharp.vue @@ -59,7 +59,7 @@ const generateBooleans = (length) => { for (let i = 0; i < length; i++) arr.push(true) return arr; } -const path = 'https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv' +const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/fsharp.csv" const converted = await useCsvConverter(path) const scenariosList = useColumnsetExtractor(converted, 'scenario') diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue index 36580ce..9e8272b 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/line_chart.vue @@ -14,14 +14,15 @@ const props = defineProps({ scenario: String }) const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/nuget.csv" -const file = '../../../../data/nuget.csv' +//const file = '../../../../data/nuget.csv' const converted = await useCsvConverter(path) const scenario = useAlphaScenario() const filtered = useScenarioFilter(converted, props.scenario) const _options = useChartOptions('line') const _rows = []; -const benchmarks = useColumnsetExtractor(converted, 'test case') +const column = "test case" +const benchmarks = useColumnsetExtractor(converted, column) benchmarks.forEach(async (benchmark) => { const _data = useBenchmarkGrouper(filtered, benchmark) const clean_data = _data.map((x) => { diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/ms_build.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/ms_build.vue index 50ca354..955bae1 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/ms_build.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/ms_build.vue @@ -59,7 +59,7 @@ const generateBooleans = (length) => { for (let i = 0; i < length; i++) arr.push(true) return arr; } -const path = 'https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv' +const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/msbuild.csv" const converted = await useCsvConverter(path) const scenariosList = useColumnsetExtractor(converted, 'scenario') diff --git a/_dashboard/DotNetPerfMonitor/components/dashboard/nuget.vue b/_dashboard/DotNetPerfMonitor/components/dashboard/nuget.vue index 50ca354..5402e30 100644 --- a/_dashboard/DotNetPerfMonitor/components/dashboard/nuget.vue +++ b/_dashboard/DotNetPerfMonitor/components/dashboard/nuget.vue @@ -43,7 +43,7 @@

Apply filter for scenarios

+ :name="scenario" :label="scenario" />
@@ -59,7 +59,7 @@ const generateBooleans = (length) => { for (let i = 0; i < length; i++) arr.push(true) return arr; } -const path = 'https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv' +const path = "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/nuget.csv" const converted = await useCsvConverter(path) const scenariosList = useColumnsetExtractor(converted, 'scenario') diff --git a/_dashboard/DotNetPerfMonitor/composables/states.ts b/_dashboard/DotNetPerfMonitor/composables/states.ts index 2a91b86..2e917e6 100644 --- a/_dashboard/DotNetPerfMonitor/composables/states.ts +++ b/_dashboard/DotNetPerfMonitor/composables/states.ts @@ -6,7 +6,7 @@ export const useDataSource = () => useState( "datasource", () => - "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data.csv" + "https://raw.githubusercontent.com/G-Research/DotNetPerfMonitor/main/data/nuget.csv" ); export const useRegressionsNumber = () => diff --git a/data/nuget.csv b/data/nuget.csv index 9b021be..b0ca39c 100644 --- a/data/nuget.csv +++ b/data/nuget.csv @@ -1,4 +1,4 @@ -version,base version,scenario,solution,timestamp,duration,base duration,relative duration +version,base version,scenario,test case,timestamp,duration,base duration,relative duration 8.0.100-alpha.1.23061.8,7.0.100,warmup,LargeAppCPM-142722b,2023-01-12T10:22:13.8149095Z,686.2771186,112.8556037,608.1019427482802 8.0.100-alpha.1.23061.8,7.0.100,arctic,LargeAppCPM-142722b,2023-01-12T10:22:13.8149095Z,354.014419,67.5897543,523.7693533086272 8.0.100-alpha.1.23061.8,7.0.100,cold,LargeAppCPM-142722b,2023-01-12T10:22:13.8149095Z,324.1806466,58.939173,550.0257809861024 @@ -16064,8 +16064,6 @@ version,base version,scenario,solution,timestamp,duration,base duration,relative 8.0.100-rc.1.23410.12,7.0.100,cold,Orleans-eda972a,2023-08-11T00:12:02.9772229Z,33.2036814,15.0829142,220.14102155404424 8.0.100-rc.1.23410.12,7.0.100,force,Orleans-eda972a,2023-08-11T00:12:02.9772229Z,7.5395383,5.5924925,134.81534932769245 8.0.100-rc.1.23410.12,7.0.100,noop,Orleans-eda972a,2023-08-11T00:12:02.9772229Z,5.5363815,3.9919522,138.68857197237983 -<<<<<<< HEAD:data/nuget.csv -======= 8.0.100-rc.1.23410.12,6.0.400,warmup,LargeAppCPM64-142722b,2023-08-11T08:07:57.4867500Z,112.1462944,74.70458,150.1197040395649 8.0.100-rc.1.23410.12,6.0.400,arctic,LargeAppCPM64-142722b,2023-08-11T08:07:57.4867500Z,79.9045722,50.3059874,158.83710136658604 8.0.100-rc.1.23410.12,6.0.400,cold,LargeAppCPM64-142722b,2023-08-11T08:07:57.4867500Z,79.2743143,42.2474935,187.64264511928974 @@ -16390,5 +16388,4 @@ version,base version,scenario,solution,timestamp,duration,base duration,relative 8.0.100-rc.1.23414.11,7.0.100,arctic,Orleans-eda972a,2023-08-15T08:05:30.3948830Z,39.0085192,17.8316689,218.75977744292908 8.0.100-rc.1.23414.11,7.0.100,cold,Orleans-eda972a,2023-08-15T08:05:30.3948830Z,35.7928123,15.4269367,232.0150331594995 8.0.100-rc.1.23414.11,7.0.100,force,Orleans-eda972a,2023-08-15T08:05:30.3948830Z,6.2371047,5.4641512,114.14590247795486 -8.0.100-rc.1.23414.11,7.0.100,noop,Orleans-eda972a,2023-08-15T08:05:30.3948830Z,4.7419945,4.0517558,117.03554542946542 ->>>>>>> 036edca5d42d4224f074ca158710dc7f2a141236:data.csv +8.0.100-rc.1.23414.11,7.0.100,noop,Orleans-eda972a,2023-08-15T08:05:30.3948830Z,4.7419945,4.0517558,117.03554542946542 \ No newline at end of file From e8bb78cb4e006ba76f51cc23a5b10c7666390804 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:24:08 +0100 Subject: [PATCH 003/115] setup msbuild workflow --- .github/workflows/benchmark_msbuild.yaml | 43 ++++++++++++++++++++++++ scripts/msbuild_performance_test.py | 37 ++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 .github/workflows/benchmark_msbuild.yaml create mode 100644 scripts/msbuild_performance_test.py diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml new file mode 100644 index 0000000..bf69ab0 --- /dev/null +++ b/.github/workflows/benchmark_msbuild.yaml @@ -0,0 +1,43 @@ +name: msbuild benchmarks +on: + workflow_dispatch: + push: + branches: ["*"] + pull_request: + branches: ["*"] +env: + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + DOTNET_BASE_VERSION_URL_LINUX: "https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz" + DOTNET_BASE_VERSION_URL_WINDOWS: "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" + DOTNET_DAILY_VERSION_URL_LINUX: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" + DOTNET_DAILY_VERSION_URL_WINDOWS: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" + TEST_SOLUTION_DIR: "TestSolutions" +jobs: + msbuild_windows_benchmark: + strategy: + matrix: + OS: [windows-latest, ubuntu-latest] + BASE_VERSION: + [DOTNET_BASE_VERSION_URL_WINDOWS, DOTNET_BASE_VERSION_URL_LINUX] + DAILY_VERSION: + [DOTNET_DAILY_VERSION_URL_WINDOWS, DOTNET_DAILY_VERSION_URL_LINUX] + fail-fast: false + runs-on: ${{ matrix.OS }} + steps: + #__________WE CHECK OUT TO WORKING REPO__________# + - name: Checkout + uses: actions/checkout@v3 + + #__________THEN WE CLONE TEST CODE REPO__________# + #(This is kind of checking out to a different repo)# + - name: checkout to test code repo + run: | + git clone $TEST_SOLUTION_REPO_URL + + #__________WE GET THINGS READY TO RUN PYTHON SCRIPTS__________# + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: 3.11 diff --git a/scripts/msbuild_performance_test.py b/scripts/msbuild_performance_test.py new file mode 100644 index 0000000..447f407 --- /dev/null +++ b/scripts/msbuild_performance_test.py @@ -0,0 +1,37 @@ +import subprocess +import time +import sys +import os + + +def measure_execution_time(command): + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def main(repo_url, repo_path, command): + if repo_path and repo_url is not None: + checkout_repository(repo_url, repo_path) + os.chdir(repo_path) + + elapsed_time = measure_execution_time(command) + print(f"Command '{command}' took {elapsed_time:.2f} seconds to execute.") + return elapsed_time + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: python msbuild_performance_test.py ") + sys.exit(1) + + command_to_run = sys.argv[1] + main(repo_url, repo_path, command_to_run) From a293e0ed8a88bd416f09ad3d79b7203b59b1321e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:35:06 +0100 Subject: [PATCH 004/115] added test solution dir --- .github/workflows/benchmark_msbuild.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index bf69ab0..70a1b92 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -5,6 +5,7 @@ on: branches: ["*"] pull_request: branches: ["*"] + env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true @@ -13,7 +14,8 @@ env: DOTNET_DAILY_VERSION_URL_LINUX: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_WINDOWS: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" - TEST_SOLUTION_DIR: "TestSolutions" + TEST_SOLUTION_DIR: "SimpleAppWithLibs" + jobs: msbuild_windows_benchmark: strategy: @@ -35,6 +37,7 @@ jobs: - name: checkout to test code repo run: | git clone $TEST_SOLUTION_REPO_URL + cd $TEST_SOLUTION_DIR #__________WE GET THINGS READY TO RUN PYTHON SCRIPTS__________# - name: setup python From a5464f1098403ac80e9811fe0bd31d1a75c54f9e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:40:55 +0100 Subject: [PATCH 005/115] rm checking out to repo from workflow --- .github/workflows/benchmark_msbuild.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 70a1b92..631b738 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -34,13 +34,20 @@ jobs: #__________THEN WE CLONE TEST CODE REPO__________# #(This is kind of checking out to a different repo)# - - name: checkout to test code repo - run: | - git clone $TEST_SOLUTION_REPO_URL - cd $TEST_SOLUTION_DIR + # - name: checkout to test code repo + # run: | + # git clone $TEST_SOLUTION_REPO_URL + # cd $TEST_SOLUTION_DIR #__________WE GET THINGS READY TO RUN PYTHON SCRIPTS__________# - name: setup python uses: actions/setup-python@v4 with: python-version: 3.11 + + #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# + - name: run benchmark for ${{ matrix.OS }} + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + python run_benchmark.py --base-version-url $BASE_VERSION --daily-version-url $DAILY_VERSION From 2e6399ebee91d0f1079a291b56a533178d9a835b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:43:24 +0100 Subject: [PATCH 006/115] add argparser as requirement --- scripts/processors/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/processors/requirements.txt b/scripts/processors/requirements.txt index 3ad1509..cecbdd6 100644 --- a/scripts/processors/requirements.txt +++ b/scripts/processors/requirements.txt @@ -1,3 +1,4 @@ plotly pandas -pylint \ No newline at end of file +pylint +argparse \ No newline at end of file From 31a4778cf67b9e6c68833704fb3ae503127320f9 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:46:21 +0100 Subject: [PATCH 007/115] refactored test_cases dir --- .github/workflows/benchmark_msbuild.yaml | 1 + scripts/{ => test_cases}/msbuild_performance_test.py | 0 scripts/test_cases/requirements.txt | 3 +++ 3 files changed, 4 insertions(+) rename scripts/{ => test_cases}/msbuild_performance_test.py (100%) create mode 100644 scripts/test_cases/requirements.txt diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 631b738..9362e6e 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -47,6 +47,7 @@ jobs: #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# - name: run benchmark for ${{ matrix.OS }} + working-directory: scripts/benchmark run: | python -m pip install --upgrade pip pip install -r requirements.txt diff --git a/scripts/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py similarity index 100% rename from scripts/msbuild_performance_test.py rename to scripts/test_cases/msbuild_performance_test.py diff --git a/scripts/test_cases/requirements.txt b/scripts/test_cases/requirements.txt new file mode 100644 index 0000000..826340a --- /dev/null +++ b/scripts/test_cases/requirements.txt @@ -0,0 +1,3 @@ +pandas +pylint +argparse \ No newline at end of file From e4dfca7625767da4c2de21a86cfe6fa23210c58b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:54:27 +0100 Subject: [PATCH 008/115] adding os as args --- .github/workflows/benchmark_msbuild.yaml | 4 ++-- scripts/test_cases/msbuild_performance_test.py | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 9362e6e..2615714 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -47,8 +47,8 @@ jobs: #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# - name: run benchmark for ${{ matrix.OS }} - working-directory: scripts/benchmark + working-directory: scripts/test_cases/ run: | python -m pip install --upgrade pip pip install -r requirements.txt - python run_benchmark.py --base-version-url $BASE_VERSION --daily-version-url $DAILY_VERSION + python msbuild_performance_test.py --os ${{matrix.OS}} --base-version-url ${{matrix.BASE_VERSION}} --daily-version-url ${{matrix.DAILY_VERSION}} diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 447f407..6024680 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -2,6 +2,7 @@ import time import sys import os +import argparse def measure_execution_time(command): @@ -29,9 +30,4 @@ def main(repo_url, repo_path, command): if __name__ == "__main__": - if len(sys.argv) != 2: - print("Usage: python msbuild_performance_test.py ") - sys.exit(1) - - command_to_run = sys.argv[1] - main(repo_url, repo_path, command_to_run) + main() From 11c43dbc71708272501ea8520ecbcd003d37e406 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 03:55:56 +0100 Subject: [PATCH 009/115] add arguments parser --- scripts/test_cases/msbuild_performance_test.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 6024680..7b492c5 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -30,4 +30,13 @@ def main(repo_url, repo_path, command): if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="___measures the execution time of msbuild command___.") + parser.add_argument("--base-version-url", required=True, + help="URL for the base version") + parser.add_argument("--daily-version-url", required=True, + help="URL for the daily version") + + args = parser.parse_args() + main() From 81de824bed52ddf043d9c4dd88fd1c58b5058123 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:14:10 +0100 Subject: [PATCH 010/115] added repo cloner --- .github/workflows/benchmark_msbuild.yaml | 2 +- .../test_cases/msbuild_performance_test.py | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 2615714..69eaceb 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -51,4 +51,4 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - python msbuild_performance_test.py --os ${{matrix.OS}} --base-version-url ${{matrix.BASE_VERSION}} --daily-version-url ${{matrix.DAILY_VERSION}} + python msbuild_performance_test.py --os ${{matrix.OS}} --base-version-url ${{matrix.BASE_VERSION}} --daily-version-url ${{matrix.DAILY_VERSION}} --solution-repo-url ${{env.TEST_SOLUTION_REPO_URL}} --solution-dir ${{env.TEST_SOLUTION_DIR}} diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 7b492c5..3eee100 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -19,10 +19,23 @@ def measure_execution_time(command): return elapsed_time -def main(repo_url, repo_path, command): - if repo_path and repo_url is not None: - checkout_repository(repo_url, repo_path) - os.chdir(repo_path) +def clone_repository(repo_url, repo_path): + # Clone the repository containing the solution + subprocess.call(f"git clone {repo_url}", shell=True) + subprocess.call(f"cd {repo_path}", shell=True) + + +def delete_clone(repo_path): + # extract the repository name from the url + repo_name = repo_url.split("/")[-1].replace(".git", "") + subprocess.call(f"rm -rf {repo_name}", shell=True) + + +def main(operating_system, base_version_url, daily_version_url, + solution_repo_url, solution_dir): + + # clone the repository and navigate to the solution directory + clone_repository(solution_repo_url, solution_dir) elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time:.2f} seconds to execute.") @@ -32,11 +45,25 @@ def main(repo_url, repo_path, command): if __name__ == "__main__": parser = argparse.ArgumentParser( description="___measures the execution time of msbuild command___.") + parser.add_argument("--os", required=True, + help="operating system to be used to run the test") + parser.add_argument("--base-version-url", required=True, - help="URL for the base version") + help="dotnet sdk base version URL") parser.add_argument("--daily-version-url", required=True, - help="URL for the daily version") + help="dotnet sdk daily version URL") + parser.add_argument("--solution-repo-url", required=True, + help="test code repository URL") + parser.add_argument("--solution-dir", required=True, + help="directory of test code") args = parser.parse_args() - main() + operating_system = args.os + base_version_url = args.base_version_url + daily_version_url = args.daily_version_url + solution_repo_url = args.repo_url + solution_dir = args.solution_dir + + main(operating_system, base_version_url, daily_version_url, + solution_repo_url, solution_dir) From e494a20f55fe3f8e9546c0a1b9c7373cd5bafd7f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:14:58 +0100 Subject: [PATCH 011/115] ellapse command format --- scripts/test_cases/msbuild_performance_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 3eee100..fbbb594 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -38,7 +38,7 @@ def main(operating_system, base_version_url, daily_version_url, clone_repository(solution_repo_url, solution_dir) elapsed_time = measure_execution_time(command) - print(f"Command '{command}' took {elapsed_time:.2f} seconds to execute.") + print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From e01e3bb1a594579be248a0f6d654807c83d84d5b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:19:25 +0100 Subject: [PATCH 012/115] add build command --- scripts/test_cases/msbuild_performance_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index fbbb594..17f1c30 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -37,6 +37,8 @@ def main(operating_system, base_version_url, daily_version_url, # clone the repository and navigate to the solution directory clone_repository(solution_repo_url, solution_dir) + # build the solution using the base version + command = f"dotnet build Solution.sln" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From e2df9843242ab3278e31858be3e3ee46e59755b4 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:19:25 +0100 Subject: [PATCH 013/115] add build command --- scripts/test_cases/msbuild_performance_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index fbbb594..4a62b58 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -37,6 +37,8 @@ def main(operating_system, base_version_url, daily_version_url, # clone the repository and navigate to the solution directory clone_repository(solution_repo_url, solution_dir) + # build the solution using the base version + command = "dotnet build Solution.sln" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From 68da62bffc6664195d50193746a9a3453cd0b42f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:23:19 +0100 Subject: [PATCH 014/115] added pylintrc --- scripts/test_cases/.pylintrc | 2 ++ scripts/test_cases/msbuild_performance_test.py | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 scripts/test_cases/.pylintrc diff --git a/scripts/test_cases/.pylintrc b/scripts/test_cases/.pylintrc new file mode 100644 index 0000000..84de4c0 --- /dev/null +++ b/scripts/test_cases/.pylintrc @@ -0,0 +1,2 @@ +[pylint.messages control] +disable = unused-variable, line-too-long, invalid-name \ No newline at end of file diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 4a62b58..08513ce 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -1,7 +1,5 @@ import subprocess import time -import sys -import os import argparse From 380aede186175598befd790db1ebd7984498c81d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:29:18 +0100 Subject: [PATCH 015/115] added docstrings --- .../test_cases/msbuild_performance_test.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 08513ce..1fefe0d 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -4,6 +4,15 @@ def measure_execution_time(command): + """summary for measure_execution_time + + Args: + command ([String]): [command to be executed] + + Returns: + [Number]: [ellapsed time in seconds] + """ + # Record start time start_time = time.time() @@ -18,12 +27,24 @@ def measure_execution_time(command): def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) subprocess.call(f"cd {repo_path}", shell=True) def delete_clone(repo_path): + """_summary_ + + Args: + repo_path (String): path containing test code + """ # extract the repository name from the url repo_name = repo_url.split("/")[-1].replace(".git", "") subprocess.call(f"rm -rf {repo_name}", shell=True) @@ -31,6 +52,17 @@ def delete_clone(repo_path): def main(operating_system, base_version_url, daily_version_url, solution_repo_url, solution_dir): + """_summary_ + + Returns: + operating_system: operating system to be used to run the test + base_version_url: dotnet sdk base version URL + daily_version_url: dotnet sdk daily version URL + solution_repo_url: test code repository URL + solution_dir: directory of test code + + + """ # clone the repository and navigate to the solution directory clone_repository(solution_repo_url, solution_dir) From 2cc946f4baee2a2af571ccdf88df57a453a5b3f9 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:31:17 +0100 Subject: [PATCH 016/115] disable redefined-outer-name in linter' --- .pylintrc | 2 +- scripts/test_cases/.pylintrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pylintrc b/.pylintrc index 84de4c0..5e77e0b 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name \ No newline at end of file diff --git a/scripts/test_cases/.pylintrc b/scripts/test_cases/.pylintrc index 84de4c0..5e77e0b 100644 --- a/scripts/test_cases/.pylintrc +++ b/scripts/test_cases/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name \ No newline at end of file From 6634cd36260755542ce153bd0e93e2b084cd3023 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 04:43:13 +0100 Subject: [PATCH 017/115] fix linters --- scripts/processors/.pylintrc | 2 +- scripts/test_cases/.pylintrc | 2 +- scripts/test_cases/msbuild_performance_test.py | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/processors/.pylintrc b/scripts/processors/.pylintrc index fe98ef9..366fa5f 100644 --- a/scripts/processors/.pylintrc +++ b/scripts/processors/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file diff --git a/scripts/test_cases/.pylintrc b/scripts/test_cases/.pylintrc index 5e77e0b..366fa5f 100644 --- a/scripts/test_cases/.pylintrc +++ b/scripts/test_cases/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 1fefe0d..d2f477d 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -1,3 +1,9 @@ +"""_summary_ +This script basically runs benchmark test for msbuild +Returns: + None: ..... +""" + import subprocess import time import argparse @@ -39,7 +45,7 @@ def clone_repository(repo_url, repo_path): subprocess.call(f"cd {repo_path}", shell=True) -def delete_clone(repo_path): +def delete_clone(repo_url): """_summary_ Args: From eabbebe398fd48a4917a58258216a73580744d6d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 05:38:50 +0100 Subject: [PATCH 018/115] setup downloading and benchmarking logic --- scripts/test_cases/msbuild_performance_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index d2f477d..2287285 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -100,7 +100,7 @@ def main(operating_system, base_version_url, daily_version_url, operating_system = args.os base_version_url = args.base_version_url daily_version_url = args.daily_version_url - solution_repo_url = args.repo_url + solution_repo_url = args.solution_repo_url solution_dir = args.solution_dir main(operating_system, base_version_url, daily_version_url, From 97d9ed0b22c54d4a06ce9a159f6628635d8aaad5 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 05:48:26 +0100 Subject: [PATCH 019/115] added unsuded arg ignore --- .pylintrc | 2 +- .../test_cases/msbuild_performance_test.py | 62 ++++++++++++++++++- scripts/test_cases/requirements.txt | 4 +- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/.pylintrc b/.pylintrc index 5e77e0b..366fa5f 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 2287285..ec99c9e 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -4,9 +4,61 @@ None: ..... """ +import argparse import subprocess import time -import argparse +import os + +EXTRACT_PATH = "sdk" +WORKING_DIR = "msbuild-performance-test" + + +def back_to_previous_dir(): + """_summary_ + """ + subprocess.call(f"cd ..", shell=True) + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def extract_zip(zip_file, extract_folder): + """ Extracts zip file to extract_folder""" + with zipfile.ZipFile(zip_file, 'r') as zip_ref: + zip_ref.extractall(extract_folder) + + +def extract_zip(zip_file, extract_folder): + with zipfile.ZipFile(zip_file, 'r') as zip_ref: + zip_ref.extractall(extract_folder) + + +def download_and_extract_dotnet_sdk(version_url, is_base): + """_summary_ + + Args: + version_url (String): dotnet sdk version url + """ + path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" + download_file(url, os.path.basename(version_url)) + extract_zip(os.path.basename(version_url), path) + # Download the dotnet sdk + # if operating_system == "ubuntu-latest": + # subprocess.call( + # f"curl -O {version_url} -o dotnet-sdk.zip", shell=True) + # subprocess.call("tar -xf dotnet-sdk.zip", shell=True) + + # else: + # # means os is windows + # powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" + # extract_command = "Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk" + + # subprocess.call(f"powershell {powershell_command}", shell=True) + # subprocess.call(f"powershell {extract_command}", shell=True) def measure_execution_time(command): @@ -69,12 +121,18 @@ def main(operating_system, base_version_url, daily_version_url, """ + # create a working directory for the test experiment + subprocess.call(f"mkdir {WORKING_DIR}", shell=True) + subprocess.call(f"cd {WORKING_DIR}", shell=True) + # download and extract the dotnet sdk + download_and_extract_dotnet_sdk(base_version_url) # clone the repository and navigate to the solution directory clone_repository(solution_repo_url, solution_dir) # build the solution using the base version - command = "dotnet build Solution.sln" + exec_path = "../../sdk/base/dotnet.exe" if operating_system == "windows-latest" else "../sdk/base/dotnet" + command = f"{exec_path} build Solution.sln" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time diff --git a/scripts/test_cases/requirements.txt b/scripts/test_cases/requirements.txt index 826340a..ad7a8c0 100644 --- a/scripts/test_cases/requirements.txt +++ b/scripts/test_cases/requirements.txt @@ -1,3 +1,5 @@ pandas pylint -argparse \ No newline at end of file +argparse +urllib.request +zipfile \ No newline at end of file From 266940ae84bb53a335d092872bbf047a4830f513 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 05:55:39 +0100 Subject: [PATCH 020/115] fix linters --- scripts/test_cases/msbuild_performance_test.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index ec99c9e..1ad986b 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -8,6 +8,9 @@ import subprocess import time import os +import zipfile +import urllib +import urllib.request EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" @@ -16,7 +19,7 @@ def back_to_previous_dir(): """_summary_ """ - subprocess.call(f"cd ..", shell=True) + subprocess.call("cd ..", shell=True) def download_file(url, filename): @@ -32,11 +35,6 @@ def extract_zip(zip_file, extract_folder): zip_ref.extractall(extract_folder) -def extract_zip(zip_file, extract_folder): - with zipfile.ZipFile(zip_file, 'r') as zip_ref: - zip_ref.extractall(extract_folder) - - def download_and_extract_dotnet_sdk(version_url, is_base): """_summary_ @@ -44,7 +42,7 @@ def download_and_extract_dotnet_sdk(version_url, is_base): version_url (String): dotnet sdk version url """ path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - download_file(url, os.path.basename(version_url)) + download_file(version_url, os.path.basename(version_url)) extract_zip(os.path.basename(version_url), path) # Download the dotnet sdk # if operating_system == "ubuntu-latest": @@ -125,7 +123,7 @@ def main(operating_system, base_version_url, daily_version_url, subprocess.call(f"mkdir {WORKING_DIR}", shell=True) subprocess.call(f"cd {WORKING_DIR}", shell=True) # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(base_version_url) + download_and_extract_dotnet_sdk(base_version_url, True) # clone the repository and navigate to the solution directory clone_repository(solution_repo_url, solution_dir) From 47d8adc349c7ae0ac1373d2f5eb295dc5090118e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 05:57:35 +0100 Subject: [PATCH 021/115] add urllib requirement --- scripts/test_cases/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/requirements.txt b/scripts/test_cases/requirements.txt index ad7a8c0..62804ba 100644 --- a/scripts/test_cases/requirements.txt +++ b/scripts/test_cases/requirements.txt @@ -1,5 +1,5 @@ pandas pylint argparse -urllib.request +urllib zipfile \ No newline at end of file From 4d4f1afd3ba08a23ce31df9dfcfecabf8d64159e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 06:04:29 +0100 Subject: [PATCH 022/115] rm urllib --- scripts/test_cases/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/test_cases/requirements.txt b/scripts/test_cases/requirements.txt index 62804ba..e176332 100644 --- a/scripts/test_cases/requirements.txt +++ b/scripts/test_cases/requirements.txt @@ -1,5 +1,4 @@ pandas pylint argparse -urllib zipfile \ No newline at end of file From 9166ffe10622b02dfe14d63e027d55f64c5c80e9 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 06:08:43 +0100 Subject: [PATCH 023/115] rename job name --- .DS_Store | Bin 6148 -> 6148 bytes .github/workflows/benchmark_msbuild.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 0477eabbfe8b9b84a7fde71992c7eda40242a210..fca97e7aa1868be5de2c8cbe2f803910c7c5bfab 100644 GIT binary patch delta 388 zcmZoMXfc=|#>B!kF;Q%yo}wr>0|Nsi1A_oVQh9MfQcivnkiTPdAoFtOdXN+gLkdG8 zLkUA7vUE~GPG)h5fx$IKCT12^Hg*nn4sMRv;Eeq8;F83W(qgB?qG%8=BtJhV3C2!L z3d>9_j~5Ve&d)1J%*;zI0&B=jNd+p23D3++$uD=xFU?CS2I~#Z3QQeby zm?YyAC1(Kz;2z7(cX5IGo1^IJi(WmqqmHQZDR|`zG7N*0^K%QpmM8{nZf4rTw3(fQ cp92`iz;OJ|Jegm_kpt)?CXkBF5h81t0dGKJG5`Po delta 178 zcmZoMXfc=|#>B)qu~2NHo}wTZ0|Nsi1A_oVPP$=ma(-^X#=_N%j9ioNut>%!#A*X& zSr}3n5*bPu5_9uiT#|C~lYn9z@y#wbraK*VM3qm$D_@WSu>q)ufk9!y=3v$>OdA_6 iFl}b%;O79kXtN;4cjn3bB90s&1wco!Y>p6F!wdjnx+{19 diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 69eaceb..c2e5674 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -17,7 +17,7 @@ env: TEST_SOLUTION_DIR: "SimpleAppWithLibs" jobs: - msbuild_windows_benchmark: + msbuild_benchmarks: strategy: matrix: OS: [windows-latest, ubuntu-latest] From 0595fda9735850026a8d341ad7c116f88564da2f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 06:35:38 +0100 Subject: [PATCH 024/115] formatted versions --- .github/workflows/benchmark_msbuild.yaml | 6 ++++-- scripts/test_cases/msbuild_performance_test.py | 4 ++-- scripts/test_cases/requirements.txt | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index c2e5674..36e14d1 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -22,9 +22,11 @@ jobs: matrix: OS: [windows-latest, ubuntu-latest] BASE_VERSION: - [DOTNET_BASE_VERSION_URL_WINDOWS, DOTNET_BASE_VERSION_URL_LINUX] + - ${{ env.DOTNET_BASE_VERSION_URL_WINDOWS }} + - ${{ env.DOTNET_BASE_VERSION_URL_LINUX }} DAILY_VERSION: - [DOTNET_DAILY_VERSION_URL_WINDOWS, DOTNET_DAILY_VERSION_URL_LINUX] + - ${{ env.DOTNET_DAILY_VERSION_URL_WINDOWS }} + - ${{ env.DOTNET_DAILY_VERSION_URL_LINUX }} fail-fast: false runs-on: ${{ matrix.OS }} steps: diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test.py index 1ad986b..82a3387 100644 --- a/scripts/test_cases/msbuild_performance_test.py +++ b/scripts/test_cases/msbuild_performance_test.py @@ -159,5 +159,5 @@ def main(operating_system, base_version_url, daily_version_url, solution_repo_url = args.solution_repo_url solution_dir = args.solution_dir - main(operating_system, base_version_url, daily_version_url, - solution_repo_url, solution_dir) + main(operating_system, base_version_url, + daily_version_url, solution_repo_url, solution_dir) diff --git a/scripts/test_cases/requirements.txt b/scripts/test_cases/requirements.txt index e176332..826340a 100644 --- a/scripts/test_cases/requirements.txt +++ b/scripts/test_cases/requirements.txt @@ -1,4 +1,3 @@ pandas pylint -argparse -zipfile \ No newline at end of file +argparse \ No newline at end of file From 919b0f24e7fc0f715aca392d1f0e7ce3d681e126 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 06:43:22 +0100 Subject: [PATCH 025/115] reorganized matrix vars in arrays --- .github/workflows/benchmark_msbuild.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 36e14d1..671a7e8 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -22,11 +22,15 @@ jobs: matrix: OS: [windows-latest, ubuntu-latest] BASE_VERSION: - - ${{ env.DOTNET_BASE_VERSION_URL_WINDOWS }} - - ${{ env.DOTNET_BASE_VERSION_URL_LINUX }} + [ + https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip, + https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz, + ] DAILY_VERSION: - - ${{ env.DOTNET_DAILY_VERSION_URL_WINDOWS }} - - ${{ env.DOTNET_DAILY_VERSION_URL_LINUX }} + [ + https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip, + https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz, + ] fail-fast: false runs-on: ${{ matrix.OS }} steps: From d3ffa43ce4b259bba2241475140d0c6d5020e5cc Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 08:37:07 +0100 Subject: [PATCH 026/115] disbaled cron job --- .github/workflows/benchmark_msbuild.yaml | 2 -- .github/workflows/benchmarks_nuget.yml | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 671a7e8..b74a9b2 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -2,9 +2,7 @@ name: msbuild benchmarks on: workflow_dispatch: push: - branches: ["*"] pull_request: - branches: ["*"] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true diff --git a/.github/workflows/benchmarks_nuget.yml b/.github/workflows/benchmarks_nuget.yml index 2b903b5..a3c3572 100644 --- a/.github/workflows/benchmarks_nuget.yml +++ b/.github/workflows/benchmarks_nuget.yml @@ -3,8 +3,8 @@ name: benchmarks_nuget on: workflow_dispatch: pull_request: - schedule: - - cron: "0 */8 * * *" # Run workflow threee times a day + #schedule: + #- cron: "0 */8 * * *" # Run workflow threee times a day env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true From 1a11277b3c4b59fea27c0955d6a1fd6689df78d0 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 08:38:26 +0100 Subject: [PATCH 027/115] disable dispatch on PR --- .github/workflows/benchmarks_nuget.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmarks_nuget.yml b/.github/workflows/benchmarks_nuget.yml index a3c3572..743440f 100644 --- a/.github/workflows/benchmarks_nuget.yml +++ b/.github/workflows/benchmarks_nuget.yml @@ -2,7 +2,7 @@ name: benchmarks_nuget on: workflow_dispatch: - pull_request: + #pull_request: #schedule: #- cron: "0 */8 * * *" # Run workflow threee times a day env: From 214565cd96413a2bfa4bb933d2ebc27dfa5a5f6e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 08:40:54 +0100 Subject: [PATCH 028/115] disable workflow dispatch --- .github/workflows/benchmark_msbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index b74a9b2..ddf559d 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -1,6 +1,6 @@ name: msbuild benchmarks + on: - workflow_dispatch: push: pull_request: From 945e973147a899ca36345255a7c81f03bed71855 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 08:42:52 +0100 Subject: [PATCH 029/115] specified branches --- .github/workflows/benchmark_msbuild.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index ddf559d..3b08781 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -2,7 +2,9 @@ name: msbuild benchmarks on: push: + branches: ["msbuild-benchmarks"] pull_request: + branches: ["msbuild-benchmarks"] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true From 15821833620d68cfb0babf450e105165ec7e2eea Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 17 Aug 2023 08:47:31 +0100 Subject: [PATCH 030/115] quoted urls --- .github/workflows/benchmark_msbuild.yaml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 3b08781..c2a27a6 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -1,10 +1,9 @@ name: msbuild benchmarks on: + workflow_dispatch: push: - branches: ["msbuild-benchmarks"] pull_request: - branches: ["msbuild-benchmarks"] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true @@ -23,13 +22,13 @@ jobs: OS: [windows-latest, ubuntu-latest] BASE_VERSION: [ - https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip, - https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz, + "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip", + "https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz", ] DAILY_VERSION: [ - https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip, - https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz, + "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip", + "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz", ] fail-fast: false runs-on: ${{ matrix.OS }} From 40ce470be241b9055640278d014457b9e4af3df6 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 22 Aug 2023 11:52:19 +0100 Subject: [PATCH 031/115] separated jobs in os specific job --- .github/workflows/benchmark_msbuild.yaml | 50 +++++++++++-------- .../msbuild_performance_test_linux.py | 0 2 files changed, 29 insertions(+), 21 deletions(-) create mode 100644 scripts/test_cases/msbuild_performance_test_linux.py diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index c2a27a6..a6a91a9 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -16,33 +16,41 @@ env: TEST_SOLUTION_DIR: "SimpleAppWithLibs" jobs: - msbuild_benchmarks: + msbuild_benchmarks_windows: strategy: matrix: - OS: [windows-latest, ubuntu-latest] - BASE_VERSION: - [ - "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip", - "https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz", - ] - DAILY_VERSION: - [ - "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip", - "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz", - ] + TEST_CASES: [] fail-fast: false - runs-on: ${{ matrix.OS }} + runs-on: windows-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# - name: Checkout uses: actions/checkout@v3 - #__________THEN WE CLONE TEST CODE REPO__________# - #(This is kind of checking out to a different repo)# - # - name: checkout to test code repo - # run: | - # git clone $TEST_SOLUTION_REPO_URL - # cd $TEST_SOLUTION_DIR + #__________WE GET THINGS READY TO RUN PYTHON SCRIPTS__________# + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# + - name: run benchmark for windows + working-directory: scripts/test_cases/ + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + python msbuild_performance_test_windows.py + + msbuild_benchmarks_linux: + strategy: + matrix: + TEST_CASES: [] + fail-fast: false + runs-on: ubuntu-latest + steps: + #__________WE CHECK OUT TO WORKING REPO__________# + - name: Checkout + uses: actions/checkout@v3 #__________WE GET THINGS READY TO RUN PYTHON SCRIPTS__________# - name: setup python @@ -51,9 +59,9 @@ jobs: python-version: 3.11 #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# - - name: run benchmark for ${{ matrix.OS }} + - name: run benchmark for windows working-directory: scripts/test_cases/ run: | python -m pip install --upgrade pip pip install -r requirements.txt - python msbuild_performance_test.py --os ${{matrix.OS}} --base-version-url ${{matrix.BASE_VERSION}} --daily-version-url ${{matrix.DAILY_VERSION}} --solution-repo-url ${{env.TEST_SOLUTION_REPO_URL}} --solution-dir ${{env.TEST_SOLUTION_DIR}} + python msbuild_performance_test_linux.py diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py new file mode 100644 index 0000000..e69de29 From 78472863966fbea2dff6dbcc948c9ebaa9373335 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 22 Aug 2023 11:58:59 +0100 Subject: [PATCH 032/115] simplify benchmarking windows --- .../msbuild_performance_test_linux.py | 131 ++++++++++++++++++ ...py => msbuild_performance_test_windows.py} | 0 2 files changed, 131 insertions(+) rename scripts/test_cases/{msbuild_performance_test.py => msbuild_performance_test_windows.py} (100%) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index e69de29..15eb4d5 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -0,0 +1,131 @@ +"""_summary_ +This script basically runs benchmark test for msbuild +Returns: + None: ..... +""" + +import argparse +import subprocess +import time +import os +import zipfile +import urllib +import urllib.request + +EXTRACT_PATH = "sdk" +WORKING_DIR = "msbuild-performance-test" + + +def back_to_previous_dir(): + """_summary_ + """ + subprocess.call("cd ..", shell=True) + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def extract_zip(zip_file, extract_folder): + """ Extracts zip file to extract_folder""" + with zipfile.ZipFile(zip_file, 'r') as zip_ref: + zip_ref.extractall(extract_folder) + + +def download_and_extract_dotnet_sdk(version_url, is_base): + """_summary_ + + Args: + version_url (String): dotnet sdk version url + """ + + # Download the dotnet sdk + powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" + extract_command = "Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk" + + subprocess.call(f"powershell {powershell_command}", shell=True) + subprocess.call(f"powershell {extract_command}", shell=True) + + +def measure_execution_time(command): + """summary for measure_execution_time + + Args: + command ([String]): [command to be executed] + + Returns: + [Number]: [ellapsed time in seconds] + """ + + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + + # Clone the repository containing the solution + subprocess.call(f"git clone {repo_url}", shell=True) + subprocess.call(f"cd {repo_path}", shell=True) + + +def delete_clone(repo_url): + """_summary_ + + Args: + repo_path (String): path containing test code + """ + # extract the repository name from the url + repo_name = repo_url.split("/")[-1].replace(".git", "") + subprocess.call(f"rm -rf {repo_name}", shell=True) + + +def main(operating_system, base_version_url, daily_version_url, + solution_repo_url, solution_dir): + """_summary_ + + Returns: + operating_system: operating system to be used to run the test + base_version_url: dotnet sdk base version URL + daily_version_url: dotnet sdk daily version URL + solution_repo_url: test code repository URL + solution_dir: directory of test code + + + """ + # create a working directory for the test experiment + subprocess.call(f"mkdir {WORKING_DIR}", shell=True) + subprocess.call(f"cd {WORKING_DIR}", shell=True) + # download and extract the dotnet sdk + download_and_extract_dotnet_sdk(base_version_url, True) + + # clone the repository and navigate to the solution directory + clone_repository(solution_repo_url, solution_dir) + + # build the solution using the base version + exec_path = "../../sdk/base/dotnet.exe" if operating_system == "windows-latest" else "../sdk/base/dotnet" + command = f"{exec_path} build Solution.sln" + elapsed_time = measure_execution_time(command) + print(f"Command '{command}' took {elapsed_time}s to execute.") + return elapsed_time + + +if __name__ == "__main__": + main() diff --git a/scripts/test_cases/msbuild_performance_test.py b/scripts/test_cases/msbuild_performance_test_windows.py similarity index 100% rename from scripts/test_cases/msbuild_performance_test.py rename to scripts/test_cases/msbuild_performance_test_windows.py From 30a3d9e5f901e8bbb3261c656cc27e38675e3314 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 22 Aug 2023 13:46:01 +0100 Subject: [PATCH 033/115] reformat windows benchmarking --- .../msbuild_performance_test_linux.py | 21 ++-- .../msbuild_performance_test_windows.py | 113 ++++++++---------- 2 files changed, 56 insertions(+), 78 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 15eb4d5..0d948fa 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -16,10 +16,13 @@ WORKING_DIR = "msbuild-performance-test" -def back_to_previous_dir(): - """_summary_ - """ - subprocess.call("cd ..", shell=True) +DOTNET_BASE_VERSION_URL_LINUX: "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" + +DOTNET_DAILY_VERSION_URL_LINUX: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" + +TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" + +TEST_SOLUTION_DIR: "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" def download_file(url, filename): @@ -100,15 +103,7 @@ def delete_clone(repo_url): def main(operating_system, base_version_url, daily_version_url, solution_repo_url, solution_dir): """_summary_ - - Returns: - operating_system: operating system to be used to run the test - base_version_url: dotnet sdk base version URL - daily_version_url: dotnet sdk daily version URL - solution_repo_url: test code repository URL - solution_dir: directory of test code - - + COORDINATOR OF THE TEST """ # create a working directory for the test experiment subprocess.call(f"mkdir {WORKING_DIR}", shell=True) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index 82a3387..7966cfd 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -12,27 +12,26 @@ import urllib import urllib.request + +# ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -def back_to_previous_dir(): - """_summary_ - """ - subprocess.call("cd ..", shell=True) +DOTNET_BASE_VERSION_URL_WINDOWS: "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" +DOTNET_DAILY_VERSION_URL_WINDOWS: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" -def download_file(url, filename): - """ Download file from url and save it to filename""" - with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: - data = response.read() - out_file.write(data) +TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_SOLUTION_DIR: "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" -def extract_zip(zip_file, extract_folder): - """ Extracts zip file to extract_folder""" - with zipfile.ZipFile(zip_file, 'r') as zip_ref: - zip_ref.extractall(extract_folder) + +def back_to_previous_dir(): + """_summary_ + """ + subprocess.call("cd ..", shell=True) def download_and_extract_dotnet_sdk(version_url, is_base): @@ -40,23 +39,15 @@ def download_and_extract_dotnet_sdk(version_url, is_base): Args: version_url (String): dotnet sdk version url - """ +""" path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - download_file(version_url, os.path.basename(version_url)) - extract_zip(os.path.basename(version_url), path) - # Download the dotnet sdk - # if operating_system == "ubuntu-latest": - # subprocess.call( - # f"curl -O {version_url} -o dotnet-sdk.zip", shell=True) - # subprocess.call("tar -xf dotnet-sdk.zip", shell=True) - # else: - # # means os is windows - # powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" - # extract_command = "Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk" + # Download the dotnet sdk + powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" + extract_command = f"Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk/{path}" - # subprocess.call(f"powershell {powershell_command}", shell=True) - # subprocess.call(f"powershell {extract_command}", shell=True) + subprocess.call(f"powershell {powershell_command}", shell=True) + subprocess.call(f"powershell {extract_command}", shell=True) def measure_execution_time(command): @@ -106,58 +97,50 @@ def delete_clone(repo_url): subprocess.call(f"rm -rf {repo_name}", shell=True) -def main(operating_system, base_version_url, daily_version_url, - solution_repo_url, solution_dir): +def main(): """_summary_ - - Returns: - operating_system: operating system to be used to run the test - base_version_url: dotnet sdk base version URL - daily_version_url: dotnet sdk daily version URL - solution_repo_url: test code repository URL - solution_dir: directory of test code - + main() """ # create a working directory for the test experiment subprocess.call(f"mkdir {WORKING_DIR}", shell=True) subprocess.call(f"cd {WORKING_DIR}", shell=True) + # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(base_version_url, True) + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, True) # clone the repository and navigate to the solution directory - clone_repository(solution_repo_url, solution_dir) + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_DIR) # build the solution using the base version - exec_path = "../../sdk/base/dotnet.exe" if operating_system == "windows-latest" else "../sdk/base/dotnet" - command = f"{exec_path} build Solution.sln" + exec_path = "../../sdk/base/dotnet.exe" + msbuild_command = """ + msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ + /p:AndroidPreserveUserData=True ^ + /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ + /p:BuildingByReSharper=True ^ + /p:BuildingProject=False ^ + /p:BuildProjectReferences=False ^ + /p:ContinueOnError=ErrorAndContinue ^ + /p:DesignTimeBuild=True ^ + /p:DesignTimeSilentResolution=False ^ + /p:JetBrainsDesignTimeBuild=True ^ + /p:ProvideCommandLineArgs=True ^ + /p:ResolveAssemblyReferencesSilent=False ^ + /p:SkipCompilerExecution=True ^ + /p:TargetFramework=net5.0 ^ + /v:n ^ + /m:1 ^ + /bl ^ + /flp:v=n;PerformanceSummary ^ + /clp:Summary ^ + /clp:PerformanceSummary > log.txt + """ + command = f"{exec_path} {msbuild_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="___measures the execution time of msbuild command___.") - parser.add_argument("--os", required=True, - help="operating system to be used to run the test") - - parser.add_argument("--base-version-url", required=True, - help="dotnet sdk base version URL") - parser.add_argument("--daily-version-url", required=True, - help="dotnet sdk daily version URL") - parser.add_argument("--solution-repo-url", required=True, - help="test code repository URL") - parser.add_argument("--solution-dir", required=True, - help="directory of test code") - - args = parser.parse_args() - - operating_system = args.os - base_version_url = args.base_version_url - daily_version_url = args.daily_version_url - solution_repo_url = args.solution_repo_url - solution_dir = args.solution_dir - - main(operating_system, base_version_url, - daily_version_url, solution_repo_url, solution_dir) + main() From 725ea8315a15d38dc140f232efb7c889c5402aa1 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 22 Aug 2023 13:53:58 +0100 Subject: [PATCH 034/115] refined bencharmk linux --- .../msbuild_performance_test_linux.py | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 0d948fa..9589b7d 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -46,8 +46,9 @@ def download_and_extract_dotnet_sdk(version_url, is_base): """ # Download the dotnet sdk - powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" - extract_command = "Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk" + path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" + command = f"wget {version_url} -O dotnet-sdk.zip" + unzipcommand = f"unzip dotnet-sdk.zip -d sdk/{path}" subprocess.call(f"powershell {powershell_command}", shell=True) subprocess.call(f"powershell {extract_command}", shell=True) @@ -100,23 +101,46 @@ def delete_clone(repo_url): subprocess.call(f"rm -rf {repo_name}", shell=True) -def main(operating_system, base_version_url, daily_version_url, - solution_repo_url, solution_dir): +def main(): """_summary_ - COORDINATOR OF THE TEST + main() + """ # create a working directory for the test experiment subprocess.call(f"mkdir {WORKING_DIR}", shell=True) subprocess.call(f"cd {WORKING_DIR}", shell=True) + # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(base_version_url, True) + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, True) # clone the repository and navigate to the solution directory - clone_repository(solution_repo_url, solution_dir) + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_DIR) # build the solution using the base version - exec_path = "../../sdk/base/dotnet.exe" if operating_system == "windows-latest" else "../sdk/base/dotnet" - command = f"{exec_path} build Solution.sln" + exec_path = "../../sdk/base/dotnet" + msbuild_command = """ + msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ + /p:AndroidPreserveUserData=True ^ + /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ + /p:BuildingByReSharper=True ^ + /p:BuildingProject=False ^ + /p:BuildProjectReferences=False ^ + /p:ContinueOnError=ErrorAndContinue ^ + /p:DesignTimeBuild=True ^ + /p:DesignTimeSilentResolution=False ^ + /p:JetBrainsDesignTimeBuild=True ^ + /p:ProvideCommandLineArgs=True ^ + /p:ResolveAssemblyReferencesSilent=False ^ + /p:SkipCompilerExecution=True ^ + /p:TargetFramework=net5.0 ^ + /v:n ^ + /m:1 ^ + /bl ^ + /flp:v=n;PerformanceSummary ^ + /clp:Summary ^ + /clp:PerformanceSummary > log.txt + """ + command = f"{exec_path} {msbuild_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From 367aa07e666745e2db0ba70335d8908f2f669419 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 10:45:08 +0100 Subject: [PATCH 035/115] remove unecessary parts --- .github/workflows/benchmark_msbuild.yaml | 7 ------- scripts/test_cases/msbuild_performance_test_linux.py | 2 -- scripts/test_cases/msbuild_performance_test_windows.py | 5 ----- 3 files changed, 14 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index a6a91a9..aa3fd4e 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -8,13 +8,6 @@ on: env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true - DOTNET_BASE_VERSION_URL_LINUX: "https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz" - DOTNET_BASE_VERSION_URL_WINDOWS: "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" - DOTNET_DAILY_VERSION_URL_LINUX: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" - DOTNET_DAILY_VERSION_URL_WINDOWS: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" - TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" - TEST_SOLUTION_DIR: "SimpleAppWithLibs" - jobs: msbuild_benchmarks_windows: strategy: diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 9589b7d..3606328 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -4,10 +4,8 @@ None: ..... """ -import argparse import subprocess import time -import os import zipfile import urllib import urllib.request diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index 7966cfd..2f179b8 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -4,13 +4,8 @@ None: ..... """ -import argparse import subprocess import time -import os -import zipfile -import urllib -import urllib.request # ___ EXTRACTION CONSTANTS ___ # From e21e674189e0ed0257d3b1765dd2b9e8cb3b6f23 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 10:54:58 +0100 Subject: [PATCH 036/115] fix: pylint errors --- .pylintrc | 2 +- scripts/processors/.pylintrc | 2 +- scripts/test_cases/.pylintrc | 2 +- .../msbuild_performance_test_linux.py | 17 ++++++----------- .../msbuild_performance_test_windows.py | 9 ++++----- 5 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.pylintrc b/.pylintrc index 366fa5f..912a31e 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file diff --git a/scripts/processors/.pylintrc b/scripts/processors/.pylintrc index 366fa5f..912a31e 100644 --- a/scripts/processors/.pylintrc +++ b/scripts/processors/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file diff --git a/scripts/test_cases/.pylintrc b/scripts/test_cases/.pylintrc index 366fa5f..912a31e 100644 --- a/scripts/test_cases/.pylintrc +++ b/scripts/test_cases/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 3606328..e2fb6be 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -12,15 +12,10 @@ EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" - - -DOTNET_BASE_VERSION_URL_LINUX: "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" - -DOTNET_DAILY_VERSION_URL_LINUX: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" - -TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" - -TEST_SOLUTION_DIR: "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" +DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" def download_file(url, filename): @@ -48,8 +43,8 @@ def download_and_extract_dotnet_sdk(version_url, is_base): command = f"wget {version_url} -O dotnet-sdk.zip" unzipcommand = f"unzip dotnet-sdk.zip -d sdk/{path}" - subprocess.call(f"powershell {powershell_command}", shell=True) - subprocess.call(f"powershell {extract_command}", shell=True) + subprocess.call(f"powershell {command}", shell=True) + subprocess.call(f"powershell {unzipcommand}", shell=True) def measure_execution_time(command): diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index 2f179b8..a2b6f0c 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -11,16 +11,15 @@ # ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" - # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS: "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" -DOTNET_DAILY_VERSION_URL_WINDOWS: "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" -TEST_SOLUTION_REPO_URL: "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" -TEST_SOLUTION_DIR: "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" def back_to_previous_dir(): From 588695e0dee1c2a575f87aab3bd71a280f69a89d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 11:07:18 +0100 Subject: [PATCH 037/115] format workflow --- .github/workflows/benchmark_msbuild.yaml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index aa3fd4e..4b79929 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -10,10 +10,6 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: true jobs: msbuild_benchmarks_windows: - strategy: - matrix: - TEST_CASES: [] - fail-fast: false runs-on: windows-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# @@ -35,10 +31,6 @@ jobs: python msbuild_performance_test_windows.py msbuild_benchmarks_linux: - strategy: - matrix: - TEST_CASES: [] - fail-fast: false runs-on: ubuntu-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# @@ -52,7 +44,7 @@ jobs: python-version: 3.11 #__________FINALLY WE RUN BENCHMARK TEST AND MEASURE EXECUTION TIME__________# - - name: run benchmark for windows + - name: run benchmark for linux working-directory: scripts/test_cases/ run: | python -m pip install --upgrade pip From 8ee65aa6d4e3891b61ea9d72cbe8bac377baade2 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 12:08:52 +0100 Subject: [PATCH 038/115] untrack DS_Store --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 485dee6..1f1025f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +.DS_Store \ No newline at end of file From 9d251c1167916917381c308980439da6b1a39c47 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 12:49:19 +0100 Subject: [PATCH 039/115] update extract commands --- scripts/test_cases/msbuild_performance_test_linux.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index e2fb6be..e80cab6 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -43,8 +43,8 @@ def download_and_extract_dotnet_sdk(version_url, is_base): command = f"wget {version_url} -O dotnet-sdk.zip" unzipcommand = f"unzip dotnet-sdk.zip -d sdk/{path}" - subprocess.call(f"powershell {command}", shell=True) - subprocess.call(f"powershell {unzipcommand}", shell=True) + subprocess.call(command, shell=True) + subprocess.call(unzipcommand, shell=True) def measure_execution_time(command): @@ -77,7 +77,7 @@ def clone_repository(repo_url, repo_path): repo_url (String): url of the repository to be cloned repo_path (String): path containing test code """ - + subprocess.call("ls", shell=True) # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) subprocess.call(f"cd {repo_path}", shell=True) From f190b2baa52b99aaeee9353cd9b99ba52b169e9d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 12:50:40 +0100 Subject: [PATCH 040/115] update repo path --- scripts/test_cases/msbuild_performance_test_linux.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index e80cab6..ce15141 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -15,6 +15,7 @@ DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_REPO_NAME = "TestSolutions" TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" @@ -80,7 +81,7 @@ def clone_repository(repo_url, repo_path): subprocess.call("ls", shell=True) # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) - subprocess.call(f"cd {repo_path}", shell=True) + subprocess.call(f"cd {TEST_REPO_NAME}/{repo_path}", shell=True) def delete_clone(repo_url): From bb119073a1d61f0b307a5a8cf21ca75a359e7d72 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 23 Aug 2023 19:24:21 +0100 Subject: [PATCH 041/115] logging dir --- .../msbuild_performance_test_linux.py | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index ce15141..25544eb 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -41,7 +41,7 @@ def download_and_extract_dotnet_sdk(version_url, is_base): # Download the dotnet sdk path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - command = f"wget {version_url} -O dotnet-sdk.zip" + command = f"wget {version_url} -O dotnet-sdk" unzipcommand = f"unzip dotnet-sdk.zip -d sdk/{path}" subprocess.call(command, shell=True) @@ -58,6 +58,8 @@ def measure_execution_time(command): [Number]: [ellapsed time in seconds] """ + subprocess.call("ls", shell=True) + # Record start time start_time = time.time() @@ -113,26 +115,26 @@ def main(): # build the solution using the base version exec_path = "../../sdk/base/dotnet" msbuild_command = """ - msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ - /p:AndroidPreserveUserData=True ^ - /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ - /p:BuildingByReSharper=True ^ - /p:BuildingProject=False ^ - /p:BuildProjectReferences=False ^ - /p:ContinueOnError=ErrorAndContinue ^ - /p:DesignTimeBuild=True ^ - /p:DesignTimeSilentResolution=False ^ - /p:JetBrainsDesignTimeBuild=True ^ - /p:ProvideCommandLineArgs=True ^ - /p:ResolveAssemblyReferencesSilent=False ^ - /p:SkipCompilerExecution=True ^ - /p:TargetFramework=net5.0 ^ - /v:n ^ - /m:1 ^ - /bl ^ - /flp:v=n;PerformanceSummary ^ - /clp:Summary ^ - /clp:PerformanceSummary > log.txt + dotnet msbuild solution.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ + /p:AndroidPreserveUserData=True \ + /p:AndroidUseManagedDesignTimeResourceGenerator=True \ + /p:BuildingByReSharper=False \ + /p:BuildingProject=False \ + /p:BuildProjectReferences=False \ + /p:ContinueOnError=ErrorAndContinue \ + /p:DesignTimeBuild=True \ + /p:DesignTimeSilentResolution=False \ + /p:JetBrainsDesignTimeBuild=True \ + /p:ProvideCommandLineArgs=True \ + /p:ResolveAssemblyReferencesSilent=False \ + /p:SkipCompilerExecution=True \ + /p:TargetFramework=net5.0 \ + /v:n \ + /m:1 \ + /bl \ + /flp:v=n;PerformanceSummary \ + /clp:Summary \ + /clp:PerformanceSummary > log.txt """ command = f"{exec_path} {msbuild_command}" elapsed_time = measure_execution_time(command) From a9eb2e7b98465db80066530fa6b0c56909aa7a21 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 00:05:49 +0100 Subject: [PATCH 042/115] switch and log dir --- scripts/test_cases/msbuild_performance_test_linux.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 25544eb..46700fa 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -58,6 +58,8 @@ def measure_execution_time(command): [Number]: [ellapsed time in seconds] """ + subprocess.call("ls", shell=True) + subprocess.call(f"cd {WORKING_DIR}", shell=True) subprocess.call("ls", shell=True) # Record start time From f9e5972834675f6ea88f637e2258355365850f17 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 00:47:49 +0100 Subject: [PATCH 043/115] switched to simple command --- .../msbuild_performance_test_linux.py | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 46700fa..99ce083 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -8,6 +8,7 @@ import time import zipfile import urllib +import os import urllib.request EXTRACT_PATH = "sdk" @@ -26,26 +27,15 @@ def download_file(url, filename): out_file.write(data) -def extract_zip(zip_file, extract_folder): - """ Extracts zip file to extract_folder""" - with zipfile.ZipFile(zip_file, 'r') as zip_ref: - zip_ref.extractall(extract_folder) - - def download_and_extract_dotnet_sdk(version_url, is_base): - """_summary_ - - Args: - version_url (String): dotnet sdk version url - """ - - # Download the dotnet sdk path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - command = f"wget {version_url} -O dotnet-sdk" - unzipcommand = f"unzip dotnet-sdk.zip -d sdk/{path}" + tar_gz_file = "dotnet-sdk.tar.gz" # Adjust the filename as needed + download_file(version_url, tar_gz_file) - subprocess.call(command, shell=True) - subprocess.call(unzipcommand, shell=True) + # Extract the tar.gz file + extract_folder = f"sdk/{path}" + extract_command = f"tar -xzf {tar_gz_file} -C {extract_folder}" + subprocess.call(extract_command, shell=True) def measure_execution_time(command): @@ -86,6 +76,7 @@ def clone_repository(repo_url, repo_path): # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) subprocess.call(f"cd {TEST_REPO_NAME}/{repo_path}", shell=True) + subprocess.call("ls", shell=True) def delete_clone(repo_url): @@ -105,9 +96,9 @@ def main(): """ # create a working directory for the test experiment - subprocess.call(f"mkdir {WORKING_DIR}", shell=True) - subprocess.call(f"cd {WORKING_DIR}", shell=True) - + if not os.path.exists(WORKING_DIR): + os.mkdir(WORKING_DIR) + os.chdir(WORKING_DIR) # download and extract the dotnet sdk download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, True) @@ -117,7 +108,7 @@ def main(): # build the solution using the base version exec_path = "../../sdk/base/dotnet" msbuild_command = """ - dotnet msbuild solution.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ + msbuild solution.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ /p:AndroidUseManagedDesignTimeResourceGenerator=True \ /p:BuildingByReSharper=False \ @@ -138,7 +129,9 @@ def main(): /clp:Summary \ /clp:PerformanceSummary > log.txt """ - command = f"{exec_path} {msbuild_command}" + + simple_command = "build solution.sln" + command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From 4d587b3adf55750d7584b34f0e6ddf5dae7b3355 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 02:54:37 +0100 Subject: [PATCH 044/115] fix extract path --- scripts/test_cases/msbuild_performance_test_linux.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 99ce083..63c7862 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -33,8 +33,7 @@ def download_and_extract_dotnet_sdk(version_url, is_base): download_file(version_url, tar_gz_file) # Extract the tar.gz file - extract_folder = f"sdk/{path}" - extract_command = f"tar -xzf {tar_gz_file} -C {extract_folder}" + extract_command = f"tar -xzf {tar_gz_file} -C {path}" subprocess.call(extract_command, shell=True) From 116dba63bd571a9a870f0f3dbddce3c138467f0c Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:01:44 +0100 Subject: [PATCH 045/115] add dir --- scripts/test_cases/msbuild_performance_test_linux.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 63c7862..772633e 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -29,7 +29,8 @@ def download_file(url, filename): def download_and_extract_dotnet_sdk(version_url, is_base): path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - tar_gz_file = "dotnet-sdk.tar.gz" # Adjust the filename as needed + os.mkdir(path) + tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) # Extract the tar.gz file From 05f31f42c270cadaf44edca3d7e085b728444d21 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:08:54 +0100 Subject: [PATCH 046/115] create extract folders --- .../test_cases/msbuild_performance_test_linux.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 772633e..7aae481 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -20,6 +20,17 @@ TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + def download_file(url, filename): """ Download file from url and save it to filename""" with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: @@ -29,7 +40,7 @@ def download_file(url, filename): def download_and_extract_dotnet_sdk(version_url, is_base): path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - os.mkdir(path) + create_extract_destinations() tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) From 0d1d20d5a02bab68b3510b74c18f02e9df136324 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:17:05 +0100 Subject: [PATCH 047/115] update extracter --- scripts/test_cases/msbuild_performance_test_linux.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 7aae481..2a61335 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -40,7 +40,6 @@ def download_file(url, filename): def download_and_extract_dotnet_sdk(version_url, is_base): path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - create_extract_destinations() tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) @@ -60,7 +59,7 @@ def measure_execution_time(command): """ subprocess.call("ls", shell=True) - subprocess.call(f"cd {WORKING_DIR}", shell=True) + subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) subprocess.call("ls", shell=True) # Record start time @@ -110,6 +109,10 @@ def main(): if not os.path.exists(WORKING_DIR): os.mkdir(WORKING_DIR) os.chdir(WORKING_DIR) + + # create the extract destination directories if they do not exist + create_extract_destinations() + # download and extract the dotnet sdk download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, True) From f6a8e9ae90037712ac623e5f52567681ffd2ba86 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:33:38 +0100 Subject: [PATCH 048/115] add verbose logs --- .../msbuild_performance_test_linux.py | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 2a61335..5a12973 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -20,8 +20,15 @@ TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +def check_directory(event): + """Checking directory for debugging purposes""" + print(f'_____CHECKING DIR IN {event}________') + subprocess.call("ls", shell=True) + + def create_extract_destinations(): """ Create the extract destination directories if they do not exist""" + check_directory('BEFORE CREATE EXTRACT DESTINATION') if not os.path.exists(EXTRACT_PATH): os.mkdir(EXTRACT_PATH) os.chdir(EXTRACT_PATH) @@ -29,24 +36,33 @@ def create_extract_destinations(): os.mkdir("base") if not os.path.exists("daily"): os.mkdir("daily") + check_directory('AFTER CREATE EXTRACT DESTINATION') def download_file(url, filename): """ Download file from url and save it to filename""" + check_directory('BEFORE DOWNLOAD FILE') with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: data = response.read() out_file.write(data) + check_directory('AFTER DOWNLOAD FILE') def download_and_extract_dotnet_sdk(version_url, is_base): - path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" + + os.chdir(EXTRACT_PATH) + + path = "base" if is_base else "daily" tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) # Extract the tar.gz file + check_directory('BEFORE EXTRACT FILE') extract_command = f"tar -xzf {tar_gz_file} -C {path}" subprocess.call(extract_command, shell=True) + os.chdir("..") + def measure_execution_time(command): """summary for measure_execution_time @@ -58,9 +74,9 @@ def measure_execution_time(command): [Number]: [ellapsed time in seconds] """ - subprocess.call("ls", shell=True) + check_directory('BEFORE MEASURE EXECUTION TIME') subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) - subprocess.call("ls", shell=True) + check_directory('AFTER CHECKINT OUT TO REPO') # Record start time start_time = time.time() @@ -82,11 +98,11 @@ def clone_repository(repo_url, repo_path): repo_url (String): url of the repository to be cloned repo_path (String): path containing test code """ - subprocess.call("ls", shell=True) + check_directory('BEFORE CLONE REPO') # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) - subprocess.call(f"cd {TEST_REPO_NAME}/{repo_path}", shell=True) - subprocess.call("ls", shell=True) + + check_directory('AFTER CLONE REPO') def delete_clone(repo_url): @@ -119,6 +135,8 @@ def main(): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_DIR) + check_directory('BEFORE BUILD SOLUTION') + # build the solution using the base version exec_path = "../../sdk/base/dotnet" msbuild_command = """ From 2a2a611999cb3c0a05ed7ac53751d336a6c3447b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:38:29 +0100 Subject: [PATCH 049/115] remove change dir command in download mehtod --- scripts/test_cases/msbuild_performance_test_linux.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 5a12973..9a4f723 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -22,7 +22,7 @@ def check_directory(event): """Checking directory for debugging purposes""" - print(f'_____CHECKING DIR IN {event}________') + print(f'_____CHECKING DIR {event}________') subprocess.call("ls", shell=True) @@ -49,9 +49,7 @@ def download_file(url, filename): def download_and_extract_dotnet_sdk(version_url, is_base): - - os.chdir(EXTRACT_PATH) - + """ Download and extract the dotnet sdk""" path = "base" if is_base else "daily" tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) From 5935b43ae08894a325999116f71646886d407161 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:45:27 +0100 Subject: [PATCH 050/115] add verbosity to clone --- scripts/test_cases/msbuild_performance_test_linux.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 9a4f723..95c583e 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -6,8 +6,6 @@ import subprocess import time -import zipfile -import urllib import os import urllib.request @@ -59,8 +57,6 @@ def download_and_extract_dotnet_sdk(version_url, is_base): extract_command = f"tar -xzf {tar_gz_file} -C {path}" subprocess.call(extract_command, shell=True) - os.chdir("..") - def measure_execution_time(command): """summary for measure_execution_time @@ -99,8 +95,10 @@ def clone_repository(repo_url, repo_path): check_directory('BEFORE CLONE REPO') # Clone the repository containing the solution subprocess.call(f"git clone {repo_url}", shell=True) - + subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) + subprocess.call(f"cd {repo_path}", shell=True) check_directory('AFTER CLONE REPO') + subprocess.call("ls", shell=True) def delete_clone(repo_url): From 9617b2bbd4783b4ba217870c51c05b5f72e78455 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:53:15 +0100 Subject: [PATCH 051/115] reformat test solutions dirs --- scripts/test_cases/msbuild_performance_test_linux.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 95c583e..dba26b3 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -15,7 +15,8 @@ DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" TEST_REPO_NAME = "TestSolutions" -TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_DIR = "solution" def check_directory(event): @@ -97,8 +98,9 @@ def clone_repository(repo_url, repo_path): subprocess.call(f"git clone {repo_url}", shell=True) subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) subprocess.call(f"cd {repo_path}", shell=True) + subprocess.call(f"cd {TEST_REPO_DIR}", shell=True) check_directory('AFTER CLONE REPO') - subprocess.call("ls", shell=True) + subprocess.call("ls", shell=False) def delete_clone(repo_url): @@ -129,7 +131,7 @@ def main(): download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, True) # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_DIR) + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) check_directory('BEFORE BUILD SOLUTION') From c917dbf938633cfc0502c44a30cca5baee4cfd4c Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Thu, 24 Aug 2023 03:57:45 +0100 Subject: [PATCH 052/115] fix repo name --- scripts/test_cases/msbuild_performance_test_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index dba26b3..ca3dac7 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -98,7 +98,7 @@ def clone_repository(repo_url, repo_path): subprocess.call(f"git clone {repo_url}", shell=True) subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) subprocess.call(f"cd {repo_path}", shell=True) - subprocess.call(f"cd {TEST_REPO_DIR}", shell=True) + subprocess.call(f"cd {TEST_SOLUTION_DIR}", shell=True) check_directory('AFTER CLONE REPO') subprocess.call("ls", shell=False) From a0cfccd85f2dd42d99f1ffc8c5c2ead915276c4b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sat, 26 Aug 2023 06:11:59 +0100 Subject: [PATCH 053/115] revert cron job change --- .github/workflows/benchmarks_nuget.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmarks_nuget.yml b/.github/workflows/benchmarks_nuget.yml index 7808435..1cdfbb8 100644 --- a/.github/workflows/benchmarks_nuget.yml +++ b/.github/workflows/benchmarks_nuget.yml @@ -2,9 +2,9 @@ name: benchmarks_nuget on: workflow_dispatch: - #pull_request: - #schedule: - #- cron: "0 */8 * * *" # Run workflow threee times a day + pull_request: + schedule: + - cron: "0 */8 * * *" # Run workflow threee times a day env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true From abbc8943ffd3dee03dc66df2d1d7bdc8102c09ab Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sat, 26 Aug 2023 06:12:09 +0100 Subject: [PATCH 054/115] apply review suggestions --- .../msbuild_performance_test_linux.py | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index ca3dac7..bc76a1f 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -47,15 +47,15 @@ def download_file(url, filename): check_directory('AFTER DOWNLOAD FILE') -def download_and_extract_dotnet_sdk(version_url, is_base): +def download_and_extract_dotnet_sdk(version_url, extract_path): """ Download and extract the dotnet sdk""" - path = "base" if is_base else "daily" + tar_gz_file = "dotnet-sdk.tar.gz" download_file(version_url, tar_gz_file) # Extract the tar.gz file check_directory('BEFORE EXTRACT FILE') - extract_command = f"tar -xzf {tar_gz_file} -C {path}" + extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" subprocess.call(extract_command, shell=True) @@ -103,32 +103,18 @@ def clone_repository(repo_url, repo_path): subprocess.call("ls", shell=False) -def delete_clone(repo_url): - """_summary_ - - Args: - repo_path (String): path containing test code - """ - # extract the repository name from the url - repo_name = repo_url.split("/")[-1].replace(".git", "") - subprocess.call(f"rm -rf {repo_name}", shell=True) - - def main(): """_summary_ main() """ - # create a working directory for the test experiment - if not os.path.exists(WORKING_DIR): - os.mkdir(WORKING_DIR) - os.chdir(WORKING_DIR) # create the extract destination directories if they do not exist create_extract_destinations() # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, True) + path = "base" + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, path) # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) @@ -138,7 +124,7 @@ def main(): # build the solution using the base version exec_path = "../../sdk/base/dotnet" msbuild_command = """ - msbuild solution.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ + msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ /p:AndroidUseManagedDesignTimeResourceGenerator=True \ /p:BuildingByReSharper=False \ @@ -160,7 +146,7 @@ def main(): /clp:PerformanceSummary > log.txt """ - simple_command = "build solution.sln" + simple_command = "build LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") From 3ca2a14a1a2d8244b7d0a63b24f4c04a9d3c1d38 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 01:51:26 +0100 Subject: [PATCH 055/115] switch to process run --- .../msbuild_performance_test_linux.py | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index bc76a1f..d284c32 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -22,12 +22,11 @@ def check_directory(event): """Checking directory for debugging purposes""" print(f'_____CHECKING DIR {event}________') - subprocess.call("ls", shell=True) + subprocess.run(["ls"], check=True) def create_extract_destinations(): """ Create the extract destination directories if they do not exist""" - check_directory('BEFORE CREATE EXTRACT DESTINATION') if not os.path.exists(EXTRACT_PATH): os.mkdir(EXTRACT_PATH) os.chdir(EXTRACT_PATH) @@ -35,16 +34,13 @@ def create_extract_destinations(): os.mkdir("base") if not os.path.exists("daily"): os.mkdir("daily") - check_directory('AFTER CREATE EXTRACT DESTINATION') def download_file(url, filename): """ Download file from url and save it to filename""" - check_directory('BEFORE DOWNLOAD FILE') with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: data = response.read() out_file.write(data) - check_directory('AFTER DOWNLOAD FILE') def download_and_extract_dotnet_sdk(version_url, extract_path): @@ -55,8 +51,9 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): # Extract the tar.gz file check_directory('BEFORE EXTRACT FILE') - extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.call(extract_command, shell=True) + # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" + subprocess.run(["tar", "-xzf", tar_gz_file, + "-C", extract_path], check=True) def measure_execution_time(command): @@ -69,9 +66,7 @@ def measure_execution_time(command): [Number]: [ellapsed time in seconds] """ - check_directory('BEFORE MEASURE EXECUTION TIME') - subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) - check_directory('AFTER CHECKINT OUT TO REPO') + subprocess.run(["cd", TEST_REPO_NAME], check=True) # Record start time start_time = time.time() @@ -93,14 +88,12 @@ def clone_repository(repo_url, repo_path): repo_url (String): url of the repository to be cloned repo_path (String): path containing test code """ - check_directory('BEFORE CLONE REPO') # Clone the repository containing the solution - subprocess.call(f"git clone {repo_url}", shell=True) - subprocess.call(f"cd {TEST_REPO_NAME}", shell=True) - subprocess.call(f"cd {repo_path}", shell=True) - subprocess.call(f"cd {TEST_SOLUTION_DIR}", shell=True) - check_directory('AFTER CLONE REPO') - subprocess.call("ls", shell=False) + subprocess.run(['git', 'clone', repo_url], check=True) + subprocess.run(['cd', TEST_REPO_NAME], check=True) + subprocess.run(['cd', repo_path], check=True) + subprocess.run(['cd', TEST_SOLUTION_DIR], check=True) + subprocess.run(['ls'], check=True) def main(): From 87bb527f805cda4c8fb861d8eeba0ec771e8f6ca Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 01:58:32 +0100 Subject: [PATCH 056/115] switch to os.chdir --- scripts/test_cases/msbuild_performance_test_linux.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index d284c32..c19de52 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -90,9 +90,9 @@ def clone_repository(repo_url, repo_path): """ # Clone the repository containing the solution subprocess.run(['git', 'clone', repo_url], check=True) - subprocess.run(['cd', TEST_REPO_NAME], check=True) - subprocess.run(['cd', repo_path], check=True) - subprocess.run(['cd', TEST_SOLUTION_DIR], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(repo_path) + os.chdir(TEST_SOLUTION_DIR) subprocess.run(['ls'], check=True) From d0021911de9657f6cd0f31c7d841d9919b9d9f3e Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 02:16:07 +0100 Subject: [PATCH 057/115] change to abspath --- scripts/test_cases/msbuild_performance_test_linux.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index c19de52..c6682f2 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -50,7 +50,6 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): download_file(version_url, tar_gz_file) # Extract the tar.gz file - check_directory('BEFORE EXTRACT FILE') # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" subprocess.run(["tar", "-xzf", tar_gz_file, "-C", extract_path], check=True) @@ -66,7 +65,8 @@ def measure_execution_time(command): [Number]: [ellapsed time in seconds] """ - subprocess.run(["cd", TEST_REPO_NAME], check=True) + # subprocess.run(["cd", TEST_REPO_NAME], check=True) + os.chdir(TEST_REPO_NAME) # Record start time start_time = time.time() @@ -89,6 +89,7 @@ def clone_repository(repo_url, repo_path): repo_path (String): path containing test code """ # Clone the repository containing the solution + os.chdir('..') subprocess.run(['git', 'clone', repo_url], check=True) os.chdir(TEST_REPO_NAME) os.chdir(repo_path) @@ -112,10 +113,8 @@ def main(): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - check_directory('BEFORE BUILD SOLUTION') - # build the solution using the base version - exec_path = "../../sdk/base/dotnet" + exec_path = os.path.abspath("../../sdk/base/dotnet") msbuild_command = """ msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ From 41b69a598bfe8310b89f18929ddec7c2c040cf51 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 02:20:22 +0100 Subject: [PATCH 058/115] revert chdir --- scripts/test_cases/msbuild_performance_test_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index c6682f2..1331c93 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -66,7 +66,7 @@ def measure_execution_time(command): """ # subprocess.run(["cd", TEST_REPO_NAME], check=True) - os.chdir(TEST_REPO_NAME) + # os.chdir(TEST_REPO_NAME) # Record start time start_time = time.time() From 32a16c504323c10ed0cbe247c8c8770ecb2d4bf5 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 02:27:08 +0100 Subject: [PATCH 059/115] revert to parent dir --- scripts/test_cases/msbuild_performance_test_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 1331c93..fe8860d 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -114,7 +114,7 @@ def main(): clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) # build the solution using the base version - exec_path = os.path.abspath("../../sdk/base/dotnet") + exec_path = os.path.abspath("../../../sdk/base/dotnet") msbuild_command = """ msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ From e94b3a8eff48b26e34a35ed3722b895ee696609b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 02:40:06 +0100 Subject: [PATCH 060/115] add path specifier --- scripts/test_cases/msbuild_performance_test_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index fe8860d..7e3d076 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -114,7 +114,7 @@ def main(): clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) # build the solution using the base version - exec_path = os.path.abspath("../../../sdk/base/dotnet") + exec_path = os.path.abspath("./../../../sdk/base/dotnet") msbuild_command = """ msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ From 381f89613648f098945bc0f2aae18e0c94ea29c5 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 02:57:50 +0100 Subject: [PATCH 061/115] add full params to msbuild command --- scripts/test_cases/msbuild_performance_test_linux.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 7e3d076..2720fad 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -138,8 +138,8 @@ def main(): /clp:PerformanceSummary > log.txt """ - simple_command = "build LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" + # simple_command = "build LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {msbuild_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From 28fa267bb6efcc37d95ce5e79b73390855b26e76 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 03:06:47 +0100 Subject: [PATCH 062/115] remove params --- scripts/test_cases/msbuild_performance_test_linux.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 2720fad..38b4f56 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -138,8 +138,8 @@ def main(): /clp:PerformanceSummary > log.txt """ - # simple_command = "build LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {msbuild_command}" + simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) print(f"Command '{command}' took {elapsed_time}s to execute.") return elapsed_time From 39a6c355f794407c3ebbd149bf796a47c854388a Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 03:28:41 +0100 Subject: [PATCH 063/115] added daily command run --- .../msbuild_performance_test_linux.py | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 38b4f56..28d8829 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -19,12 +19,6 @@ TEST_SOLUTION_DIR = "solution" -def check_directory(event): - """Checking directory for debugging purposes""" - print(f'_____CHECKING DIR {event}________') - subprocess.run(["ls"], check=True) - - def create_extract_destinations(): """ Create the extract destination directories if they do not exist""" if not os.path.exists(EXTRACT_PATH): @@ -56,17 +50,7 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): def measure_execution_time(command): - """summary for measure_execution_time - - Args: - command ([String]): [command to be executed] - - Returns: - [Number]: [ellapsed time in seconds] - """ - - # subprocess.run(["cd", TEST_REPO_NAME], check=True) - # os.chdir(TEST_REPO_NAME) + """measure_execution_time runs build command and measure its execution time""" # Record start time start_time = time.time() @@ -107,14 +91,15 @@ def main(): create_extract_destinations() # download and extract the dotnet sdk - path = "base" - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, path) + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) # build the solution using the base version - exec_path = os.path.abspath("./../../../sdk/base/dotnet") + msbuild_command = """ msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ /p:AndroidPreserveUserData=True \ @@ -137,12 +122,15 @@ def main(): /clp:Summary \ /clp:PerformanceSummary > log.txt """ - - simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print(f"Command '{command}' took {elapsed_time}s to execute.") - return elapsed_time + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + return elapsed_time if __name__ == "__main__": From c4d473604f69395a33fc17cdcd151970d0e3f254 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 03:35:48 +0100 Subject: [PATCH 064/115] rm return statement --- scripts/test_cases/msbuild_performance_test_linux.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 28d8829..9ea6c6d 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -130,7 +130,6 @@ def main(): elapsed_time = measure_execution_time(command) print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - return elapsed_time if __name__ == "__main__": From 6df4e68f2788dcc88ea625ec606a5c346d0f0937 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 03:58:14 +0100 Subject: [PATCH 065/115] fix windows benchmarks --- .../msbuild_performance_test_windows.py | 103 ++++++++---------- 1 file changed, 48 insertions(+), 55 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index a2b6f0c..54e417b 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -1,16 +1,11 @@ -"""_summary_ -This script basically runs benchmark test for msbuild -Returns: - None: ..... -""" - import subprocess import time - +import os # ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" + # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" @@ -19,40 +14,40 @@ TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" -TEST_SOLUTION_DIR = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved/solution" +TEST_REPO_NAME = "TestSolutions" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_DIR = "solution" -def back_to_previous_dir(): - """_summary_ - """ - subprocess.call("cd ..", shell=True) +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") -def download_and_extract_dotnet_sdk(version_url, is_base): - """_summary_ +def download_file(url, filename): + """ Download file from url and save it to filename""" + subprocess.run(['Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True) - Args: - version_url (String): dotnet sdk version url -""" - path = f"{EXTRACT_PATH}/base" if is_base else f"{EXTRACT_PATH}/daily" - # Download the dotnet sdk - powershell_command = f"Invoke-WebRequest -Uri {version_url} -OutFile dotnet-sdk.zip" - extract_command = f"Expand-Archive -Path dotnet-sdk.zip -DestinationPath sdk/{path}" +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + zip_file = "dotnet-sdk.zip" + download_file(version_url, zip_file) - subprocess.call(f"powershell {powershell_command}", shell=True) - subprocess.call(f"powershell {extract_command}", shell=True) + # Extract the zip file + subprocess.run(["Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True) def measure_execution_time(command): - """summary for measure_execution_time - - Args: - command ([String]): [command to be executed] - - Returns: - [Number]: [ellapsed time in seconds] - """ + """measure_execution_time runs build command and measure its execution time""" # Record start time start_time = time.time() @@ -74,21 +69,13 @@ def clone_repository(repo_url, repo_path): repo_url (String): url of the repository to be cloned repo_path (String): path containing test code """ - # Clone the repository containing the solution - subprocess.call(f"git clone {repo_url}", shell=True) - subprocess.call(f"cd {repo_path}", shell=True) - - -def delete_clone(repo_url): - """_summary_ - - Args: - repo_path (String): path containing test code - """ - # extract the repository name from the url - repo_name = repo_url.split("/")[-1].replace(".git", "") - subprocess.call(f"rm -rf {repo_name}", shell=True) + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(repo_path) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['dir'], check=True) def main(): @@ -96,18 +83,20 @@ def main(): main() """ - # create a working directory for the test experiment - subprocess.call(f"mkdir {WORKING_DIR}", shell=True) - subprocess.call(f"cd {WORKING_DIR}", shell=True) + + # create the extract destination directories if they do not exist + create_extract_destinations() # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, True) + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_DIR) + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) # build the solution using the base version - exec_path = "../../sdk/base/dotnet.exe" + msbuild_command = """ msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ /p:AndroidPreserveUserData=True ^ @@ -130,10 +119,14 @@ def main(): /clp:Summary ^ /clp:PerformanceSummary > log.txt """ - command = f"{exec_path} {msbuild_command}" - elapsed_time = measure_execution_time(command) - print(f"Command '{command}' took {elapsed_time}s to execute.") - return elapsed_time + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") if __name__ == "__main__": From 240b4c42b0bc8052a2ee7ea1cedcd22bde38df61 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 04:04:47 +0100 Subject: [PATCH 066/115] add powershell flag to download command --- scripts/test_cases/msbuild_performance_test_windows.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index 54e417b..e4169fb 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -1,3 +1,9 @@ +# """_summary_ +# This script basically runs benchmark test for msbuild on windows +# Returns: +# None: ..... +# """ + import subprocess import time import os @@ -32,8 +38,8 @@ def create_extract_destinations(): def download_file(url, filename): """ Download file from url and save it to filename""" - subprocess.run(['Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True) + subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True, shell=True) def download_and_extract_dotnet_sdk(version_url, extract_path): From 3ff0a1e81a2d4fd52144c84cfae556fc93078256 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 04:05:42 +0100 Subject: [PATCH 067/115] add powershell flag to extract command --- scripts/test_cases/msbuild_performance_test_windows.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index e4169fb..ff75305 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -48,8 +48,8 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): download_file(version_url, zip_file) # Extract the zip file - subprocess.run(["Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True) + subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True, shell=True) def measure_execution_time(command): From 00d7d8075f6df50f35ee951ad397b4a86fe9682d Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 04:09:22 +0100 Subject: [PATCH 068/115] add docstring in windows script --- scripts/test_cases/msbuild_performance_test_windows.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index ff75305..926d3d6 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -1,8 +1,8 @@ -# """_summary_ -# This script basically runs benchmark test for msbuild on windows -# Returns: -# None: ..... -# """ +"""_summary_ +This script basically runs benchmark test for msbuild on windows +Returns: + None: ..... +""" import subprocess import time From 87af4239ea555344af70110a323befcf0558086b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Wed, 30 Aug 2023 12:41:09 +0100 Subject: [PATCH 069/115] add build command to restore packages --- scripts/test_cases/msbuild_performance_test_linux.py | 10 ++++++++++ .../test_cases/msbuild_performance_test_windows.py | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py index 9ea6c6d..d848a38 100644 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ b/scripts/test_cases/msbuild_performance_test_linux.py @@ -49,6 +49,15 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): "-C", extract_path], check=True) +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + def measure_execution_time(command): """measure_execution_time runs build command and measure its execution time""" @@ -125,6 +134,7 @@ def main(): versions = ['base', 'daily'] for version in versions: exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py index 926d3d6..0d135fb 100644 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ b/scripts/test_cases/msbuild_performance_test_windows.py @@ -52,9 +52,19 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): "-DestinationPath", extract_path], check=True, shell=True) +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + def measure_execution_time(command): """measure_execution_time runs build command and measure its execution time""" + # run `build` to restore packages # Record start time start_time = time.time() @@ -128,6 +138,7 @@ def main(): versions = ['base', 'daily'] for version in versions: exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) From 03538cd31fbd6cf9dd942ccb4837f178bf9694b4 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 20:07:14 +0100 Subject: [PATCH 070/115] rename scripts --- ...packages_centralised_ngbv_removed_linux.py | 146 +++++++++++++++++ ...ckages_centralised_ngbv_removed_windows.py | 150 ++++++++++++++++++ 2 files changed, 296 insertions(+) create mode 100644 scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py create mode 100644 scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py new file mode 100644 index 0000000..d848a38 --- /dev/null +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -0,0 +1,146 @@ +"""_summary_ +This script basically runs benchmark test for msbuild +Returns: + None: ..... +""" + +import subprocess +import time +import os +import urllib.request + +EXTRACT_PATH = "sdk" +WORKING_DIR = "msbuild-performance-test" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" +DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_REPO_NAME = "TestSolutions" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_DIR = "solution" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + + tar_gz_file = "dotnet-sdk.tar.gz" + download_file(version_url, tar_gz_file) + + # Extract the tar.gz file + # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" + subprocess.run(["tar", "-xzf", tar_gz_file, + "-C", extract_path], check=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(repo_path) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['ls'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = """ + msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ + /p:AndroidPreserveUserData=True \ + /p:AndroidUseManagedDesignTimeResourceGenerator=True \ + /p:BuildingByReSharper=False \ + /p:BuildingProject=False \ + /p:BuildProjectReferences=False \ + /p:ContinueOnError=ErrorAndContinue \ + /p:DesignTimeBuild=True \ + /p:DesignTimeSilentResolution=False \ + /p:JetBrainsDesignTimeBuild=True \ + /p:ProvideCommandLineArgs=True \ + /p:ResolveAssemblyReferencesSilent=False \ + /p:SkipCompilerExecution=True \ + /p:TargetFramework=net5.0 \ + /v:n \ + /m:1 \ + /bl \ + /flp:v=n;PerformanceSummary \ + /clp:Summary \ + /clp:PerformanceSummary > log.txt + """ + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py new file mode 100644 index 0000000..0d135fb --- /dev/null +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -0,0 +1,150 @@ +"""_summary_ +This script basically runs benchmark test for msbuild on windows +Returns: + None: ..... +""" + +import subprocess +import time +import os + +# ___ EXTRACTION CONSTANTS ___ # +EXTRACT_PATH = "sdk" +WORKING_DIR = "msbuild-performance-test" + +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" + +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" + +TEST_REPO_NAME = "TestSolutions" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_DIR = "solution" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True, shell=True) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + zip_file = "dotnet-sdk.zip" + download_file(version_url, zip_file) + + # Extract the zip file + subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True, shell=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # run `build` to restore packages + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(repo_path) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['dir'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = """ + msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ + /p:AndroidPreserveUserData=True ^ + /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ + /p:BuildingByReSharper=True ^ + /p:BuildingProject=False ^ + /p:BuildProjectReferences=False ^ + /p:ContinueOnError=ErrorAndContinue ^ + /p:DesignTimeBuild=True ^ + /p:DesignTimeSilentResolution=False ^ + /p:JetBrainsDesignTimeBuild=True ^ + /p:ProvideCommandLineArgs=True ^ + /p:ResolveAssemblyReferencesSilent=False ^ + /p:SkipCompilerExecution=True ^ + /p:TargetFramework=net5.0 ^ + /v:n ^ + /m:1 ^ + /bl ^ + /flp:v=n;PerformanceSummary ^ + /clp:Summary ^ + /clp:PerformanceSummary > log.txt + """ + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() From 0e4a3ff3bc3da740c2265ebb3152dab8969318b3 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 20:11:00 +0100 Subject: [PATCH 071/115] added script --- scripts/benchmark_runner.py | 20 +++ .../msbuild_performance_test_linux.py | 146 ----------------- .../msbuild_performance_test_windows.py | 150 ------------------ 3 files changed, 20 insertions(+), 296 deletions(-) create mode 100644 scripts/benchmark_runner.py delete mode 100644 scripts/test_cases/msbuild_performance_test_linux.py delete mode 100644 scripts/test_cases/msbuild_performance_test_windows.py diff --git a/scripts/benchmark_runner.py b/scripts/benchmark_runner.py new file mode 100644 index 0000000..bbc7c07 --- /dev/null +++ b/scripts/benchmark_runner.py @@ -0,0 +1,20 @@ +"""Run a benchmark and return the results.""" +import argparse + + +def run_benchamrk(): + """_summary_ + run_benchmark() + """ + + +if __name__ == '__main__': + # Parse arguments using argparse + parser = argparse.ArgumentParser( + description='---Benchmark Runner---') + parser.add_argument('name', help='Name of the test case') + parser.add_argument('results_file', help='File that stores the results') + + args = parser.parse_args() + + run_benchamrk() diff --git a/scripts/test_cases/msbuild_performance_test_linux.py b/scripts/test_cases/msbuild_performance_test_linux.py deleted file mode 100644 index d848a38..0000000 --- a/scripts/test_cases/msbuild_performance_test_linux.py +++ /dev/null @@ -1,146 +0,0 @@ -"""_summary_ -This script basically runs benchmark test for msbuild -Returns: - None: ..... -""" - -import subprocess -import time -import os -import urllib.request - -EXTRACT_PATH = "sdk" -WORKING_DIR = "msbuild-performance-test" -DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" -DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" -TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" -TEST_REPO_NAME = "TestSolutions" -TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" -TEST_SOLUTION_DIR = "solution" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: - data = response.read() - out_file.write(data) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - - tar_gz_file = "dotnet-sdk.tar.gz" - download_file(version_url, tar_gz_file) - - # Extract the tar.gz file - # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.run(["tar", "-xzf", tar_gz_file, - "-C", extract_path], check=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(repo_path) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['ls'], check=True) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = """ - msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ - /p:AndroidPreserveUserData=True \ - /p:AndroidUseManagedDesignTimeResourceGenerator=True \ - /p:BuildingByReSharper=False \ - /p:BuildingProject=False \ - /p:BuildProjectReferences=False \ - /p:ContinueOnError=ErrorAndContinue \ - /p:DesignTimeBuild=True \ - /p:DesignTimeSilentResolution=False \ - /p:JetBrainsDesignTimeBuild=True \ - /p:ProvideCommandLineArgs=True \ - /p:ResolveAssemblyReferencesSilent=False \ - /p:SkipCompilerExecution=True \ - /p:TargetFramework=net5.0 \ - /v:n \ - /m:1 \ - /bl \ - /flp:v=n;PerformanceSummary \ - /clp:Summary \ - /clp:PerformanceSummary > log.txt - """ - versions = ['base', 'daily'] - for version in versions: - exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - -if __name__ == "__main__": - main() diff --git a/scripts/test_cases/msbuild_performance_test_windows.py b/scripts/test_cases/msbuild_performance_test_windows.py deleted file mode 100644 index 0d135fb..0000000 --- a/scripts/test_cases/msbuild_performance_test_windows.py +++ /dev/null @@ -1,150 +0,0 @@ -"""_summary_ -This script basically runs benchmark test for msbuild on windows -Returns: - None: ..... -""" - -import subprocess -import time -import os - -# ___ EXTRACTION CONSTANTS ___ # -EXTRACT_PATH = "sdk" -WORKING_DIR = "msbuild-performance-test" - -# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # - -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" - -DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" - -TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" - -TEST_REPO_NAME = "TestSolutions" -TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" -TEST_SOLUTION_DIR = "solution" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True, shell=True) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - zip_file = "dotnet-sdk.zip" - download_file(version_url, zip_file) - - # Extract the zip file - subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True, shell=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # run `build` to restore packages - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(repo_path) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['dir'], check=True) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = """ - msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ - /p:AndroidPreserveUserData=True ^ - /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ - /p:BuildingByReSharper=True ^ - /p:BuildingProject=False ^ - /p:BuildProjectReferences=False ^ - /p:ContinueOnError=ErrorAndContinue ^ - /p:DesignTimeBuild=True ^ - /p:DesignTimeSilentResolution=False ^ - /p:JetBrainsDesignTimeBuild=True ^ - /p:ProvideCommandLineArgs=True ^ - /p:ResolveAssemblyReferencesSilent=False ^ - /p:SkipCompilerExecution=True ^ - /p:TargetFramework=net5.0 ^ - /v:n ^ - /m:1 ^ - /bl ^ - /flp:v=n;PerformanceSummary ^ - /clp:Summary ^ - /clp:PerformanceSummary > log.txt - """ - versions = ['base', 'daily'] - for version in versions: - exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - -if __name__ == "__main__": - main() From 04688cd90da6092d6e785497c4d2e0140695c375 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 20:47:17 +0100 Subject: [PATCH 072/115] added orleans case --- .github/workflows/benchmark_msbuild.yaml | 15 ++- scripts/test_cases/orleans_linux.py | 124 ++++++++++++++++++++++ scripts/test_cases/orleans_windows.py | 128 +++++++++++++++++++++++ 3 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 scripts/test_cases/orleans_linux.py create mode 100644 scripts/test_cases/orleans_windows.py diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 4b79929..facef96 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -10,6 +10,12 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: true jobs: msbuild_benchmarks_windows: + strategy: + matrix: + testcases: + - large_app_with_private_packages_centralised_ngbv_removed_windows + - orleans_windows + fail-fast: false runs-on: windows-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# @@ -28,9 +34,14 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - python msbuild_performance_test_windows.py + python "${{matrix.testcases}}.py" msbuild_benchmarks_linux: + strategy: + matrix: + testcases: + - large_app_with_private_packages_centralised_ngbv_removed_linux + - orleans_linux runs-on: ubuntu-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# @@ -49,4 +60,4 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - python msbuild_performance_test_linux.py + python "${{matrix.testcases}}.py" diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py new file mode 100644 index 0000000..5634bdf --- /dev/null +++ b/scripts/test_cases/orleans_linux.py @@ -0,0 +1,124 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild +Returns: + None: ..... +""" + +import subprocess +import time +import os +import urllib.request + +EXTRACT_PATH = "sdk" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" +DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" +TEST_SOLUTION_REPO_URL = "https://github.com/dotnet/orleans" +TEST_REPO_NAME = "orleans" +TEST_SOLUTION_CASE = "orleans" +TEST_SOLUTION_DIR = "./" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + + tar_gz_file = "dotnet-sdk.tar.gz" + download_file(version_url, tar_gz_file) + + # Extract the tar.gz file + # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" + subprocess.run(["tar", "-xzf", tar_gz_file, + "-C", extract_path], check=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['ls'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = 'msbuild Orleans.sln' + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild Orleans.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print('-----🟠 ORLEANS LINUX RESULT 🟠-----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py new file mode 100644 index 0000000..b65f1fe --- /dev/null +++ b/scripts/test_cases/orleans_windows.py @@ -0,0 +1,128 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild on windows +Returns: + None: ..... +""" + +import subprocess +import time +import os + +# ___ EXTRACTION CONSTANTS ___ # +EXTRACT_PATH = "sdk" + +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" + +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + +TEST_SOLUTION_REPO_URL = "https://github.com/dotnet/orleans" + +TEST_REPO_NAME = "orleans" +TEST_SOLUTION_CASE = "orleans" +TEST_SOLUTION_DIR = "./" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True, shell=True) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + zip_file = "dotnet-sdk.zip" + download_file(version_url, zip_file) + + # Extract the zip file + subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True, shell=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # run `build` to restore packages + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['dir'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = "msbuild Orleans.sln" + versions = ['base', 'daily'] + for version in versions: + exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild Orleans.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print('-----🟣 ORLEANS WINDOWS RESULT 🟣-----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() From c05546c63289297cb53863d69e9d67567d46b400 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 20:51:48 +0100 Subject: [PATCH 073/115] set to false --- .github/workflows/benchmark_msbuild.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index facef96..c2f3471 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -42,6 +42,7 @@ jobs: testcases: - large_app_with_private_packages_centralised_ngbv_removed_linux - orleans_linux + fail-fast: false runs-on: ubuntu-latest steps: #__________WE CHECK OUT TO WORKING REPO__________# From c5fb252f8c30863f5a98a5365cde082fdad987f4 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 20:58:34 +0100 Subject: [PATCH 074/115] ci: skipping in orleans --- scripts/test_cases/orleans_linux.py | 5 +++-- scripts/test_cases/orleans_windows.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 5634bdf..2c7d7c8 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -54,7 +54,8 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ - subprocess.run([dotnet_executable, 'build'], check=True) + print('-----🟠 _restoting packages_ 🟠-----') + # subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): @@ -115,7 +116,7 @@ def main(): simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----🟠 ORLEANS LINUX RESULT 🟠-----') + print('-----🟠 ORLEANS LINUX RESULT🟠-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index b65f1fe..49205c2 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -57,7 +57,8 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ - subprocess.run([dotnet_executable, 'build'], check=True) + print('-----🟠 _restoting packages_ 🟠-----') + # subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): From 7d7fdc1c05e3b1cb54b5f2cf2d2844a94ff51272 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 21:11:14 +0100 Subject: [PATCH 075/115] chore: change dotnet sdk --- scripts/test_cases/orleans_linux.py | 2 +- scripts/test_cases/orleans_windows.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 2c7d7c8..1ef5380 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -10,7 +10,7 @@ import urllib.request EXTRACT_PATH = "sdk" -DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/04550806-32dd-4e24-af64-275b132e1d72/897ddeee3e10e23cd844fc52c052644d/dotnet-sdk-7.0.110-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/dotnet/orleans" TEST_REPO_NAME = "orleans" diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 49205c2..f9537c6 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -13,7 +13,7 @@ # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/a7958b6d-1e41-4bc7-b1d4-628eda256bd7/cdb51638a820744d78b9feb8b732c9d7/dotnet-sdk-7.0.110-win-x64.zip" DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" @@ -115,7 +115,7 @@ def main(): msbuild_command = "msbuild Orleans.sln" versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" From ebbdd03ddfc456ede9d23c4a10eef352cf95321b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 21:15:39 +0100 Subject: [PATCH 076/115] add required version --- scripts/test_cases/orleans_linux.py | 2 +- scripts/test_cases/orleans_windows.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 1ef5380..b44f904 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -10,7 +10,7 @@ import urllib.request EXTRACT_PATH = "sdk" -DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/04550806-32dd-4e24-af64-275b132e1d72/897ddeee3e10e23cd844fc52c052644d/dotnet-sdk-7.0.110-linux-x64.tar.gz" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/dotnet/orleans" TEST_REPO_NAME = "orleans" diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index f9537c6..2da2ee9 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -13,7 +13,7 @@ # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/a7958b6d-1e41-4bc7-b1d4-628eda256bd7/cdb51638a820744d78b9feb8b732c9d7/dotnet-sdk-7.0.110-win-x64.zip" +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" From 36a456b37d6c457646613c650e22efc53618562b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 21:19:35 +0100 Subject: [PATCH 077/115] restoring *build* command --- scripts/test_cases/orleans_linux.py | 2 +- scripts/test_cases/orleans_windows.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index b44f904..aa1bbe6 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -55,7 +55,7 @@ def run_build_to_restore_packages(dotnet_executable): dotnet_executable (_type_): _description_ """ print('-----🟠 _restoting packages_ 🟠-----') - # subprocess.run([dotnet_executable, 'build'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 2da2ee9..f610537 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -58,7 +58,7 @@ def run_build_to_restore_packages(dotnet_executable): dotnet_executable (_type_): _description_ """ print('-----🟠 _restoting packages_ 🟠-----') - # subprocess.run([dotnet_executable, 'build'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): From 563ef54cbe0d0a5dc429beca931a252ab8c68b7b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 22:44:11 +0100 Subject: [PATCH 078/115] add restore command --- scripts/test_cases/orleans_linux.py | 1 + scripts/test_cases/orleans_windows.py | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index aa1bbe6..ba94f8b 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -55,6 +55,7 @@ def run_build_to_restore_packages(dotnet_executable): dotnet_executable (_type_): _description_ """ print('-----🟠 _restoting packages_ 🟠-----') + subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index f610537..b803159 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -58,6 +58,7 @@ def run_build_to_restore_packages(dotnet_executable): dotnet_executable (_type_): _description_ """ print('-----🟠 _restoting packages_ 🟠-----') + subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) From c25b88462233088b44d991947d854b18b033a434 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 22:51:53 +0100 Subject: [PATCH 079/115] rm daily version --- scripts/test_cases/orleans_linux.py | 2 +- scripts/test_cases/orleans_windows.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index ba94f8b..1cb12ec 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -110,7 +110,7 @@ def main(): # build the solution using the base version msbuild_command = 'msbuild Orleans.sln' - versions = ['base', 'daily'] + versions = ['base'] for version in versions: exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index b803159..4a2c344 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -114,7 +114,7 @@ def main(): # build the solution using the base version msbuild_command = "msbuild Orleans.sln" - versions = ['base', 'daily'] + versions = ['base'] for version in versions: exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) From c7509864cc88a0ff68241d10d5974c47e5f693fc Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 23:11:38 +0100 Subject: [PATCH 080/115] git add . --- scripts/test_cases/orchardcore_linux.py | 126 +++++++++++++++++++++ scripts/test_cases/orchardcore_windows.py | 130 ++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 scripts/test_cases/orchardcore_linux.py create mode 100644 scripts/test_cases/orchardcore_windows.py diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py new file mode 100644 index 0000000..5fe752b --- /dev/null +++ b/scripts/test_cases/orchardcore_linux.py @@ -0,0 +1,126 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild +Returns: + None: ..... +""" + +import subprocess +import time +import os +import urllib.request + +EXTRACT_PATH = "sdk" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" +DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" +TEST_SOLUTION_REPO_URL = "https://github.com/OrchardCMS/OrchardCore" +TEST_REPO_NAME = "OrchardCore" +TEST_SOLUTION_CASE = "OrchardCore" +TEST_SOLUTION_DIR = "./" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + + tar_gz_file = "dotnet-sdk.tar.gz" + download_file(version_url, tar_gz_file) + + # Extract the tar.gz file + # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" + subprocess.run(["tar", "-xzf", tar_gz_file, + "-C", extract_path], check=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + print('-----🟠 _restoting packages_ 🟠-----') + subprocess.run([dotnet_executable, 'restore'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['ls'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = 'msbuild OrchardCore.sln' + versions = ['base'] + for version in versions: + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild OrchardCore.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print('-----🟠 ORLEANS LINUX RESULT🟠-----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py new file mode 100644 index 0000000..b79cef3 --- /dev/null +++ b/scripts/test_cases/orchardcore_windows.py @@ -0,0 +1,130 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild on windows +Returns: + None: ..... +""" + +import subprocess +import time +import os + +# ___ EXTRACTION CONSTANTS ___ # +EXTRACT_PATH = "sdk" + +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" + +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + +TEST_SOLUTION_REPO_URL = "https://github.com/OrchardCMS/OrchardCore" + +TEST_REPO_NAME = "OrchardCore" +TEST_SOLUTION_CASE = "OrchardCore" +TEST_SOLUTION_DIR = "./" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True, shell=True) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + zip_file = "dotnet-sdk.zip" + download_file(version_url, zip_file) + + # Extract the zip file + subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True, shell=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + print('-----🟠 _restoting packages_ 🟠-----') + subprocess.run([dotnet_executable, 'restore'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # run `build` to restore packages + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['dir'], check=True) + + +def main(): + """_summary_ + main() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = "msbuild OrchardCore.sln" + versions = ['base'] + for version in versions: + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild OrchardCore.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print('-----🟣 ORLEANS WINDOWS RESULT 🟣-----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == "__main__": + main() From 135911dfa418b2116878f9f4609ae735c99fe81f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 23:17:23 +0100 Subject: [PATCH 081/115] add orchardcore solution to testcases matrix --- .github/workflows/benchmark_msbuild.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index c2f3471..33f7030 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -15,6 +15,7 @@ jobs: testcases: - large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows + - orchardcore_windows fail-fast: false runs-on: windows-latest steps: @@ -42,6 +43,7 @@ jobs: testcases: - large_app_with_private_packages_centralised_ngbv_removed_linux - orleans_linux + - orchardcore_linux fail-fast: false runs-on: ubuntu-latest steps: From 626f6a6a0513329945f9bde6163b39d884038ba2 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Sun, 3 Sep 2023 23:44:05 +0100 Subject: [PATCH 082/115] remove bad chars --- scripts/test_cases/orchardcore_windows.py | 4 ++-- scripts/test_cases/orleans_windows.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index b79cef3..433b229 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -57,7 +57,7 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ - print('-----🟠 _restoting packages_ 🟠-----') + print('-----_restoting packages_-----') subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) @@ -121,7 +121,7 @@ def main(): simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----🟣 ORLEANS WINDOWS RESULT 🟣-----') + print('-----ORLEANS WINDOWS RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 4a2c344..8b3d37b 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -57,7 +57,7 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ - print('-----🟠 _restoting packages_ 🟠-----') + print('-----_restoting packages_-----') subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) @@ -121,7 +121,7 @@ def main(): simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----🟣 ORLEANS WINDOWS RESULT 🟣-----') + print('-----ORLEANS WINDOWS RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") From 0eee6ada92cd85e20fa8a445a2fe2341ac147544 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 00:24:33 +0100 Subject: [PATCH 083/115] add daily version execution --- ...packages_centralised_ngbv_removed_linux.py | 4 ++- ...ckages_centralised_ngbv_removed_windows.py | 4 ++- scripts/test_cases/orchardcore_linux.py | 26 +++++++++++++++++-- scripts/test_cases/orchardcore_windows.py | 5 ++-- scripts/test_cases/orleans_linux.py | 5 ++-- scripts/test_cases/orleans_windows.py | 5 ++-- 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index d848a38..0114d93 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -133,7 +133,9 @@ def main(): """ versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath( + f"./../../../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 0d135fb..a09697b 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -137,7 +137,9 @@ def main(): """ versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../../../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath( + f"./../../../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 5fe752b..72ae534 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -7,6 +7,7 @@ import subprocess import time import os +import csv import urllib.request EXTRACT_PATH = "sdk" @@ -90,6 +91,26 @@ def clone_repository(repo_url, repo_path): subprocess.run(['ls'], check=True) +def camel_casify_solution_name(string): + """This method converts a string to camel case""" + parts = string.split('_') + camel_case_parts = [part.capitalize() for part in parts[:-1]] + return ''.join(camel_case_parts) + + +def save_benchmark_results(file_path): + """Saves bencharmk results to a csv file + + Args: + file_path (_type_): _description_ + """ + # Get the benchmark results and create a row data + # row_data = [version,base version,scenario,test case,timestamp,duration,base duration,relative duration] + with open(file_path, 'a', newline='', encoding='utf-8') as csv_file: + writer = csv.writer(csv_file) + # writer.writerow(row_data) + + def main(): """_summary_ main() @@ -110,9 +131,10 @@ def main(): # build the solution using the base version msbuild_command = 'msbuild OrchardCore.sln' - versions = ['base'] + versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index 433b229..b7a4bbb 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -114,9 +114,10 @@ def main(): # build the solution using the base version msbuild_command = "msbuild OrchardCore.sln" - versions = ['base'] + versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 1cb12ec..3266708 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -110,9 +110,10 @@ def main(): # build the solution using the base version msbuild_command = 'msbuild Orleans.sln' - versions = ['base'] + versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 8b3d37b..ecdd1a6 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -114,9 +114,10 @@ def main(): # build the solution using the base version msbuild_command = "msbuild Orleans.sln" - versions = ['base'] + versions = ['base', 'daily'] for version in versions: - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") + sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") run_build_to_restore_packages(exec_path) simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" From 79daf109295eae611cccf693139295425ff72b67 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 00:38:38 +0100 Subject: [PATCH 084/115] rm sub dir in linux --- ..._with_private_packages_centralised_ngbv_removed_linux.py | 4 ++-- scripts/test_cases/orchardcore_linux.py | 4 ++-- scripts/test_cases/orleans_linux.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 0114d93..e24318a 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -133,9 +133,9 @@ def main(): """ versions = ['base', 'daily'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' + # sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath( - f"./../../../sdk/{version}/dotnet{sub_dir}") + f"./../../../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 72ae534..49568d3 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -133,8 +133,8 @@ def main(): msbuild_command = 'msbuild OrchardCore.sln' versions = ['base', 'daily'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") + # sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 3266708..c8b4119 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -112,13 +112,13 @@ def main(): msbuild_command = 'msbuild Orleans.sln' versions = ['base', 'daily'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") + # sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----🟠 ORLEANS LINUX RESULT🟠-----') + print('-----🟠 ORLEANS LINUX RESUL🟠-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") From c6eaab58fcf4364aad33e80aeacb00d23e981493 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 01:03:04 +0100 Subject: [PATCH 085/115] add saving feature to orchardmore solution --- ...packages_centralised_ngbv_removed_linux.py | 2 +- ...ckages_centralised_ngbv_removed_windows.py | 2 +- scripts/test_cases/orchardcore_linux.py | 40 +++++++++++++++++-- scripts/test_cases/orchardcore_windows.py | 2 +- scripts/test_cases/orleans_linux.py | 2 +- scripts/test_cases/orleans_windows.py | 2 +- 6 files changed, 42 insertions(+), 8 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index e24318a..f1180f9 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -131,7 +131,7 @@ def main(): /clp:Summary \ /clp:PerformanceSummary > log.txt """ - versions = ['base', 'daily'] + versions = ['base'] for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath( diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index a09697b..2951251 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -135,7 +135,7 @@ def main(): /clp:Summary ^ /clp:PerformanceSummary > log.txt """ - versions = ['base', 'daily'] + versions = ['base'] for version in versions: sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath( diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 49568d3..879d83d 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -9,6 +9,7 @@ import os import csv import urllib.request +from datetime import datetime EXTRACT_PATH = "sdk" DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" @@ -17,6 +18,8 @@ TEST_REPO_NAME = "OrchardCore" TEST_SOLUTION_CASE = "OrchardCore" TEST_SOLUTION_DIR = "./" +SDK_VERSION = "7.0.100" +SDK_DAILY_VERSION = "8.0.1xx" def create_extract_destinations(): @@ -98,7 +101,15 @@ def camel_casify_solution_name(string): return ''.join(camel_case_parts) -def save_benchmark_results(file_path): +def print_csv_content(file_path): + """Prints content of csv file for debugging purposes""" + with open(file_path, 'r', encoding='utf-8') as csv_file: + reader = csv.reader(csv_file) + for row in reader: + print(row) + + +def save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration): """Saves bencharmk results to a csv file Args: @@ -106,9 +117,22 @@ def save_benchmark_results(file_path): """ # Get the benchmark results and create a row data # row_data = [version,base version,scenario,test case,timestamp,duration,base duration,relative duration] + version = SDK_DAILY_VERSION + base_version = SDK_VERSION + timestamp = datetime.utcnow().isoformat(timespec='seconds') + scenario = 'cold' + test_case = 'OrchardCoreLinux' + duration = benchmark_duration + base_duration = benchmark_base_duration + relative_duration = abs(base_duration - duration) + benchmark_results = [version, base_version, scenario, test_case, + timestamp, duration, base_duration, relative_duration] + with open(file_path, 'a', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) - # writer.writerow(row_data) + writer.writerow(benchmark_results) + + print_csv_content(file_path) def main(): @@ -131,7 +155,9 @@ def main(): # build the solution using the base version msbuild_command = 'msbuild OrchardCore.sln' - versions = ['base', 'daily'] + versions = ['base'] + duration_in_seconds = 0 + base_duration_in_seconds = 0 for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") @@ -139,10 +165,18 @@ def main(): simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) + if version == 'base': + base_duration_in_seconds = elapsed_time + else: + duration_in_seconds = elapsed_time print('-----🟠 ORLEANS LINUX RESULT🟠-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + # save benchmark results to a csv file + save_benchmark_results('../../data/msbuild.csv.csv', + duration_in_seconds, base_duration_in_seconds) + if __name__ == "__main__": main() diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index b7a4bbb..30d7f48 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -114,7 +114,7 @@ def main(): # build the solution using the base version msbuild_command = "msbuild OrchardCore.sln" - versions = ['base', 'daily'] + versions = ['base'] for version in versions: sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index c8b4119..561e7af 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -110,7 +110,7 @@ def main(): # build the solution using the base version msbuild_command = 'msbuild Orleans.sln' - versions = ['base', 'daily'] + versions = ['base'] for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index ecdd1a6..26a4cc1 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -114,7 +114,7 @@ def main(): # build the solution using the base version msbuild_command = "msbuild Orleans.sln" - versions = ['base', 'daily'] + versions = ['base'] for version in versions: sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") From 963e8bd3110c03d06a01464bee41095e02722370 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 02:23:58 +0100 Subject: [PATCH 086/115] format ordchardcore --- ..._with_private_packages_centralised_ngbv_removed_linux.py | 2 ++ ...ith_private_packages_centralised_ngbv_removed_windows.py | 4 ++-- scripts/test_cases/orchardcore_linux.py | 4 ++-- scripts/test_cases/orchardcore_windows.py | 6 +++--- scripts/test_cases/orleans_windows.py | 4 ++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index f1180f9..0bc5883 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -55,6 +55,8 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ + print('-----_restoting packages_-----') + subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 2951251..c52daaf 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -137,9 +137,9 @@ def main(): """ versions = ['base'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' + # sub_dir = "/sdk" if version == 'daily' else '' exec_path = os.path.abspath( - f"./../../../sdk/{version}/dotnet{sub_dir}") + f"./../../../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" command = f"{exec_path} {simple_command}" diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 879d83d..99aeb97 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -58,7 +58,7 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ - print('-----🟠 _restoting packages_ 🟠-----') + print('-----_restoting packages_-----') subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) @@ -169,7 +169,7 @@ def main(): base_duration_in_seconds = elapsed_time else: duration_in_seconds = elapsed_time - print('-----🟠 ORLEANS LINUX RESULT🟠-----') + print('-----🟠 ORCHARDCORE LINUX RESULT🟠-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index 30d7f48..b6a071b 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -116,13 +116,13 @@ def main(): msbuild_command = "msbuild OrchardCore.sln" versions = ['base'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") + # sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") run_build_to_restore_packages(exec_path) simple_command = "msbuild OrchardCore.sln" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----ORLEANS WINDOWS RESULT-----') + print('-----ORLEANS WINDOWS RESULT----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 26a4cc1..fdb4fe3 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -116,8 +116,8 @@ def main(): msbuild_command = "msbuild Orleans.sln" versions = ['base'] for version in versions: - sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet{sub_dir}") + # sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = "msbuild Orleans.sln" command = f"{exec_path} {simple_command}" From 219d23af6d0dd801352e479bc5cb5f7ffe94ca7b Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 03:00:40 +0100 Subject: [PATCH 087/115] added restore to linux --- ...app_with_private_packages_centralised_ngbv_removed_windows.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index c52daaf..f403493 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -58,6 +58,7 @@ def run_build_to_restore_packages(dotnet_executable): Args: dotnet_executable (_type_): _description_ """ + subprocess.run([dotnet_executable, 'restore'], check=True) subprocess.run([dotnet_executable, 'build'], check=True) From 4f0ab518bd393d15df4698f9f381e2b4ef61a0f7 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 04:03:28 +0100 Subject: [PATCH 088/115] change msbuild csv path and rm build step --- ...pp_with_private_packages_centralised_ngbv_removed_windows.py | 2 +- scripts/test_cases/orchardcore_linux.py | 2 +- scripts/test_cases/orchardcore_windows.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index f403493..53901d7 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -59,7 +59,7 @@ def run_build_to_restore_packages(dotnet_executable): dotnet_executable (_type_): _description_ """ subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) + # subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 99aeb97..2a3fc16 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -174,7 +174,7 @@ def main(): f"Running '{command}' with {version} version took {elapsed_time}s to execute.") # save benchmark results to a csv file - save_benchmark_results('../../data/msbuild.csv.csv', + save_benchmark_results('../../data/msbuild.csv', duration_in_seconds, base_duration_in_seconds) diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index b6a071b..5240e9b 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -59,7 +59,7 @@ def run_build_to_restore_packages(dotnet_executable): """ print('-----_restoting packages_-----') subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) + # subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): From e9f72903136a7dd7acff98ff84d8ad4e83f27145 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 04:39:34 +0100 Subject: [PATCH 089/115] change msbuild path --- scripts/test_cases/orchardcore_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 2a3fc16..5629fa8 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -174,7 +174,7 @@ def main(): f"Running '{command}' with {version} version took {elapsed_time}s to execute.") # save benchmark results to a csv file - save_benchmark_results('../../data/msbuild.csv', + save_benchmark_results('./../../data/msbuild.csv', duration_in_seconds, base_duration_in_seconds) From d88be95549f8515e3a5a5ed8f49973a2a0afabd4 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 05:03:39 +0100 Subject: [PATCH 090/115] switch msbuild path to parent dir --- scripts/test_cases/orchardcore_linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index 5629fa8..a77e954 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -174,7 +174,7 @@ def main(): f"Running '{command}' with {version} version took {elapsed_time}s to execute.") # save benchmark results to a csv file - save_benchmark_results('./../../data/msbuild.csv', + save_benchmark_results('./../../../data/msbuild.csv', duration_in_seconds, base_duration_in_seconds) From efce7afe2b6fa8a99f56986f394568d8671f9b02 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 05:43:57 +0100 Subject: [PATCH 091/115] ci: add autocommit and issue creation job --- .github/workflows/benchmark_msbuild.yaml | 95 ++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 33f7030..7f919ee 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -64,3 +64,98 @@ jobs: python -m pip install --upgrade pip pip install -r requirements.txt python "${{matrix.testcases}}.py" + + process_data: + # Only run on main repository + # Scheduled workflows do not have information about fork status, hence the hardcoded check + if: github.repository == 'G-Research/DotNetPerfMonitor' && github.ref == 'refs/heads/main' + environment: updater + runs-on: ubuntu-latest + needs: + - msbuild_benchmarks_windows + - msbuild_benchmarks_linux + steps: + - name: Install Step CLI + env: + VERSION: 0.19.0 + run: | + curl -sLO https://github.com/smallstep/cli/releases/download/v${VERSION}/step-cli_${VERSION}_amd64.deb + sudo dpkg -i step-cli_${VERSION}_amd64.deb + rm step-cli_${VERSION}_amd64.deb + + - name: Create access token + id: token + env: + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + run: | + jwt=$(step crypto jwt sign --key /dev/fd/3 --issuer $APP_ID --expiration $(date -d +5min +%s) --subtle 3<<< $APP_PRIVATE_KEY) + installation_id=$(curl -s -H "Accept: application/vnd.github.v3+json" -H "Authorization: Bearer $jwt" https://api.github.com/app/installations | jq '.[] | select(.account.login == "${{ github.repository_owner }}") | .id') + token=$(curl -s -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: Bearer $jwt" https://api.github.com/app/installations/$installation_id/access_tokens | jq -r '.token') + echo "::add-mask::$token" + echo "token=$token" >> $GITHUB_OUTPUT + + - name: Checkout + uses: actions/checkout@v3 + with: + token: ${{ steps.token.outputs.token }} + + - uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - uses: actions/download-artifact@v3 + with: + path: artifacts + + - name: Install python3 dependencies + working-directory: scripts/processors/ + run: pip3 install -r requirements.txt + + - name: Process data + shell: pwsh + run: | + Get-ChildItem -File -Path artifacts -Depth 1 | Foreach {. python3 scripts/processors/process_results.py $_.fullname data/msbuild.csv} + + - name: Get alerts + id: alerts + run: | + python3 scripts/processors/generate_alert.py data/nuget.csv active_msbuild_regressions.txt + if test -f "active_msbuild_regressions.txt"; then + echo "file_exists=true" >> $GITHUB_OUTPUT + echo "file_content='$file_content'" >> $GITHUB_OUTPUT + fi + + - name: Create new issue if necessary + if: steps.alerts.outputs.file_exists == 'true' + run: | + numOpenIssues="$(gh api graphql -F owner=$OWNER -F name=$REPO -f query=' + query($name: String!, $owner: String!) { + repository(owner: $owner, name: $name) { + issues(states:OPEN, filterBy: { labels: ["active_msbuild_regressions"]}){ + totalCount + } + } + } + ' --jq '.data.repository.issues.totalCount')" + + if [ $numOpenIssues -eq 0 ]; then + echo "Creating new issue" + gh issue create --title "Active MS Build regression" --label "active_msbuild_regressions" --body "\`\`\` $(cat active_msbuild_regressions.txt) \`\`\`" --repo $GITHUB_REPOSITORY + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OWNER: ${{ github.repository_owner }} + REPO: ${{ github.event.repository.name }} + + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + file_pattern: "data/msbuild.csv" + commit_author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" + + - name: Upload data + if: steps.alerts.outputs.file_exists == 'true' + uses: actions/upload-artifact@v3 + with: + name: active_msbuild_regressions + path: active_msbuild_regressions.txt From 494c2266034b49d00d33f07d08945912368b70d2 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 07:40:55 +0100 Subject: [PATCH 092/115] ci: disable windows large app with private packages solution --- .github/workflows/benchmark_msbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 7f919ee..c2d61be 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -13,7 +13,7 @@ jobs: strategy: matrix: testcases: - - large_app_with_private_packages_centralised_ngbv_removed_windows + #- large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows - orchardcore_windows fail-fast: false From fbd3c2ac639f228c2541ae7fac6eda7fa0f5f73f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Mon, 4 Sep 2023 11:25:33 +0100 Subject: [PATCH 093/115] ci: added largeapp slim solution --- .github/workflows/benchmark_msbuild.yaml | 2 +- ..._app_with_private_packages_centralised_ngbv_removed_linux.py | 2 +- ...pp_with_private_packages_centralised_ngbv_removed_windows.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index c2d61be..7f919ee 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -13,7 +13,7 @@ jobs: strategy: matrix: testcases: - #- large_app_with_private_packages_centralised_ngbv_removed_windows + - large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows - orchardcore_windows fail-fast: false diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 0bc5883..73a90e2 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -15,7 +15,7 @@ DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" TEST_REPO_NAME = "TestSolutions" -TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" TEST_SOLUTION_DIR = "solution" diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 53901d7..b32d1d2 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -21,7 +21,7 @@ TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" TEST_REPO_NAME = "TestSolutions" -TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedNGBVRemoved" +TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" TEST_SOLUTION_DIR = "solution" From 649fa4685a198076af44ffff7c7c62c534f4f2bf Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 01:07:12 +0100 Subject: [PATCH 094/115] ci: modularized benchmark runner --- scripts/benchmark_runner.py | 20 ---- scripts/benchmark_runner_linux.py | 170 ++++++++++++++++++++++++++++ scripts/benchmark_runner_windows.py | 135 ++++++++++++++++++++++ scripts/benchmark_utils.py | 44 +++++++ scripts/test_cases/orleans_linux.py | 169 ++++++++++++++------------- 5 files changed, 437 insertions(+), 101 deletions(-) delete mode 100644 scripts/benchmark_runner.py create mode 100644 scripts/benchmark_runner_linux.py create mode 100644 scripts/benchmark_runner_windows.py create mode 100644 scripts/benchmark_utils.py diff --git a/scripts/benchmark_runner.py b/scripts/benchmark_runner.py deleted file mode 100644 index bbc7c07..0000000 --- a/scripts/benchmark_runner.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Run a benchmark and return the results.""" -import argparse - - -def run_benchamrk(): - """_summary_ - run_benchmark() - """ - - -if __name__ == '__main__': - # Parse arguments using argparse - parser = argparse.ArgumentParser( - description='---Benchmark Runner---') - parser.add_argument('name', help='Name of the test case') - parser.add_argument('results_file', help='File that stores the results') - - args = parser.parse_args() - - run_benchamrk() diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py new file mode 100644 index 0000000..84b7bca --- /dev/null +++ b/scripts/benchmark_runner_linux.py @@ -0,0 +1,170 @@ +"""Run a benchmark and return the results.""" +import argparse + +import subprocess +import time +import os +import urllib.request +import benchmark_utils as utils + + +def create_extract_destinations(path): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(path): + os.mkdir(path) + os.chdir(path) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + + tar_gz_file = "dotnet-sdk.tar.gz" + download_file(version_url, tar_gz_file) + + # Extract the tar.gz file + # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" + subprocess.run(["tar", "-xzf", tar_gz_file, + "-C", extract_path], check=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + print('-----_restoting packages_-----') + subprocess.run([dotnet_executable, 'restore'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, test_repo_name, test_solution_dir): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(test_repo_name) + os.chdir(test_solution_dir) + subprocess.run(['ls'], check=True) + + +def run_benchamrk(args): + """_summary_ + run_benchamrk() + + """ + # Access the arguments as attributes of the 'args' object + EXTRACT_PATH = args.extract_path + DOTNET_BASE_VERSION_URL_LINUX = args.dotnet_base_version_url_linux + DOTNET_DAILY_VERSION_URL_LINUX = args.dotnet_daily_version_url_linux + TEST_SOLUTION_REPO_URL = args.test_solution_repo_url + TEST_REPO_NAME = args.test_repo_name + TEST_SOLUTION_CASE = args.test_solution_case + TEST_SOLUTION_DIR = args.test_solution_dir + TEST_SOLUTION_FILE = args.solution_file + SDK_VERSION = args.sdk_version + SDK_DAILY_VERSION = args.sdk_daily_version + DATABASE_FILE = args.database_file + NESTED = True if args.is_nested_solution else False + + # create the extract destination directories if they do not exist + create_extract_destinations(EXTRACT_PATH) + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, + TEST_REPO_NAME, TEST_SOLUTION_DIR) + + # build the solution using the base version + + msbuild_command = f"msbuild {TEST_SOLUTION_FILE}" + versions = ['base'] + duration_in_seconds = 0 + base_duration_in_seconds = 0 + test_scenario = 'cold' + for version in versions: + # sub_dir = "/sdk" if version == 'daily' else '' + subdirs = './../../../sdk' if NESTED else './../sdk' + exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") + run_build_to_restore_packages(exec_path) + simple_command = f"msbuild {TEST_SOLUTION_FILE}" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + if version == 'base': + base_duration_in_seconds = elapsed_time + else: + duration_in_seconds = elapsed_time + print('-----🟠 ORCHARDCORE LINUX RESULT🟠-----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + # save benchmark results to a csv file + # save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration, sdk_version, sdk_daily_version, test_case_name, test_scenario): + utils.save_benchmark_results( + DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario + ) + + +if __name__ == '__main__': + # Parse arguments using argparse + parser = argparse.ArgumentParser( + description='---Benchmark Runner---') + + # <-Parse arguments + parser.add_argument('--extract_path', help='Path for extraction') + parser.add_argument('--dotnet_base_version_url_linux', + help='URL for the base version of .NET SDK on Linux') + parser.add_argument('--dotnet_daily_version_url_linux', + help='URL for the daily version of .NET SDK on Linux') + parser.add_argument('--test_solution_repo_url', + help='URL of the test solution repository') + parser.add_argument('--test_repo_name', help='Name of the test repository') + parser.add_argument('--test_solution_case', help='Test solution case') + parser.add_argument('--test_solution_dir', help='Test solution directory') + parser.add_argument('--sdk_version', help='Version of the SDK') + parser.add_argument('--sdk_daily_version', help='Version of the daily SDK') + parser.add_argument('--database_file', help='Path to the database file') + parser.add_argument('--solution_file', help='Path to the database file') + parser.add_argument('--is_nested_solution', + help='Path to the database file') + # Parse arguments -> + + args = parser.parse_args() + + run_benchamrk(args) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py new file mode 100644 index 0000000..fd8e16e --- /dev/null +++ b/scripts/benchmark_runner_windows.py @@ -0,0 +1,135 @@ +"""Run a benchmark and return the results.""" +import argparse +import subprocess +import time +import os + +# ___ EXTRACTION CONSTANTS ___ # +EXTRACT_PATH = "sdk" + +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" + +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + +TEST_SOLUTION_REPO_URL = "https://github.com/OrchardCMS/OrchardCore" + +TEST_REPO_NAME = "OrchardCore" +TEST_SOLUTION_CASE = "OrchardCore" +TEST_SOLUTION_DIR = "./" + + +def create_extract_destinations(): + """ Create the extract destination directories if they do not exist""" + if not os.path.exists(EXTRACT_PATH): + os.mkdir(EXTRACT_PATH) + os.chdir(EXTRACT_PATH) + if not os.path.exists("base"): + os.mkdir("base") + if not os.path.exists("daily"): + os.mkdir("daily") + + +def download_file(url, filename): + """ Download file from url and save it to filename""" + subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', + url, '-OutFile', filename], check=True, shell=True) + + +def download_and_extract_dotnet_sdk(version_url, extract_path): + """ Download and extract the dotnet sdk""" + zip_file = "dotnet-sdk.zip" + download_file(version_url, zip_file) + + # Extract the zip file + subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + "-DestinationPath", extract_path], check=True, shell=True) + + +def run_build_to_restore_packages(dotnet_executable): + """_summary_ + + Args: + dotnet_executable (_type_): _description_ + """ + print('-----_restoting packages_-----') + subprocess.run([dotnet_executable, 'restore'], check=True) + # subprocess.run([dotnet_executable, 'build'], check=True) + + +def measure_execution_time(command): + """measure_execution_time runs build command and measure its execution time""" + + # run `build` to restore packages + # Record start time + start_time = time.time() + + # Run the command + subprocess.call(command, shell=True) + + # Calculate elapsed time + end_time = time.time() + elapsed_time = end_time - start_time + + return elapsed_time + + +def clone_repository(repo_url, repo_path): + """_summary_ + + Args: + repo_url (String): url of the repository to be cloned + repo_path (String): path containing test code + """ + # Clone the repository containing the solution + os.chdir('..') + subprocess.run(['git', 'clone', repo_url], check=True) + os.chdir(TEST_REPO_NAME) + os.chdir(TEST_SOLUTION_DIR) + subprocess.run(['dir'], check=True) + + +def run_benchamrk(): + """_summary_ + run_benchamrk() + + """ + + # create the extract destination directories if they do not exist + create_extract_destinations() + + # download and extract the dotnet sdk + + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") + + # clone the repository and navigate to the solution directory + clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + + # build the solution using the base version + + msbuild_command = "msbuild OrchardCore.sln" + versions = ['base'] + for version in versions: + # sub_dir = "/sdk" if version == 'daily' else '' + exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") + run_build_to_restore_packages(exec_path) + simple_command = "msbuild OrchardCore.sln" + command = f"{exec_path} {simple_command}" + elapsed_time = measure_execution_time(command) + print('-----ORLEANS WINDOWS RESULT----') + print( + f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +if __name__ == '__main__': + # Parse arguments using argparse + parser = argparse.ArgumentParser( + description='---Benchmark Runner---') + parser.add_argument('name', help='Name of the test case') + parser.add_argument('results_file', help='File that stores the results') + + args = parser.parse_args() + + run_benchamrk() diff --git a/scripts/benchmark_utils.py b/scripts/benchmark_utils.py new file mode 100644 index 0000000..abe4677 --- /dev/null +++ b/scripts/benchmark_utils.py @@ -0,0 +1,44 @@ +"""Save benchmark results to a file.""" +import csv +from datetime import datetime + + +def camel_casify_solution_name(string): + """This method converts a string to camel case""" + parts = string.split('_') + camel_case_parts = [part.capitalize() for part in parts[:-1]] + return ''.join(camel_case_parts) + + +def print_csv_content(file_path): + """Prints content of csv file for debugging purposes""" + with open(file_path, 'r', encoding='utf-8') as csv_file: + reader = csv.reader(csv_file) + for row in reader: + print(row) + + +def save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration, sdk_version, sdk_daily_version, test_case_name, test_scenario): + """Saves bencharmk results to a csv file + + Args: + file_path (_type_): _description_ + """ + # Get the benchmark results and create a row data + # row_data = [version,base version,scenario,test case,timestamp,duration,base duration,relative duration] + version = sdk_daily_version + base_version = sdk_version + timestamp = datetime.utcnow().isoformat(timespec='seconds') + scenario = test_scenario + test_case = test_case_name + duration = benchmark_duration + base_duration = benchmark_base_duration + relative_duration = abs(base_duration - duration) + benchmark_results = [version, base_version, scenario, test_case, + timestamp, duration, base_duration, relative_duration] + + with open(file_path, 'a', newline='', encoding='utf-8') as csv_file: + writer = csv.writer(csv_file) + writer.writerow(benchmark_results) + + print_csv_content(file_path) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index 561e7af..fef36b9 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -5,9 +5,9 @@ """ import subprocess -import time -import os -import urllib.request +# import time +# import os +# import urllib.request EXTRACT_PATH = "sdk" DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" @@ -16,112 +16,119 @@ TEST_REPO_NAME = "orleans" TEST_SOLUTION_CASE = "orleans" TEST_SOLUTION_DIR = "./" +SOLUTION_FILE = "Orleans.sln" +SDK_VERSION = "7.0.100" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" +# def create_extract_destinations(): +# """ Create the extract destination directories if they do not exist""" +# if not os.path.exists(EXTRACT_PATH): +# os.mkdir(EXTRACT_PATH) +# os.chdir(EXTRACT_PATH) +# if not os.path.exists("base"): +# os.mkdir("base") +# if not os.path.exists("daily"): +# os.mkdir("daily") -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") +# def download_file(url, filename): +# """ Download file from url and save it to filename""" +# with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: +# data = response.read() +# out_file.write(data) -def download_file(url, filename): - """ Download file from url and save it to filename""" - with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: - data = response.read() - out_file.write(data) +# def download_and_extract_dotnet_sdk(version_url, extract_path): +# """ Download and extract the dotnet sdk""" -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" +# tar_gz_file = "dotnet-sdk.tar.gz" +# download_file(version_url, tar_gz_file) - tar_gz_file = "dotnet-sdk.tar.gz" - download_file(version_url, tar_gz_file) +# # Extract the tar.gz file +# # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" +# subprocess.run(["tar", "-xzf", tar_gz_file, +# "-C", extract_path], check=True) - # Extract the tar.gz file - # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.run(["tar", "-xzf", tar_gz_file, - "-C", extract_path], check=True) +# def run_build_to_restore_packages(dotnet_executable): +# """_summary_ -def run_build_to_restore_packages(dotnet_executable): - """_summary_ +# Args: +# dotnet_executable (_type_): _description_ +# """ +# print('-----🟠 _restoting packages_ 🟠-----') +# subprocess.run([dotnet_executable, 'restore'], check=True) +# subprocess.run([dotnet_executable, 'build'], check=True) - Args: - dotnet_executable (_type_): _description_ - """ - print('-----🟠 _restoting packages_ 🟠-----') - subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) +# def measure_execution_time(command): +# """measure_execution_time runs build command and measure its execution time""" -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" +# # Record start time +# start_time = time.time() - # Record start time - start_time = time.time() +# # Run the command +# subprocess.call(command, shell=True) - # Run the command - subprocess.call(command, shell=True) +# # Calculate elapsed time +# end_time = time.time() +# elapsed_time = end_time - start_time - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time +# return elapsed_time - return elapsed_time +# def clone_repository(repo_url, repo_path): +# """_summary_ -def clone_repository(repo_url, repo_path): - """_summary_ +# Args: +# repo_url (String): url of the repository to be cloned +# repo_path (String): path containing test code +# """ +# # Clone the repository containing the solution +# os.chdir('..') +# subprocess.run(['git', 'clone', repo_url], check=True) +# os.chdir(TEST_REPO_NAME) +# os.chdir(TEST_SOLUTION_DIR) +# subprocess.run(['ls'], check=True) - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['ls'], check=True) +# def main(): +# """_summary_ +# main() -def main(): - """_summary_ - main() +# """ - """ +# # create the extract destination directories if they do not exist +# create_extract_destinations() - # create the extract destination directories if they do not exist - create_extract_destinations() +# # download and extract the dotnet sdk - # download and extract the dotnet sdk +# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") +# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") +# # clone the repository and navigate to the solution directory +# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) +# # build the solution using the base version - # build the solution using the base version - - msbuild_command = 'msbuild Orleans.sln' - versions = ['base'] - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild Orleans.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print('-----🟠 ORLEANS LINUX RESUL🟠-----') - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") +# msbuild_command = 'msbuild Orleans.sln' +# versions = ['base'] +# for version in versions: +# # sub_dir = "/sdk" if version == 'daily' else '' +# exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") +# run_build_to_restore_packages(exec_path) +# simple_command = "msbuild Orleans.sln" +# command = f"{exec_path} {simple_command}" +# elapsed_time = measure_execution_time(command) +# print('-----🟠 ORLEANS LINUX RESUL🟠-----') +# print( +# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) From 451bdb3ca7b9398ded69c114ac57ca8313c88224 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 01:16:11 +0100 Subject: [PATCH 095/115] ci: fix linters issues and updated sdk dir --- .pylintrc | 2 +- scripts/benchmark_runner_linux.py | 4 ++-- scripts/processors/.pylintrc | 2 +- scripts/test_cases/.pylintrc | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pylintrc b/.pylintrc index 912a31e..40fa47f 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code, too-many-locals, too-many-arguments \ No newline at end of file diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 84b7bca..865ccbd 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -97,7 +97,7 @@ def run_benchamrk(args): SDK_VERSION = args.sdk_version SDK_DAILY_VERSION = args.sdk_daily_version DATABASE_FILE = args.database_file - NESTED = True if args.is_nested_solution else False + NESTED = args.is_nested_solution == "True" # create the extract destination directories if they do not exist create_extract_destinations(EXTRACT_PATH) @@ -120,7 +120,7 @@ def run_benchamrk(args): test_scenario = 'cold' for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' - subdirs = './../../../sdk' if NESTED else './../sdk' + subdirs = './../../sdk' if NESTED else './sdk' exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = f"msbuild {TEST_SOLUTION_FILE}" diff --git a/scripts/processors/.pylintrc b/scripts/processors/.pylintrc index 912a31e..514fea8 100644 --- a/scripts/processors/.pylintrc +++ b/scripts/processors/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code,too-many-locals, too-many-arguments \ No newline at end of file diff --git a/scripts/test_cases/.pylintrc b/scripts/test_cases/.pylintrc index 912a31e..40fa47f 100644 --- a/scripts/test_cases/.pylintrc +++ b/scripts/test_cases/.pylintrc @@ -1,2 +1,2 @@ [pylint.messages control] -disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code \ No newline at end of file +disable = unused-variable, line-too-long, invalid-name, redefined-outer-name, unused-argument, duplicate-code, too-many-locals, too-many-arguments \ No newline at end of file From bd5f7600516e3cec98cf74fcddc0bd6372fd76b3 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 01:24:50 +0100 Subject: [PATCH 096/115] ci: update exec path --- scripts/benchmark_runner_linux.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 865ccbd..bfcc2ed 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -120,7 +120,8 @@ def run_benchamrk(args): test_scenario = 'cold' for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' - subdirs = './../../sdk' if NESTED else './sdk' + # subdirs = './../../../sdk' if NESTED else './../sdk' + subdirs = './../../sdk' if NESTED else './../sdk' exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = f"msbuild {TEST_SOLUTION_FILE}" From 48ad4153d41fa39f883f6fb2eabbb78320402060 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 03:37:47 +0100 Subject: [PATCH 097/115] ci: modularized ordchrdcore windows --- scripts/benchmark_runner_windows.py | 106 +++++++++----- scripts/test_cases/orchardcore_windows.py | 163 +++++++++++----------- scripts/test_cases/orleans_linux.py | 108 -------------- 3 files changed, 153 insertions(+), 224 deletions(-) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index fd8e16e..f37b368 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -1,30 +1,17 @@ """Run a benchmark and return the results.""" import argparse + import subprocess import time import os +import benchmark_utils as utils -# ___ EXTRACTION CONSTANTS ___ # -EXTRACT_PATH = "sdk" - -# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # - -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" - -DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" - -TEST_SOLUTION_REPO_URL = "https://github.com/OrchardCMS/OrchardCore" -TEST_REPO_NAME = "OrchardCore" -TEST_SOLUTION_CASE = "OrchardCore" -TEST_SOLUTION_DIR = "./" - - -def create_extract_destinations(): +def create_extract_destinations(path): """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) + if not os.path.exists(path): + os.mkdir(path) + os.chdir(path) if not os.path.exists("base"): os.mkdir("base") if not os.path.exists("daily"): @@ -55,13 +42,12 @@ def run_build_to_restore_packages(dotnet_executable): """ print('-----_restoting packages_-----') subprocess.run([dotnet_executable, 'restore'], check=True) - # subprocess.run([dotnet_executable, 'build'], check=True) + subprocess.run([dotnet_executable, 'build'], check=True) def measure_execution_time(command): """measure_execution_time runs build command and measure its execution time""" - # run `build` to restore packages # Record start time start_time = time.time() @@ -75,7 +61,7 @@ def measure_execution_time(command): return elapsed_time -def clone_repository(repo_url, repo_path): +def clone_repository(repo_url, test_repo_name, test_solution_dir): """_summary_ Args: @@ -85,51 +71,97 @@ def clone_repository(repo_url, repo_path): # Clone the repository containing the solution os.chdir('..') subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['dir'], check=True) + os.chdir(test_repo_name) + os.chdir(test_solution_dir) + subprocess.run(['ls'], check=True) -def run_benchamrk(): +def run_benchamrk(args): """_summary_ run_benchamrk() """ + # Access the arguments as attributes of the 'args' object + EXTRACT_PATH = args.extract_path + DOTNET_BASE_VERSION_URL_LINUX = args.dotnet_base_version_url_linux + DOTNET_DAILY_VERSION_URL_LINUX = args.dotnet_daily_version_url_linux + TEST_SOLUTION_REPO_URL = args.test_solution_repo_url + TEST_REPO_NAME = args.test_repo_name + TEST_SOLUTION_CASE = args.test_solution_case + TEST_SOLUTION_DIR = args.test_solution_dir + TEST_SOLUTION_FILE = args.solution_file + SDK_VERSION = args.sdk_version + SDK_DAILY_VERSION = args.sdk_daily_version + DATABASE_FILE = args.database_file + NESTED = args.is_nested_solution == "True" # create the extract destination directories if they do not exist - create_extract_destinations() + create_extract_destinations(EXTRACT_PATH) # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") + download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") + download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + clone_repository(TEST_SOLUTION_REPO_URL, + TEST_REPO_NAME, TEST_SOLUTION_DIR) # build the solution using the base version - msbuild_command = "msbuild OrchardCore.sln" + msbuild_command = f"msbuild {TEST_SOLUTION_FILE}" versions = ['base'] + duration_in_seconds = 0 + base_duration_in_seconds = 0 + test_scenario = 'cold' for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") + # subdirs = './../../../sdk' if NESTED else './../sdk' + subdirs = './../../sdk' if NESTED else './../sdk' + exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") run_build_to_restore_packages(exec_path) - simple_command = "msbuild OrchardCore.sln" + simple_command = f"msbuild {TEST_SOLUTION_FILE}" command = f"{exec_path} {simple_command}" elapsed_time = measure_execution_time(command) - print('-----ORLEANS WINDOWS RESULT----') + if version == 'base': + base_duration_in_seconds = elapsed_time + else: + duration_in_seconds = elapsed_time + print('-----WINDOWS BENCHMARK RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + # save benchmark results to a csv file + # save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration, sdk_version, sdk_daily_version, test_case_name, test_scenario): + utils.save_benchmark_results( + DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario + ) + if __name__ == '__main__': # Parse arguments using argparse parser = argparse.ArgumentParser( description='---Benchmark Runner---') - parser.add_argument('name', help='Name of the test case') - parser.add_argument('results_file', help='File that stores the results') + + # <-Parse arguments + parser.add_argument('--extract_path', help='Path for extraction') + parser.add_argument('--dotnet_base_version_url_linux', + help='URL for the base version of .NET SDK on Linux') + parser.add_argument('--dotnet_daily_version_url_linux', + help='URL for the daily version of .NET SDK on Linux') + parser.add_argument('--test_solution_repo_url', + help='URL of the test solution repository') + parser.add_argument('--test_repo_name', help='Name of the test repository') + parser.add_argument('--test_solution_case', help='Test solution case') + parser.add_argument('--test_solution_dir', help='Test solution directory') + parser.add_argument('--sdk_version', help='Version of the SDK') + parser.add_argument('--sdk_daily_version', help='Version of the daily SDK') + parser.add_argument('--database_file', help='Path to the database file') + parser.add_argument('--solution_file', help='Path to the database file') + parser.add_argument('--is_nested_solution', + help='Path to the database file') + # Parse arguments -> args = parser.parse_args() - run_benchamrk() + run_benchamrk(args) diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index 5240e9b..3046288 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -5,9 +5,6 @@ """ import subprocess -import time -import os - # ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" @@ -22,110 +19,118 @@ TEST_REPO_NAME = "OrchardCore" TEST_SOLUTION_CASE = "OrchardCore" TEST_SOLUTION_DIR = "./" +SDK_VERSION = "7.0.100" +SOLUTION_FILE = "OrchardCore.sln" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") +# def create_extract_destinations(): +# """ Create the extract destination directories if they do not exist""" +# if not os.path.exists(EXTRACT_PATH): +# os.mkdir(EXTRACT_PATH) +# os.chdir(EXTRACT_PATH) +# if not os.path.exists("base"): +# os.mkdir("base") +# if not os.path.exists("daily"): +# os.mkdir("daily") -def download_file(url, filename): - """ Download file from url and save it to filename""" - subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True, shell=True) +# def download_file(url, filename): +# """ Download file from url and save it to filename""" +# subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', +# url, '-OutFile', filename], check=True, shell=True) -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - zip_file = "dotnet-sdk.zip" - download_file(version_url, zip_file) +# def download_and_extract_dotnet_sdk(version_url, extract_path): +# """ Download and extract the dotnet sdk""" +# zip_file = "dotnet-sdk.zip" +# download_file(version_url, zip_file) - # Extract the zip file - subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True, shell=True) +# # Extract the zip file +# subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, +# "-DestinationPath", extract_path], check=True, shell=True) -def run_build_to_restore_packages(dotnet_executable): - """_summary_ +# def run_build_to_restore_packages(dotnet_executable): +# """_summary_ - Args: - dotnet_executable (_type_): _description_ - """ - print('-----_restoting packages_-----') - subprocess.run([dotnet_executable, 'restore'], check=True) - # subprocess.run([dotnet_executable, 'build'], check=True) +# Args: +# dotnet_executable (_type_): _description_ +# """ +# print('-----_restoting packages_-----') +# subprocess.run([dotnet_executable, 'restore'], check=True) +# # subprocess.run([dotnet_executable, 'build'], check=True) -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" +# def measure_execution_time(command): +# """measure_execution_time runs build command and measure its execution time""" - # run `build` to restore packages - # Record start time - start_time = time.time() +# # run `build` to restore packages +# # Record start time +# start_time = time.time() - # Run the command - subprocess.call(command, shell=True) +# # Run the command +# subprocess.call(command, shell=True) - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time +# # Calculate elapsed time +# end_time = time.time() +# elapsed_time = end_time - start_time - return elapsed_time +# return elapsed_time -def clone_repository(repo_url, repo_path): - """_summary_ +# def clone_repository(repo_url, repo_path): +# """_summary_ - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['dir'], check=True) +# Args: +# repo_url (String): url of the repository to be cloned +# repo_path (String): path containing test code +# """ +# # Clone the repository containing the solution +# os.chdir('..') +# subprocess.run(['git', 'clone', repo_url], check=True) +# os.chdir(TEST_REPO_NAME) +# os.chdir(TEST_SOLUTION_DIR) +# subprocess.run(['dir'], check=True) -def main(): - """_summary_ - main() +# def main(): +# """_summary_ +# main() - """ +# """ - # create the extract destination directories if they do not exist - create_extract_destinations() +# # create the extract destination directories if they do not exist +# create_extract_destinations() - # download and extract the dotnet sdk +# # download and extract the dotnet sdk - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") +# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") +# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) +# # clone the repository and navigate to the solution directory +# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - # build the solution using the base version +# # build the solution using the base version - msbuild_command = "msbuild OrchardCore.sln" - versions = ['base'] - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild OrchardCore.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print('-----ORLEANS WINDOWS RESULT----') - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") +# msbuild_command = "msbuild OrchardCore.sln" +# versions = ['base'] +# for version in versions: +# # sub_dir = "/sdk" if version == 'daily' else '' +# exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") +# run_build_to_restore_packages(exec_path) +# simple_command = "msbuild OrchardCore.sln" +# command = f"{exec_path} {simple_command}" +# elapsed_time = measure_execution_time(command) +# print('-----ORLEANS WINDOWS RESULT----') +# print( +# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index fef36b9..efc72dc 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -5,9 +5,6 @@ """ import subprocess -# import time -# import os -# import urllib.request EXTRACT_PATH = "sdk" DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" @@ -22,111 +19,6 @@ DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" -# def create_extract_destinations(): -# """ Create the extract destination directories if they do not exist""" -# if not os.path.exists(EXTRACT_PATH): -# os.mkdir(EXTRACT_PATH) -# os.chdir(EXTRACT_PATH) -# if not os.path.exists("base"): -# os.mkdir("base") -# if not os.path.exists("daily"): -# os.mkdir("daily") - - -# def download_file(url, filename): -# """ Download file from url and save it to filename""" -# with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: -# data = response.read() -# out_file.write(data) - - -# def download_and_extract_dotnet_sdk(version_url, extract_path): -# """ Download and extract the dotnet sdk""" - -# tar_gz_file = "dotnet-sdk.tar.gz" -# download_file(version_url, tar_gz_file) - -# # Extract the tar.gz file -# # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" -# subprocess.run(["tar", "-xzf", tar_gz_file, -# "-C", extract_path], check=True) - - -# def run_build_to_restore_packages(dotnet_executable): -# """_summary_ - -# Args: -# dotnet_executable (_type_): _description_ -# """ -# print('-----🟠 _restoting packages_ 🟠-----') -# subprocess.run([dotnet_executable, 'restore'], check=True) -# subprocess.run([dotnet_executable, 'build'], check=True) - - -# def measure_execution_time(command): -# """measure_execution_time runs build command and measure its execution time""" - -# # Record start time -# start_time = time.time() - -# # Run the command -# subprocess.call(command, shell=True) - -# # Calculate elapsed time -# end_time = time.time() -# elapsed_time = end_time - start_time - -# return elapsed_time - - -# def clone_repository(repo_url, repo_path): -# """_summary_ - -# Args: -# repo_url (String): url of the repository to be cloned -# repo_path (String): path containing test code -# """ -# # Clone the repository containing the solution -# os.chdir('..') -# subprocess.run(['git', 'clone', repo_url], check=True) -# os.chdir(TEST_REPO_NAME) -# os.chdir(TEST_SOLUTION_DIR) -# subprocess.run(['ls'], check=True) - - -# def main(): -# """_summary_ -# main() - -# """ - -# # create the extract destination directories if they do not exist -# create_extract_destinations() - -# # download and extract the dotnet sdk - -# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") -# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - -# # clone the repository and navigate to the solution directory -# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - -# # build the solution using the base version - -# msbuild_command = 'msbuild Orleans.sln' -# versions = ['base'] -# for version in versions: -# # sub_dir = "/sdk" if version == 'daily' else '' -# exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") -# run_build_to_restore_packages(exec_path) -# simple_command = "msbuild Orleans.sln" -# command = f"{exec_path} {simple_command}" -# elapsed_time = measure_execution_time(command) -# print('-----🟠 ORLEANS LINUX RESUL🟠-----') -# print( -# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] From 60319f91214d2232413995673cdaca8a0eb0a210 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 04:33:56 +0100 Subject: [PATCH 098/115] ci: modularized all benchmarks --- ...packages_centralised_ngbv_removed_linux.py | 141 +-------------- ...ckages_centralised_ngbv_removed_windows.py | 138 +------------- scripts/test_cases/orchardcore_linux.py | 170 +----------------- scripts/test_cases/orchardcore_windows.py | 104 ----------- scripts/test_cases/orleans_windows.py | 117 +----------- 5 files changed, 34 insertions(+), 636 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 73a90e2..82459cc 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -5,9 +5,6 @@ """ import subprocess -import time -import os -import urllib.request EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" @@ -17,134 +14,14 @@ TEST_REPO_NAME = "TestSolutions" TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" TEST_SOLUTION_DIR = "solution" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: - data = response.read() - out_file.write(data) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - - tar_gz_file = "dotnet-sdk.tar.gz" - download_file(version_url, tar_gz_file) - - # Extract the tar.gz file - # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.run(["tar", "-xzf", tar_gz_file, - "-C", extract_path], check=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - print('-----_restoting packages_-----') - subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(repo_path) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['ls'], check=True) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = """ - msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ - /p:AndroidPreserveUserData=True \ - /p:AndroidUseManagedDesignTimeResourceGenerator=True \ - /p:BuildingByReSharper=False \ - /p:BuildingProject=False \ - /p:BuildProjectReferences=False \ - /p:ContinueOnError=ErrorAndContinue \ - /p:DesignTimeBuild=True \ - /p:DesignTimeSilentResolution=False \ - /p:JetBrainsDesignTimeBuild=True \ - /p:ProvideCommandLineArgs=True \ - /p:ResolveAssemblyReferencesSilent=False \ - /p:SkipCompilerExecution=True \ - /p:TargetFramework=net5.0 \ - /v:n \ - /m:1 \ - /bl \ - /flp:v=n;PerformanceSummary \ - /clp:Summary \ - /clp:PerformanceSummary > log.txt - """ - versions = ['base'] - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath( - f"./../../../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - +SDK_VERSION = "6.0.300" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "True" +SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index b32d1d2..6971ec3 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -5,9 +5,6 @@ """ import subprocess -import time -import os - # ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" WORKING_DIR = "msbuild-performance-test" @@ -23,131 +20,14 @@ TEST_REPO_NAME = "TestSolutions" TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" TEST_SOLUTION_DIR = "solution" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True, shell=True) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - zip_file = "dotnet-sdk.zip" - download_file(version_url, zip_file) - - # Extract the zip file - subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True, shell=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - subprocess.run([dotnet_executable, 'restore'], check=True) - # subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # run `build` to restore packages - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(repo_path) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['dir'], check=True) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = """ - msbuild /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile ^ - /p:AndroidPreserveUserData=True ^ - /p:AndroidUseManagedDesignTimeResourceGenerator=True ^ - /p:BuildingByReSharper=True ^ - /p:BuildingProject=False ^ - /p:BuildProjectReferences=False ^ - /p:ContinueOnError=ErrorAndContinue ^ - /p:DesignTimeBuild=True ^ - /p:DesignTimeSilentResolution=False ^ - /p:JetBrainsDesignTimeBuild=True ^ - /p:ProvideCommandLineArgs=True ^ - /p:ResolveAssemblyReferencesSilent=False ^ - /p:SkipCompilerExecution=True ^ - /p:TargetFramework=net5.0 ^ - /v:n ^ - /m:1 ^ - /bl ^ - /flp:v=n;PerformanceSummary ^ - /clp:Summary ^ - /clp:PerformanceSummary > log.txt - """ - versions = ['base'] - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath( - f"./../../../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - +SDK_VERSION = "6.0.316" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "True" +SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index a77e954..e465085 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -5,11 +5,6 @@ """ import subprocess -import time -import os -import csv -import urllib.request -from datetime import datetime EXTRACT_PATH = "sdk" DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" @@ -20,163 +15,12 @@ TEST_SOLUTION_DIR = "./" SDK_VERSION = "7.0.100" SDK_DAILY_VERSION = "8.0.1xx" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: - data = response.read() - out_file.write(data) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - - tar_gz_file = "dotnet-sdk.tar.gz" - download_file(version_url, tar_gz_file) - - # Extract the tar.gz file - # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.run(["tar", "-xzf", tar_gz_file, - "-C", extract_path], check=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - print('-----_restoting packages_-----') - subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['ls'], check=True) - - -def camel_casify_solution_name(string): - """This method converts a string to camel case""" - parts = string.split('_') - camel_case_parts = [part.capitalize() for part in parts[:-1]] - return ''.join(camel_case_parts) - - -def print_csv_content(file_path): - """Prints content of csv file for debugging purposes""" - with open(file_path, 'r', encoding='utf-8') as csv_file: - reader = csv.reader(csv_file) - for row in reader: - print(row) - - -def save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration): - """Saves bencharmk results to a csv file - - Args: - file_path (_type_): _description_ - """ - # Get the benchmark results and create a row data - # row_data = [version,base version,scenario,test case,timestamp,duration,base duration,relative duration] - version = SDK_DAILY_VERSION - base_version = SDK_VERSION - timestamp = datetime.utcnow().isoformat(timespec='seconds') - scenario = 'cold' - test_case = 'OrchardCoreLinux' - duration = benchmark_duration - base_duration = benchmark_base_duration - relative_duration = abs(base_duration - duration) - benchmark_results = [version, base_version, scenario, test_case, - timestamp, duration, base_duration, relative_duration] - - with open(file_path, 'a', newline='', encoding='utf-8') as csv_file: - writer = csv.writer(csv_file) - writer.writerow(benchmark_results) - - print_csv_content(file_path) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = 'msbuild OrchardCore.sln' - versions = ['base'] - duration_in_seconds = 0 - base_duration_in_seconds = 0 - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild OrchardCore.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - if version == 'base': - base_duration_in_seconds = elapsed_time - else: - duration_in_seconds = elapsed_time - print('-----🟠 ORCHARDCORE LINUX RESULT🟠-----') - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - # save benchmark results to a csv file - save_benchmark_results('./../../../data/msbuild.csv', - duration_in_seconds, base_duration_in_seconds) - +SOLUTION_FILE = "OrchardCore.sln" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index 3046288..d375b90 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -25,110 +25,6 @@ DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" - -# def create_extract_destinations(): -# """ Create the extract destination directories if they do not exist""" -# if not os.path.exists(EXTRACT_PATH): -# os.mkdir(EXTRACT_PATH) -# os.chdir(EXTRACT_PATH) -# if not os.path.exists("base"): -# os.mkdir("base") -# if not os.path.exists("daily"): -# os.mkdir("daily") - - -# def download_file(url, filename): -# """ Download file from url and save it to filename""" -# subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', -# url, '-OutFile', filename], check=True, shell=True) - - -# def download_and_extract_dotnet_sdk(version_url, extract_path): -# """ Download and extract the dotnet sdk""" -# zip_file = "dotnet-sdk.zip" -# download_file(version_url, zip_file) - -# # Extract the zip file -# subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, -# "-DestinationPath", extract_path], check=True, shell=True) - - -# def run_build_to_restore_packages(dotnet_executable): -# """_summary_ - -# Args: -# dotnet_executable (_type_): _description_ -# """ -# print('-----_restoting packages_-----') -# subprocess.run([dotnet_executable, 'restore'], check=True) -# # subprocess.run([dotnet_executable, 'build'], check=True) - - -# def measure_execution_time(command): -# """measure_execution_time runs build command and measure its execution time""" - -# # run `build` to restore packages -# # Record start time -# start_time = time.time() - -# # Run the command -# subprocess.call(command, shell=True) - -# # Calculate elapsed time -# end_time = time.time() -# elapsed_time = end_time - start_time - -# return elapsed_time - - -# def clone_repository(repo_url, repo_path): -# """_summary_ - -# Args: -# repo_url (String): url of the repository to be cloned -# repo_path (String): path containing test code -# """ -# # Clone the repository containing the solution -# os.chdir('..') -# subprocess.run(['git', 'clone', repo_url], check=True) -# os.chdir(TEST_REPO_NAME) -# os.chdir(TEST_SOLUTION_DIR) -# subprocess.run(['dir'], check=True) - - -# def main(): -# """_summary_ -# main() - -# """ - -# # create the extract destination directories if they do not exist -# create_extract_destinations() - -# # download and extract the dotnet sdk - -# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") -# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") - -# # clone the repository and navigate to the solution directory -# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - -# # build the solution using the base version - -# msbuild_command = "msbuild OrchardCore.sln" -# versions = ['base'] -# for version in versions: -# # sub_dir = "/sdk" if version == 'daily' else '' -# exec_path = os.path.abspath(f"./../sdk/{version}/dotnet.exe") -# run_build_to_restore_packages(exec_path) -# simple_command = "msbuild OrchardCore.sln" -# command = f"{exec_path} {simple_command}" -# elapsed_time = measure_execution_time(command) -# print('-----ORLEANS WINDOWS RESULT----') -# print( -# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index fdb4fe3..990fbd7 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -5,9 +5,6 @@ """ import subprocess -import time -import os - # ___ EXTRACTION CONSTANTS ___ # EXTRACT_PATH = "sdk" @@ -22,110 +19,14 @@ TEST_REPO_NAME = "orleans" TEST_SOLUTION_CASE = "orleans" TEST_SOLUTION_DIR = "./" - - -def create_extract_destinations(): - """ Create the extract destination directories if they do not exist""" - if not os.path.exists(EXTRACT_PATH): - os.mkdir(EXTRACT_PATH) - os.chdir(EXTRACT_PATH) - if not os.path.exists("base"): - os.mkdir("base") - if not os.path.exists("daily"): - os.mkdir("daily") - - -def download_file(url, filename): - """ Download file from url and save it to filename""" - subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True, shell=True) - - -def download_and_extract_dotnet_sdk(version_url, extract_path): - """ Download and extract the dotnet sdk""" - zip_file = "dotnet-sdk.zip" - download_file(version_url, zip_file) - - # Extract the zip file - subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True, shell=True) - - -def run_build_to_restore_packages(dotnet_executable): - """_summary_ - - Args: - dotnet_executable (_type_): _description_ - """ - print('-----_restoting packages_-----') - subprocess.run([dotnet_executable, 'restore'], check=True) - subprocess.run([dotnet_executable, 'build'], check=True) - - -def measure_execution_time(command): - """measure_execution_time runs build command and measure its execution time""" - - # run `build` to restore packages - # Record start time - start_time = time.time() - - # Run the command - subprocess.call(command, shell=True) - - # Calculate elapsed time - end_time = time.time() - elapsed_time = end_time - start_time - - return elapsed_time - - -def clone_repository(repo_url, repo_path): - """_summary_ - - Args: - repo_url (String): url of the repository to be cloned - repo_path (String): path containing test code - """ - # Clone the repository containing the solution - os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) - os.chdir(TEST_REPO_NAME) - os.chdir(TEST_SOLUTION_DIR) - subprocess.run(['dir'], check=True) - - -def main(): - """_summary_ - main() - - """ - - # create the extract destination directories if they do not exist - create_extract_destinations() - - # download and extract the dotnet sdk - - download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_WINDOWS, "base") - download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_WINDOWS, "daily") - - # clone the repository and navigate to the solution directory - clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - - # build the solution using the base version - - msbuild_command = "msbuild Orleans.sln" - versions = ['base'] - for version in versions: - # sub_dir = "/sdk" if version == 'daily' else '' - exec_path = os.path.abspath(f"./../sdk/{version}/dotnet") - run_build_to_restore_packages(exec_path) - simple_command = "msbuild Orleans.sln" - command = f"{exec_path} {simple_command}" - elapsed_time = measure_execution_time(command) - print('-----ORLEANS WINDOWS RESULT-----') - print( - f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - +SDK_VERSION = "7.0.100" +SOLUTION_FILE = "Orleans.sln" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" if __name__ == "__main__": - main() + commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) From 6be33ddaebdf589021df876125fb42192e3c8e31 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 04:47:54 +0100 Subject: [PATCH 099/115] fix nested cases dirs --- scripts/benchmark_runner_linux.py | 6 +- scripts/benchmark_runner_windows.py | 8 +- ...packages_centralised_ngbv_removed_linux.py | 136 ++++++++++++++++++ 3 files changed, 145 insertions(+), 5 deletions(-) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index bfcc2ed..1bf5637 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -65,7 +65,7 @@ def measure_execution_time(command): return elapsed_time -def clone_repository(repo_url, test_repo_name, test_solution_dir): +def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir): """_summary_ Args: @@ -76,6 +76,8 @@ def clone_repository(repo_url, test_repo_name, test_solution_dir): os.chdir('..') subprocess.run(['git', 'clone', repo_url], check=True) os.chdir(test_repo_name) + if nested: + os.chdir(test_repo_path) os.chdir(test_solution_dir) subprocess.run(['ls'], check=True) @@ -109,7 +111,7 @@ def run_benchamrk(args): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, - TEST_REPO_NAME, TEST_SOLUTION_DIR) + TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR) # build the solution using the base version diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index f37b368..529465e 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -61,7 +61,7 @@ def measure_execution_time(command): return elapsed_time -def clone_repository(repo_url, test_repo_name, test_solution_dir): +def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir): """_summary_ Args: @@ -72,8 +72,10 @@ def clone_repository(repo_url, test_repo_name, test_solution_dir): os.chdir('..') subprocess.run(['git', 'clone', repo_url], check=True) os.chdir(test_repo_name) + if nested: + os.chdir(test_repo_path) os.chdir(test_solution_dir) - subprocess.run(['ls'], check=True) + subprocess.run(['dir'], check=True) def run_benchamrk(args): @@ -105,7 +107,7 @@ def run_benchamrk(args): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, - TEST_REPO_NAME, TEST_SOLUTION_DIR) + TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR) # build the solution using the base version diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 82459cc..fdddac2 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -19,6 +19,142 @@ DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" +SDK_VERSION = "6.0.300" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "True" +SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" + +# def create_extract_destinations(): +# """ Create the extract destination directories if they do not exist""" +# if not os.path.exists(EXTRACT_PATH): +# os.mkdir(EXTRACT_PATH) +# os.chdir(EXTRACT_PATH) +# if not os.path.exists("base"): +# os.mkdir("base") +# if not os.path.exists("daily"): +# os.mkdir("daily") + + +# def download_file(url, filename): +# """ Download file from url and save it to filename""" +# with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: +# data = response.read() +# out_file.write(data) + + +# def download_and_extract_dotnet_sdk(version_url, extract_path): +# """ Download and extract the dotnet sdk""" + +# tar_gz_file = "dotnet-sdk.tar.gz" +# download_file(version_url, tar_gz_file) + +# # Extract the tar.gz file +# # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" +# subprocess.run(["tar", "-xzf", tar_gz_file, +# "-C", extract_path], check=True) + + +# def run_build_to_restore_packages(dotnet_executable): +# """_summary_ + +# Args: +# dotnet_executable (_type_): _description_ +# """ +# print('-----_restoting packages_-----') +# subprocess.run([dotnet_executable, 'restore'], check=True) +# subprocess.run([dotnet_executable, 'build'], check=True) + + +# def measure_execution_time(command): +# """measure_execution_time runs build command and measure its execution time""" + +# # Record start time +# start_time = time.time() + +# # Run the command +# subprocess.call(command, shell=True) + +# # Calculate elapsed time +# end_time = time.time() +# elapsed_time = end_time - start_time + +# return elapsed_time + + +# def clone_repository(repo_url, repo_path): +# """_summary_ + +# Args: +# repo_url (String): url of the repository to be cloned +# repo_path (String): path containing test code +# """ +# # Clone the repository containing the solution +# os.chdir('..') +# subprocess.run(['git', 'clone', repo_url], check=True) +# os.chdir(TEST_REPO_NAME) +# os.chdir(repo_path) +# os.chdir(TEST_SOLUTION_DIR) +# subprocess.run(['ls'], check=True) + + +# def main(): +# """_summary_ +# main() + +# """ + +# # create the extract destination directories if they do not exist +# create_extract_destinations() + +# # download and extract the dotnet sdk + +# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") +# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") + +# # clone the repository and navigate to the solution directory +# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) + +# # build the solution using the base version + +# msbuild_command = """ +# msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ +# /p:AndroidPreserveUserData=True \ +# /p:AndroidUseManagedDesignTimeResourceGenerator=True \ +# /p:BuildingByReSharper=False \ +# /p:BuildingProject=False \ +# /p:BuildProjectReferences=False \ +# /p:ContinueOnError=ErrorAndContinue \ +# /p:DesignTimeBuild=True \ +# /p:DesignTimeSilentResolution=False \ +# /p:JetBrainsDesignTimeBuild=True \ +# /p:ProvideCommandLineArgs=True \ +# /p:ResolveAssemblyReferencesSilent=False \ +# /p:SkipCompilerExecution=True \ +# /p:TargetFramework=net5.0 \ +# /v:n \ +# /m:1 \ +# /bl \ +# /flp:v=n;PerformanceSummary \ +# /clp:Summary \ +# /clp:PerformanceSummary > log.txt +# """ +# versions = ['base'] +# for version in versions: +# # sub_dir = "/sdk" if version == 'daily' else '' +# exec_path = os.path.abspath( +# f"./../../../sdk/{version}/dotnet") +# run_build_to_restore_packages(exec_path) +# simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" +# command = f"{exec_path} {simple_command}" +# elapsed_time = measure_execution_time(command) +# print( +# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") + + +# if __name__ == "__main__": +# main() + if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", From 4ed61b6cbedfcb4b21a0ea2acf73ffb6526b8ef7 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 04:53:45 +0100 Subject: [PATCH 100/115] ci: fix dotnet exec in windows nested runner --- scripts/benchmark_runner_windows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 529465e..3c4e57d 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -119,7 +119,7 @@ def run_benchamrk(args): for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' # subdirs = './../../../sdk' if NESTED else './../sdk' - subdirs = './../../sdk' if NESTED else './../sdk' + subdirs = './../../../sdk' if NESTED else './../sdk' exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = f"msbuild {TEST_SOLUTION_FILE}" From 494505630accfb921ef0aea1c2dbb9b6a14cd6c1 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 04:59:05 +0100 Subject: [PATCH 101/115] ci: fix dotnet exec path in linux nested runner --- scripts/benchmark_runner_linux.py | 4 ++-- scripts/benchmark_runner_windows.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 1bf5637..28e06d3 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -123,7 +123,7 @@ def run_benchamrk(args): for version in versions: # sub_dir = "/sdk" if version == 'daily' else '' # subdirs = './../../../sdk' if NESTED else './../sdk' - subdirs = './../../sdk' if NESTED else './../sdk' + subdirs = './../../../sdk' if NESTED else './../sdk' exec_path = os.path.abspath(f"{subdirs}/{version}/dotnet") run_build_to_restore_packages(exec_path) simple_command = f"msbuild {TEST_SOLUTION_FILE}" @@ -133,7 +133,7 @@ def run_benchamrk(args): base_duration_in_seconds = elapsed_time else: duration_in_seconds = elapsed_time - print('-----🟠 ORCHARDCORE LINUX RESULT🟠-----') + print('-----LINUX BENCHMARK RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 3c4e57d..3aa116e 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -129,6 +129,7 @@ def run_benchamrk(args): base_duration_in_seconds = elapsed_time else: duration_in_seconds = elapsed_time + print('-----WINDOWS BENCHMARK RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") From 445a99297151a6977e92241eb9f287cf4487e1ef Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 05:04:00 +0100 Subject: [PATCH 102/115] format: rm trailing spaces --- scripts/benchmark_runner_windows.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 3aa116e..3c4e57d 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -129,7 +129,6 @@ def run_benchamrk(args): base_duration_in_seconds = elapsed_time else: duration_in_seconds = elapsed_time - print('-----WINDOWS BENCHMARK RESULT-----') print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") From 33e6ca3ed2f2e82dfef5972202ccb15d24f920ad Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 05:18:05 +0100 Subject: [PATCH 103/115] update db file path --- ..._app_with_private_packages_centralised_ngbv_removed_linux.py | 2 +- ...pp_with_private_packages_centralised_ngbv_removed_windows.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index fdddac2..6f81544 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -21,7 +21,7 @@ SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" SDK_VERSION = "6.0.300" SDK_DAILY_VERSION = "8.0.1xx" -DATABASE_FILE = "./../../../data/msbuild.csv" +DATABASE_FILE = "./../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 6971ec3..3395fa2 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -22,7 +22,7 @@ TEST_SOLUTION_DIR = "solution" SDK_VERSION = "6.0.316" SDK_DAILY_VERSION = "8.0.1xx" -DATABASE_FILE = "./../../../data/msbuild.csv" +DATABASE_FILE = "./../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" From 0a05bcccb8c93d47a2974c58a1d6204651209833 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 12:53:06 +0100 Subject: [PATCH 104/115] update zip extraction logic --- scripts/benchmark_runner_windows.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 3c4e57d..58a34b6 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -1,9 +1,10 @@ """Run a benchmark and return the results.""" import argparse - +import zipfile import subprocess import time import os +import urllib.request import benchmark_utils as utils @@ -18,10 +19,22 @@ def create_extract_destinations(path): os.mkdir("daily") +# def download_file(url, filename): +# """ Download file from url and save it to filename""" +# subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', +# url, '-OutFile', filename], check=True, shell=True) + def download_file(url, filename): """ Download file from url and save it to filename""" - subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', - url, '-OutFile', filename], check=True, shell=True) + with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: + data = response.read() + out_file.write(data) + + +def extract_zip(zip_file, extract_path): + """Extract a zip file to the specified destination path.""" + with zipfile.ZipFile(zip_file, 'r') as zip_ref: + zip_ref.extractall(extract_path) def download_and_extract_dotnet_sdk(version_url, extract_path): @@ -30,8 +43,9 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): download_file(version_url, zip_file) # Extract the zip file - subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, - "-DestinationPath", extract_path], check=True, shell=True) + extract_zip(zip_file, extract_path) + # subprocess.run(["powershell", "Expand-Archive", "-Path", zip_file, + # "-DestinationPath", extract_path], check=True, shell=True) def run_build_to_restore_packages(dotnet_executable): From 7f4f092047ddc51027e6c077b6f34ee19a7b951c Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 13:09:42 +0100 Subject: [PATCH 105/115] ci: add nuget solution --- .github/workflows/benchmark_msbuild.yaml | 2 ++ scripts/test_cases/nuget_linux.py | 28 +++++++++++++++++++++ scripts/test_cases/nuget_windows.py | 32 ++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 scripts/test_cases/nuget_linux.py create mode 100644 scripts/test_cases/nuget_windows.py diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 7f919ee..4b55a08 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -16,6 +16,7 @@ jobs: - large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows - orchardcore_windows + - nuget_windows fail-fast: false runs-on: windows-latest steps: @@ -44,6 +45,7 @@ jobs: - large_app_with_private_packages_centralised_ngbv_removed_linux - orleans_linux - orchardcore_linux + - nuget_linux fail-fast: false runs-on: ubuntu-latest steps: diff --git a/scripts/test_cases/nuget_linux.py b/scripts/test_cases/nuget_linux.py new file mode 100644 index 0000000..2dc4e3f --- /dev/null +++ b/scripts/test_cases/nuget_linux.py @@ -0,0 +1,28 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild +Returns: + None: ..... +""" + +import subprocess + +EXTRACT_PATH = "sdk" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" +DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" + + +TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" +TEST_REPO_NAME = "NuGet.Client" +TEST_SOLUTION_CASE = "NuGet.Client" +TEST_SOLUTION_DIR = "./" +SDK_VERSION = "7.0.100" +SOLUTION_FILE = "NuGet.sln" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" + +if __name__ == "__main__": + commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/nuget_windows.py b/scripts/test_cases/nuget_windows.py new file mode 100644 index 0000000..70471f6 --- /dev/null +++ b/scripts/test_cases/nuget_windows.py @@ -0,0 +1,32 @@ +"""_summary_ +This script basically runs benchmark test with [ORLEANS] solution for msbuild on windows +Returns: + None: ..... +""" + +import subprocess +# ___ EXTRACTION CONSTANTS ___ # +EXTRACT_PATH = "sdk" + +# _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" + +DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" + +TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" + +TEST_REPO_NAME = "NuGet.Client" +TEST_SOLUTION_CASE = "NuGet.Client" +TEST_SOLUTION_DIR = "./" +SDK_VERSION = "7.0.100" +SOLUTION_FILE = "NuGet.sln" +SDK_DAILY_VERSION = "8.0.1xx" +DATABASE_FILE = "./../../../data/msbuild.csv" +NESTED = "False" + +if __name__ == "__main__": + commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + + subprocess.run(commands_chain, check=True) From b989845290e2b6fc37a928422d6b8b974be6c44c Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 13:15:12 +0100 Subject: [PATCH 106/115] update csv file path --- ...packages_centralised_ngbv_removed_linux.py | 137 +----------------- ...ckages_centralised_ngbv_removed_windows.py | 2 +- 2 files changed, 2 insertions(+), 137 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 6f81544..df35629 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -16,144 +16,9 @@ TEST_SOLUTION_DIR = "solution" SDK_VERSION = "6.0.300" SDK_DAILY_VERSION = "8.0.1xx" -DATABASE_FILE = "./../../../data/msbuild.csv" +DATABASE_FILE = "./../../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" -SDK_VERSION = "6.0.300" -SDK_DAILY_VERSION = "8.0.1xx" -DATABASE_FILE = "./../../../../data/msbuild.csv" -NESTED = "True" -SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" - -# def create_extract_destinations(): -# """ Create the extract destination directories if they do not exist""" -# if not os.path.exists(EXTRACT_PATH): -# os.mkdir(EXTRACT_PATH) -# os.chdir(EXTRACT_PATH) -# if not os.path.exists("base"): -# os.mkdir("base") -# if not os.path.exists("daily"): -# os.mkdir("daily") - - -# def download_file(url, filename): -# """ Download file from url and save it to filename""" -# with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: -# data = response.read() -# out_file.write(data) - - -# def download_and_extract_dotnet_sdk(version_url, extract_path): -# """ Download and extract the dotnet sdk""" - -# tar_gz_file = "dotnet-sdk.tar.gz" -# download_file(version_url, tar_gz_file) - -# # Extract the tar.gz file -# # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" -# subprocess.run(["tar", "-xzf", tar_gz_file, -# "-C", extract_path], check=True) - - -# def run_build_to_restore_packages(dotnet_executable): -# """_summary_ - -# Args: -# dotnet_executable (_type_): _description_ -# """ -# print('-----_restoting packages_-----') -# subprocess.run([dotnet_executable, 'restore'], check=True) -# subprocess.run([dotnet_executable, 'build'], check=True) - - -# def measure_execution_time(command): -# """measure_execution_time runs build command and measure its execution time""" - -# # Record start time -# start_time = time.time() - -# # Run the command -# subprocess.call(command, shell=True) - -# # Calculate elapsed time -# end_time = time.time() -# elapsed_time = end_time - start_time - -# return elapsed_time - - -# def clone_repository(repo_url, repo_path): -# """_summary_ - -# Args: -# repo_url (String): url of the repository to be cloned -# repo_path (String): path containing test code -# """ -# # Clone the repository containing the solution -# os.chdir('..') -# subprocess.run(['git', 'clone', repo_url], check=True) -# os.chdir(TEST_REPO_NAME) -# os.chdir(repo_path) -# os.chdir(TEST_SOLUTION_DIR) -# subprocess.run(['ls'], check=True) - - -# def main(): -# """_summary_ -# main() - -# """ - -# # create the extract destination directories if they do not exist -# create_extract_destinations() - -# # download and extract the dotnet sdk - -# download_and_extract_dotnet_sdk(DOTNET_BASE_VERSION_URL_LINUX, "base") -# download_and_extract_dotnet_sdk(DOTNET_DAILY_VERSION_URL_LINUX, "daily") - -# # clone the repository and navigate to the solution directory -# clone_repository(TEST_SOLUTION_REPO_URL, TEST_SOLUTION_CASE) - -# # build the solution using the base version - -# msbuild_command = """ -# msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln /t:GetSuggestedWorkloads;_CheckForInvalidConfigurationAndPlatform;ResolveReferences;ResolveProjectReferences;ResolveAssemblyReferences;ResolveComReferences;ResolveNativeReferences;ResolveSdkReferences;ResolveFrameworkReferences;ResolvePackageDependenciesDesignTime;Compile;CoreCompile \ -# /p:AndroidPreserveUserData=True \ -# /p:AndroidUseManagedDesignTimeResourceGenerator=True \ -# /p:BuildingByReSharper=False \ -# /p:BuildingProject=False \ -# /p:BuildProjectReferences=False \ -# /p:ContinueOnError=ErrorAndContinue \ -# /p:DesignTimeBuild=True \ -# /p:DesignTimeSilentResolution=False \ -# /p:JetBrainsDesignTimeBuild=True \ -# /p:ProvideCommandLineArgs=True \ -# /p:ResolveAssemblyReferencesSilent=False \ -# /p:SkipCompilerExecution=True \ -# /p:TargetFramework=net5.0 \ -# /v:n \ -# /m:1 \ -# /bl \ -# /flp:v=n;PerformanceSummary \ -# /clp:Summary \ -# /clp:PerformanceSummary > log.txt -# """ -# versions = ['base'] -# for version in versions: -# # sub_dir = "/sdk" if version == 'daily' else '' -# exec_path = os.path.abspath( -# f"./../../../sdk/{version}/dotnet") -# run_build_to_restore_packages(exec_path) -# simple_command = "msbuild LargeAppWithPrivatePackagesCentralisedNGBVRemoved.sln" -# command = f"{exec_path} {simple_command}" -# elapsed_time = measure_execution_time(command) -# print( -# f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - - -# if __name__ == "__main__": -# main() if __name__ == "__main__": diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 3395fa2..3535894 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -22,7 +22,7 @@ TEST_SOLUTION_DIR = "solution" SDK_VERSION = "6.0.316" SDK_DAILY_VERSION = "8.0.1xx" -DATABASE_FILE = "./../../../../data/msbuild.csv" +DATABASE_FILE = "./../../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" From d96b4786118668c98164eef2fb5448cb26ab88ef Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 13:23:29 +0100 Subject: [PATCH 107/115] change sdk version for nuget solution --- scripts/test_cases/nuget_linux.py | 5 ++--- scripts/test_cases/nuget_windows.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/test_cases/nuget_linux.py b/scripts/test_cases/nuget_linux.py index 2dc4e3f..9c70826 100644 --- a/scripts/test_cases/nuget_linux.py +++ b/scripts/test_cases/nuget_linux.py @@ -7,15 +7,14 @@ import subprocess EXTRACT_PATH = "sdk" -DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/253e5af8-41aa-48c6-86f1-39a51b44afdc/5bb2cb9380c5b1a7f0153e0a2775727b/dotnet-sdk-7.0.100-linux-x64.tar.gz" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" - TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" TEST_REPO_NAME = "NuGet.Client" TEST_SOLUTION_CASE = "NuGet.Client" TEST_SOLUTION_DIR = "./" -SDK_VERSION = "7.0.100" +SDK_VERSION = "6.0.300" SOLUTION_FILE = "NuGet.sln" SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" diff --git a/scripts/test_cases/nuget_windows.py b/scripts/test_cases/nuget_windows.py index 70471f6..e9f2274 100644 --- a/scripts/test_cases/nuget_windows.py +++ b/scripts/test_cases/nuget_windows.py @@ -10,7 +10,7 @@ # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" @@ -19,7 +19,7 @@ TEST_REPO_NAME = "NuGet.Client" TEST_SOLUTION_CASE = "NuGet.Client" TEST_SOLUTION_DIR = "./" -SDK_VERSION = "7.0.100" +SDK_VERSION = "6.0.316" SOLUTION_FILE = "NuGet.sln" SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" From b67fc6503199138a8a6c350d9ae9fdbc8ab4ce29 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 13:36:44 +0100 Subject: [PATCH 108/115] change sdk to v8 in nuget solution --- scripts/test_cases/nuget_linux.py | 4 ++-- scripts/test_cases/nuget_windows.py | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/test_cases/nuget_linux.py b/scripts/test_cases/nuget_linux.py index 9c70826..53d508c 100644 --- a/scripts/test_cases/nuget_linux.py +++ b/scripts/test_cases/nuget_linux.py @@ -7,14 +7,14 @@ import subprocess EXTRACT_PATH = "sdk" -DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" +DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/32f2c846-5581-4638-a428-5891dd76f630/ee8beef066f06c57998058c5af6df222/dotnet-sdk-8.0.100-preview.7.23376.3-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" TEST_REPO_NAME = "NuGet.Client" TEST_SOLUTION_CASE = "NuGet.Client" TEST_SOLUTION_DIR = "./" -SDK_VERSION = "6.0.300" +SDK_VERSION = "8.0.100-preview.7.23376.3" SOLUTION_FILE = "NuGet.sln" SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" diff --git a/scripts/test_cases/nuget_windows.py b/scripts/test_cases/nuget_windows.py index e9f2274..d4cb81d 100644 --- a/scripts/test_cases/nuget_windows.py +++ b/scripts/test_cases/nuget_windows.py @@ -10,8 +10,7 @@ # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/de1f99bb-4d6d-4dfe-9935-d24b1e8bca12/0b449d12398e45c62dce4b497e1b49bb/dotnet-sdk-6.0.316-win-x64.zip" - +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/4ede0897-e03d-4d93-a50d-e06f2e430d9e/b5bd2605ce07ec7163d5b5b05dc2f1e0/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.zip" DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" @@ -19,7 +18,7 @@ TEST_REPO_NAME = "NuGet.Client" TEST_SOLUTION_CASE = "NuGet.Client" TEST_SOLUTION_DIR = "./" -SDK_VERSION = "6.0.316" +SDK_VERSION = "8.0.100-preview.7.23376.3" SOLUTION_FILE = "NuGet.sln" SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" From 001785d1fbb2e190becadfea2ef500f7e64fec3f Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 13:52:42 +0100 Subject: [PATCH 109/115] clone with submodule --- .github/workflows/benchmark_msbuild.yaml | 2 +- scripts/benchmark_runner_linux.py | 2 +- scripts/benchmark_runner_windows.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 4b55a08..40591c4 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -45,7 +45,7 @@ jobs: - large_app_with_private_packages_centralised_ngbv_removed_linux - orleans_linux - orchardcore_linux - - nuget_linux + #- nuget_linux fail-fast: false runs-on: ubuntu-latest steps: diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 28e06d3..de19d97 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -74,7 +74,7 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu """ # Clone the repository containing the solution os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) + subprocess.run(['git', 'clone', '--recursive', repo_url], check=True) os.chdir(test_repo_name) if nested: os.chdir(test_repo_path) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 58a34b6..e72cf9f 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -84,7 +84,7 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu """ # Clone the repository containing the solution os.chdir('..') - subprocess.run(['git', 'clone', repo_url], check=True) + subprocess.run(['git', 'clone', '--recursive', repo_url], check=True) os.chdir(test_repo_name) if nested: os.chdir(test_repo_path) From 8796bd3d4aaa94ec20e638c6e26f0a0ff40deff7 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 14:15:40 +0100 Subject: [PATCH 110/115] change extract tar file logic --- scripts/benchmark_runner_linux.py | 27 +++++++++++++++++---------- scripts/benchmark_runner_windows.py | 21 +++++++-------------- scripts/test_cases/nuget_windows.py | 5 ++++- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index de19d97..0e83390 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -1,6 +1,6 @@ """Run a benchmark and return the results.""" import argparse - +import tarfile import subprocess import time import os @@ -26,6 +26,12 @@ def download_file(url, filename): out_file.write(data) +def extract_tar_gz(file_path, extract_path): + """Extract a zip file to the specified destination path.""" + with tarfile.open(file_path, 'r:gz') as tar: + tar.extractall(path=extract_path) + + def download_and_extract_dotnet_sdk(version_url, extract_path): """ Download and extract the dotnet sdk""" @@ -33,9 +39,10 @@ def download_and_extract_dotnet_sdk(version_url, extract_path): download_file(version_url, tar_gz_file) # Extract the tar.gz file + extract_tar_gz(tar_gz_file, extract_path) # extract_command = f"tar -xzf {tar_gz_file} -C {extract_path}" - subprocess.run(["tar", "-xzf", tar_gz_file, - "-C", extract_path], check=True) + # subprocess.run(["tar", "-xzf", tar_gz_file, + # "-C", extract_path], check=True) def run_build_to_restore_packages(dotnet_executable): @@ -137,11 +144,13 @@ def run_benchamrk(args): print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - # save benchmark results to a csv file - # save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration, sdk_version, sdk_daily_version, test_case_name, test_scenario): - utils.save_benchmark_results( - DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario - ) + # save benchmark results to a csv file + SDK_VERSION = subprocess.check_output( + [exec_path, '--version'], text=True, stderr=subprocess.STDOUT).strip() + SDK_DAILY_VERSION = "8.0.1xx" + utils.save_benchmark_results( + DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario + ) if __name__ == '__main__': @@ -160,8 +169,6 @@ def run_benchamrk(args): parser.add_argument('--test_repo_name', help='Name of the test repository') parser.add_argument('--test_solution_case', help='Test solution case') parser.add_argument('--test_solution_dir', help='Test solution directory') - parser.add_argument('--sdk_version', help='Version of the SDK') - parser.add_argument('--sdk_daily_version', help='Version of the daily SDK') parser.add_argument('--database_file', help='Path to the database file') parser.add_argument('--solution_file', help='Path to the database file') parser.add_argument('--is_nested_solution', diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index e72cf9f..e97c52a 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -19,11 +19,6 @@ def create_extract_destinations(path): os.mkdir("daily") -# def download_file(url, filename): -# """ Download file from url and save it to filename""" -# subprocess.run(['powershell', 'Invoke-WebRequest', '-Uri', -# url, '-OutFile', filename], check=True, shell=True) - def download_file(url, filename): """ Download file from url and save it to filename""" with urllib.request.urlopen(url) as response, open(filename, 'wb') as out_file: @@ -106,8 +101,6 @@ def run_benchamrk(args): TEST_SOLUTION_CASE = args.test_solution_case TEST_SOLUTION_DIR = args.test_solution_dir TEST_SOLUTION_FILE = args.solution_file - SDK_VERSION = args.sdk_version - SDK_DAILY_VERSION = args.sdk_daily_version DATABASE_FILE = args.database_file NESTED = args.is_nested_solution == "True" @@ -147,11 +140,13 @@ def run_benchamrk(args): print( f"Running '{command}' with {version} version took {elapsed_time}s to execute.") - # save benchmark results to a csv file - # save_benchmark_results(file_path, benchmark_duration, benchmark_base_duration, sdk_version, sdk_daily_version, test_case_name, test_scenario): - utils.save_benchmark_results( - DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario - ) + # save benchmark results to a csv file + SDK_VERSION = subprocess.check_output( + [exec_path, '--version'], text=True, stderr=subprocess.STDOUT).strip() + SDK_DAILY_VERSION = "8.0.1xx" + utils.save_benchmark_results( + DATABASE_FILE, duration_in_seconds, base_duration_in_seconds, SDK_VERSION, SDK_DAILY_VERSION, TEST_SOLUTION_CASE, test_scenario + ) if __name__ == '__main__': @@ -170,8 +165,6 @@ def run_benchamrk(args): parser.add_argument('--test_repo_name', help='Name of the test repository') parser.add_argument('--test_solution_case', help='Test solution case') parser.add_argument('--test_solution_dir', help='Test solution directory') - parser.add_argument('--sdk_version', help='Version of the SDK') - parser.add_argument('--sdk_daily_version', help='Version of the daily SDK') parser.add_argument('--database_file', help='Path to the database file') parser.add_argument('--solution_file', help='Path to the database file') parser.add_argument('--is_nested_solution', diff --git a/scripts/test_cases/nuget_windows.py b/scripts/test_cases/nuget_windows.py index d4cb81d..4a24931 100644 --- a/scripts/test_cases/nuget_windows.py +++ b/scripts/test_cases/nuget_windows.py @@ -10,7 +10,10 @@ # _____ BENCHMARK DEPENDENCIES CONSTANTS _____ # -DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/4ede0897-e03d-4d93-a50d-e06f2e430d9e/b5bd2605ce07ec7163d5b5b05dc2f1e0/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.zip" +# DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/4ede0897-e03d-4d93-a50d-e06f2e430d9e/b5bd2605ce07ec7163d5b5b05dc2f1e0/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.zip" + +DOTNET_BASE_VERSION_URL_WINDOWS = "https://download.visualstudio.microsoft.com/download/pr/1fb808dc-d017-4460-94f8-bf1ac83e6cd8/756b301e714755e411b84684b885a516/dotnet-sdk-7.0.100-win-x64.zip" + DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" TEST_SOLUTION_REPO_URL = "https://github.com/NuGet/NuGet.Client" From ca3c732c73c61bfdb5e49f5faffbe5e26bdc172c Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 14:42:57 +0100 Subject: [PATCH 111/115] rm uncessary args --- scripts/benchmark_runner_linux.py | 18 ++++++++++++------ scripts/benchmark_runner_windows.py | 17 ++++++++++++----- scripts/benchmark_utils.py | 5 +++++ ..._packages_centralised_ngbv_removed_linux.py | 6 +++--- ...ackages_centralised_ngbv_removed_windows.py | 5 +++-- scripts/test_cases/nuget_windows.py | 3 ++- scripts/test_cases/orchardcore_linux.py | 4 ++-- scripts/test_cases/orchardcore_windows.py | 3 ++- scripts/test_cases/orleans_linux.py | 4 ++-- scripts/test_cases/orleans_windows.py | 4 ++-- 10 files changed, 45 insertions(+), 24 deletions(-) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 0e83390..d4c26a6 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -72,7 +72,7 @@ def measure_execution_time(command): return elapsed_time -def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir): +def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir, commit_hash): """_summary_ Args: @@ -82,6 +82,12 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu # Clone the repository containing the solution os.chdir('..') subprocess.run(['git', 'clone', '--recursive', repo_url], check=True) + + # --- checkout to the commit hash if it is not empty ---- # + if commit_hash != '': + os.chdir(test_repo_name) + subprocess.run(['git', 'checkout', commit_hash], check=True) + os.chdir(test_repo_name) if nested: os.chdir(test_repo_path) @@ -99,14 +105,13 @@ def run_benchamrk(args): DOTNET_BASE_VERSION_URL_LINUX = args.dotnet_base_version_url_linux DOTNET_DAILY_VERSION_URL_LINUX = args.dotnet_daily_version_url_linux TEST_SOLUTION_REPO_URL = args.test_solution_repo_url - TEST_REPO_NAME = args.test_repo_name TEST_SOLUTION_CASE = args.test_solution_case TEST_SOLUTION_DIR = args.test_solution_dir TEST_SOLUTION_FILE = args.solution_file - SDK_VERSION = args.sdk_version - SDK_DAILY_VERSION = args.sdk_daily_version + COMMIT_HASH = args.commit_hash DATABASE_FILE = args.database_file NESTED = args.is_nested_solution == "True" + TEST_REPO_NAME = utils.get_repo_name_by_url(TEST_SOLUTION_REPO_URL) # create the extract destination directories if they do not exist create_extract_destinations(EXTRACT_PATH) @@ -118,7 +123,7 @@ def run_benchamrk(args): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, - TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR) + TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR, COMMIT_HASH) # build the solution using the base version @@ -166,13 +171,14 @@ def run_benchamrk(args): help='URL for the daily version of .NET SDK on Linux') parser.add_argument('--test_solution_repo_url', help='URL of the test solution repository') - parser.add_argument('--test_repo_name', help='Name of the test repository') parser.add_argument('--test_solution_case', help='Test solution case') parser.add_argument('--test_solution_dir', help='Test solution directory') parser.add_argument('--database_file', help='Path to the database file') parser.add_argument('--solution_file', help='Path to the database file') parser.add_argument('--is_nested_solution', help='Path to the database file') + parser.add_argument('--commit_hash', default='', + help='Path to the database file') # Parse arguments -> args = parser.parse_args() diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index e97c52a..1897283 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -70,7 +70,7 @@ def measure_execution_time(command): return elapsed_time -def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir): +def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solution_dir, commit_hash): """_summary_ Args: @@ -80,6 +80,12 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu # Clone the repository containing the solution os.chdir('..') subprocess.run(['git', 'clone', '--recursive', repo_url], check=True) + + # --- checkout to the commit hash if it is not empty ---- # + if commit_hash != '': + os.chdir(test_repo_name) + subprocess.run(['git', 'checkout', commit_hash], check=True) + os.chdir(test_repo_name) if nested: os.chdir(test_repo_path) @@ -97,13 +103,13 @@ def run_benchamrk(args): DOTNET_BASE_VERSION_URL_LINUX = args.dotnet_base_version_url_linux DOTNET_DAILY_VERSION_URL_LINUX = args.dotnet_daily_version_url_linux TEST_SOLUTION_REPO_URL = args.test_solution_repo_url - TEST_REPO_NAME = args.test_repo_name TEST_SOLUTION_CASE = args.test_solution_case TEST_SOLUTION_DIR = args.test_solution_dir TEST_SOLUTION_FILE = args.solution_file DATABASE_FILE = args.database_file NESTED = args.is_nested_solution == "True" - + TEST_REPO_NAME = utils.get_repo_name_by_url(TEST_SOLUTION_REPO_URL) + COMMIT_HASH = args.commit_hash # create the extract destination directories if they do not exist create_extract_destinations(EXTRACT_PATH) @@ -114,7 +120,7 @@ def run_benchamrk(args): # clone the repository and navigate to the solution directory clone_repository(TEST_SOLUTION_REPO_URL, - TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR) + TEST_REPO_NAME, TEST_SOLUTION_CASE, NESTED, TEST_SOLUTION_DIR, COMMIT_HASH) # build the solution using the base version @@ -162,13 +168,14 @@ def run_benchamrk(args): help='URL for the daily version of .NET SDK on Linux') parser.add_argument('--test_solution_repo_url', help='URL of the test solution repository') - parser.add_argument('--test_repo_name', help='Name of the test repository') parser.add_argument('--test_solution_case', help='Test solution case') parser.add_argument('--test_solution_dir', help='Test solution directory') parser.add_argument('--database_file', help='Path to the database file') parser.add_argument('--solution_file', help='Path to the database file') parser.add_argument('--is_nested_solution', help='Path to the database file') + parser.add_argument('--commit_hash', default='', + help='Path to the database file') # Parse arguments -> args = parser.parse_args() diff --git a/scripts/benchmark_utils.py b/scripts/benchmark_utils.py index abe4677..2ec155b 100644 --- a/scripts/benchmark_utils.py +++ b/scripts/benchmark_utils.py @@ -42,3 +42,8 @@ def save_benchmark_results(file_path, benchmark_duration, benchmark_base_duratio writer.writerow(benchmark_results) print_csv_content(file_path) + + +def get_repo_name_by_url(repo_url): + """This method returns the name of the repository from its url""" + return repo_url.split('/')[-1] diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index df35629..9d84eb5 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -10,7 +10,7 @@ WORKING_DIR = "msbuild-performance-test" DOTNET_BASE_VERSION_URL_LINUX = "https://download.visualstudio.microsoft.com/download/pr/dc930bff-ef3d-4f6f-8799-6eb60390f5b4/1efee2a8ea0180c94aff8f15eb3af981/dotnet-sdk-6.0.300-linux-x64.tar.gz" DOTNET_DAILY_VERSION_URL_LINUX = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-linux-x64.tar.gz" -TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions" TEST_REPO_NAME = "TestSolutions" TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" TEST_SOLUTION_DIR = "solution" @@ -19,10 +19,10 @@ DATABASE_FILE = "./../../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" - +COMMIT_HASH = "142722bebfe90c4e5c98303fa1598db6a760adae" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 3535894..9aa5a76 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -15,7 +15,7 @@ DOTNET_DAILY_VERSION_URL_WINDOWS = "https://aka.ms/dotnet/8.0.1xx/daily/dotnet-sdk-win-x64.zip" -TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions.git" +TEST_SOLUTION_REPO_URL = "https://github.com/marcin-krystianc/TestSolutions" TEST_REPO_NAME = "TestSolutions" TEST_SOLUTION_CASE = "LargeAppWithPrivatePackagesCentralisedSlim" @@ -25,9 +25,10 @@ DATABASE_FILE = "./../../../../../data/msbuild.csv" NESTED = "True" SOLUTION_FILE = "LargeAppWithPrivatePackagesCentralisedSlim.sln" +COMMIT_HASH = "142722bebfe90c4e5c98303fa1598db6a760adae" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--comit-hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/nuget_windows.py b/scripts/test_cases/nuget_windows.py index 4a24931..4224692 100644 --- a/scripts/test_cases/nuget_windows.py +++ b/scripts/test_cases/nuget_windows.py @@ -26,9 +26,10 @@ SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" +COMMIT_HASH = "d76a117c590f8a91b844013bba7ea9b60e469aa1" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orchardcore_linux.py b/scripts/test_cases/orchardcore_linux.py index e465085..56efcdd 100644 --- a/scripts/test_cases/orchardcore_linux.py +++ b/scripts/test_cases/orchardcore_linux.py @@ -18,9 +18,9 @@ SOLUTION_FILE = "OrchardCore.sln" DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" - +COMMIT_HASH = "" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--commit_hash", COMMIT_HASH, "--solution_file", SOLUTION_FILE, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orchardcore_windows.py b/scripts/test_cases/orchardcore_windows.py index d375b90..820517b 100644 --- a/scripts/test_cases/orchardcore_windows.py +++ b/scripts/test_cases/orchardcore_windows.py @@ -24,9 +24,10 @@ SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" +COMMIT_HASH = "" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orleans_linux.py b/scripts/test_cases/orleans_linux.py index efc72dc..72aee4e 100644 --- a/scripts/test_cases/orleans_linux.py +++ b/scripts/test_cases/orleans_linux.py @@ -18,9 +18,9 @@ SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" - +COMMIT_HASH = "" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/orleans_windows.py b/scripts/test_cases/orleans_windows.py index 990fbd7..411c5bb 100644 --- a/scripts/test_cases/orleans_windows.py +++ b/scripts/test_cases/orleans_windows.py @@ -24,9 +24,9 @@ SDK_DAILY_VERSION = "8.0.1xx" DATABASE_FILE = "./../../../data/msbuild.csv" NESTED = "False" - +COMMIT_HASH = "" if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_repo_name", TEST_REPO_NAME, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", SDK_VERSION, "--sdk_daily_version", SDK_DAILY_VERSION, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) From 780e60b4d45e633bf57a408704dcec24d15083be Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Tue, 5 Sep 2023 14:50:13 +0100 Subject: [PATCH 112/115] fix args formats --- ..._app_with_private_packages_centralised_ngbv_removed_linux.py | 2 +- ...pp_with_private_packages_centralised_ngbv_removed_windows.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py index 9d84eb5..d47d876 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_linux.py @@ -23,6 +23,6 @@ if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_linux.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--sdk_version", "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_LINUX, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_LINUX, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) diff --git a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py index 9aa5a76..66d5f20 100644 --- a/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py +++ b/scripts/test_cases/large_app_with_private_packages_centralised_ngbv_removed_windows.py @@ -29,6 +29,6 @@ if __name__ == "__main__": commands_chain = ["python3", "./../benchmark_runner_windows.py", "--extract_path", EXTRACT_PATH, "--dotnet_base_version_url_linux", - DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--comit-hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] + DOTNET_BASE_VERSION_URL_WINDOWS, "--dotnet_daily_version_url_linux", DOTNET_DAILY_VERSION_URL_WINDOWS, "--test_solution_repo_url", TEST_SOLUTION_REPO_URL, "--test_solution_case", TEST_SOLUTION_CASE, "--test_solution_dir", TEST_SOLUTION_DIR, "--solution_file", SOLUTION_FILE, "--commit_hash", COMMIT_HASH, "--database_file", DATABASE_FILE, "--is_nested_solution", NESTED] subprocess.run(commands_chain, check=True) From 090a910a76f07612de2b9e71f898545abcb9b7e0 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Fri, 8 Sep 2023 13:56:09 +0100 Subject: [PATCH 113/115] rm nuget-win --- .github/workflows/benchmark_msbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 40591c4..3da9658 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -16,7 +16,7 @@ jobs: - large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows - orchardcore_windows - - nuget_windows + #- nuget_windows fail-fast: false runs-on: windows-latest steps: From 49b13324191c632e4b5a40309e4878ed88ce20f1 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Fri, 8 Sep 2023 14:00:00 +0100 Subject: [PATCH 114/115] add submodule initialization --- scripts/benchmark_runner_linux.py | 3 +++ scripts/benchmark_runner_windows.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index d4c26a6..17c1c3c 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -85,7 +85,10 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu # --- checkout to the commit hash if it is not empty ---- # if commit_hash != '': + subprocess.run(['git', 'submodule', 'update', + '--init', '--recursive'], check=True) os.chdir(test_repo_name) + subprocess.run(['git', 'checkout', commit_hash], check=True) os.chdir(test_repo_name) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 1897283..5ea7389 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -83,6 +83,8 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu # --- checkout to the commit hash if it is not empty ---- # if commit_hash != '': + subprocess.run(['git', 'submodule', 'update', + '--init', '--recursive'], check=True) os.chdir(test_repo_name) subprocess.run(['git', 'checkout', commit_hash], check=True) From 489eabbc59daad141e02df6894853a63d5117210 Mon Sep 17 00:00:00 2001 From: baimamboukar Date: Fri, 8 Sep 2023 14:03:52 +0100 Subject: [PATCH 115/115] fix: repo checkout --- .github/workflows/benchmark_msbuild.yaml | 2 +- scripts/benchmark_runner_linux.py | 2 +- scripts/benchmark_runner_windows.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark_msbuild.yaml b/.github/workflows/benchmark_msbuild.yaml index 3da9658..40591c4 100644 --- a/.github/workflows/benchmark_msbuild.yaml +++ b/.github/workflows/benchmark_msbuild.yaml @@ -16,7 +16,7 @@ jobs: - large_app_with_private_packages_centralised_ngbv_removed_windows - orleans_windows - orchardcore_windows - #- nuget_windows + - nuget_windows fail-fast: false runs-on: windows-latest steps: diff --git a/scripts/benchmark_runner_linux.py b/scripts/benchmark_runner_linux.py index 17c1c3c..987120a 100644 --- a/scripts/benchmark_runner_linux.py +++ b/scripts/benchmark_runner_linux.py @@ -87,7 +87,7 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu if commit_hash != '': subprocess.run(['git', 'submodule', 'update', '--init', '--recursive'], check=True) - os.chdir(test_repo_name) + # os.chdir(test_repo_name) subprocess.run(['git', 'checkout', commit_hash], check=True) diff --git a/scripts/benchmark_runner_windows.py b/scripts/benchmark_runner_windows.py index 5ea7389..d10f280 100644 --- a/scripts/benchmark_runner_windows.py +++ b/scripts/benchmark_runner_windows.py @@ -85,7 +85,7 @@ def clone_repository(repo_url, test_repo_name, test_repo_path, nested, test_solu if commit_hash != '': subprocess.run(['git', 'submodule', 'update', '--init', '--recursive'], check=True) - os.chdir(test_repo_name) + # os.chdir(test_repo_name) subprocess.run(['git', 'checkout', commit_hash], check=True) os.chdir(test_repo_name)