From 88132ceeb57662584f3c25f292066565a1ac756b Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 25 Aug 2026 14:15:42 +0000 Subject: [PATCH 1/4] Adding --force option to build command --- go-apps/meepctl/cmd/build.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/go-apps/meepctl/cmd/build.go b/go-apps/meepctl/cmd/build.go index d2cc926c..267a2f4d 100644 --- a/go-apps/meepctl/cmd/build.go +++ b/go-apps/meepctl/cmd/build.go @@ -35,6 +35,7 @@ type BuildData struct { codecov bool nolint bool noCache bool + force bool coreGoApps []string coreJsApps []string sandboxGoApps []string @@ -43,12 +44,15 @@ type BuildData struct { const buildDesc = `AdvantEDGE is composed of a collection of micro-services. Build command generates AdvantEDGE binaries. -Multiple targets can be specified (e.g. meepctl build ...)` +Multiple targets can be specified (e.g. meepctl build ...) +Use --force to rebuild targets even when the checksum cache reports no source changes.` const buildExample = ` # Build all components meepctl build all # Build meep-platform-ctrl component only - meepctl build meep-platform-ctrl` + meepctl build meep-platform-ctrl + # Force rebuild of all MEC services (ignore checksum cache) + meepctl build all --force` // buildCmd represents the build command var buildCmd = &cobra.Command{ @@ -86,6 +90,7 @@ func init() { buildCmd.Flags().BoolVar(&buildData.codecov, "codecov", false, "Build a code coverage binary (dev. option)") buildCmd.Flags().BoolVar(&buildData.nolint, "nolint", false, "Disable linting") buildCmd.Flags().BoolVar(&buildData.noCache, "no-cache", false, "Build binaries without using checksum cache") + buildCmd.Flags().BoolVarP(&buildData.force, "force", "f", false, "Force rebuild even if no source changes were detected") // Add command rootCmd.AddCommand(buildCmd) @@ -112,10 +117,16 @@ func buildRun(cmd *cobra.Command, args []string) { fmt.Println("[arg] targets:", targets) fmt.Println("[flag] codecov:", buildData.codecov) fmt.Println("[flag] nolint:", buildData.nolint) + fmt.Println("[flag] no-cache:", buildData.noCache) + fmt.Println("[flag] force:", buildData.force) fmt.Println("[flag] verbose:", v) fmt.Println("[flag] time:", t) } + if buildData.force { + fmt.Println(utils.FormatWarning("Force rebuild enabled: checksum cache will be ignored")) + } + start := time.Now() for _, target := range targets { if target == "all" { @@ -384,7 +395,7 @@ func checkBuildCache(srcDir string, binFile string, binDir string, gitDir string currentChecksum := "" if err == nil { currentChecksum = strings.TrimSpace(string(outBytes)) - if !buildData.noCache && binExists && currentChecksum != "" { + if !buildData.noCache && !buildData.force && binExists && currentChecksum != "" { savedChecksumBytes, err := os.ReadFile(checksumFile) if err == nil { savedChecksum := strings.TrimSpace(string(savedChecksumBytes)) -- GitLab From 9dd5759ffd2780e46e636bb9ffd80b82f30deafb Mon Sep 17 00:00:00 2001 From: Muhammad Umair Khan Date: Thu, 27 Aug 2026 06:04:45 +0000 Subject: [PATCH 2/4] Update service-mgmt MEP filtering and admin console components --- .../server/service-mgmt/service-mgmt.go | 8 +- js-apps/meep-admin-console/package-lock.json | 468 +++++++++++++++++- js-apps/meep-admin-console/package.json | 5 +- .../dialogs/id-sign-in-oauth-dialog.js | 58 ++- .../src/js/components/meep-top-bar.js | 2 +- .../src/js/containers/meep-container.js | 2 +- .../containers/users/users-page-container.js | 2 + 7 files changed, 499 insertions(+), 46 deletions(-) diff --git a/go-apps/meep-app-enablement/server/service-mgmt/service-mgmt.go b/go-apps/meep-app-enablement/server/service-mgmt/service-mgmt.go index cb2e0b97..a0213598 100644 --- a/go-apps/meep-app-enablement/server/service-mgmt/service-mgmt.go +++ b/go-apps/meep-app-enablement/server/service-mgmt/service-mgmt.go @@ -1253,9 +1253,9 @@ func getServices(w http.ResponseWriter, r *http.Request, appId string) { var key string if appId == "" { - key = baseKeyAnyMep + "app:*:svc:*" + key = baseKey + "app:*:svc:*" } else { - key = baseKeyAnyMep + "app:" + appId + ":svc:*" + key = baseKey + "app:" + appId + ":svc:*" } err = rc.ForEachJSONEntry(key, populateServiceInfoList, sInfoList) @@ -1290,9 +1290,9 @@ func getService(w http.ResponseWriter, r *http.Request, appId string, serviceId var key string if appId == "" { - key = baseKeyAnyMep + "app:*:svc:" + serviceId + key = baseKey + "app:*:svc:" + serviceId } else { - key = baseKeyAnyMep + "app:" + appId + ":svc:" + serviceId + key = baseKey + "app:" + appId + ":svc:" + serviceId } err := rc.ForEachJSONEntry(key, populateServiceInfoList, &sInfoList) diff --git a/js-apps/meep-admin-console/package-lock.json b/js-apps/meep-admin-console/package-lock.json index 9b5ee296..67c35e6c 100644 --- a/js-apps/meep-admin-console/package-lock.json +++ b/js-apps/meep-admin-console/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "meep-controller-web-ui-js", "version": "1.0.0", + "hasInstallScript": true, "license": "ISC", "dependencies": { "@geoman-io/leaflet-geoman-free": "2.5.0", @@ -69,6 +70,8 @@ "html-loader": "^0.5.5", "html-webpack-plugin": "^3.2.0", "jest": "^24.1.0", + "patch-package": "^8.0.1", + "postinstall-postinstall": "^2.1.0", "regenerator-runtime": "^0.13.1", "sass": "^1.32.13", "sass-loader": "^10.1.1", @@ -1473,11 +1476,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/@mapbox/geojson-rewind/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node_modules/@mapbox/geojson-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", @@ -4584,6 +4582,13 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/abab": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", @@ -9448,6 +9453,79 @@ "node": ">=6" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/findup-sync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", @@ -9670,6 +9748,21 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -11992,6 +12085,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-document.all": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", @@ -13230,6 +13339,26 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -13237,6 +13366,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -13262,6 +13398,29 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -13500,6 +13659,16 @@ "node": ">=0.10.0" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -13807,11 +13976,6 @@ "mapbox-gl": "*" } }, - "node_modules/mapbox-gl/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node_modules/martinez-polygon-clipping": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz", @@ -14488,10 +14652,13 @@ } }, "node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mississippi": { "version": "3.0.0", @@ -15202,6 +15369,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -15517,6 +15714,215 @@ "node": ">=0.10.0" } }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/patch-package/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/patch-package/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", @@ -16245,6 +16651,14 @@ "node": ">=0.8.0" } }, + "node_modules/postinstall-postinstall": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/potpack": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz", @@ -20494,6 +20908,16 @@ "imurmurhash": "^0.1.4" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -21498,6 +21922,22 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yamljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", diff --git a/js-apps/meep-admin-console/package.json b/js-apps/meep-admin-console/package.json index 77c517ae..e3a63d3e 100644 --- a/js-apps/meep-admin-console/package.json +++ b/js-apps/meep-admin-console/package.json @@ -8,7 +8,8 @@ "test:verbose": "jest --verbose true", "test:coverage": "jest --verbose true --coverage --colors", "build": "webpack", - "build:dev": "webpack-dev-server --https true --port 8092 --host 10.3.16.69 --env.MEEP_HOST=10.3.16.69" + "build:dev": "webpack-dev-server --https true --port 8092 --host 10.3.16.69 --env.MEEP_HOST=10.3.16.69", + "postinstall": "find node_modules/@rmwc -type f -name \"*.js\" -exec sed -i 's/\\bcomponentWillReceiveProps\\b/UNSAFE_componentWillReceiveProps/g' {} + && find node_modules/@rmwc -type f -name \"*.js\" -exec sed -i 's/\\bcomponentWillMount\\b/UNSAFE_componentWillMount/g' {} +" }, "author": "", "license": "ISC", @@ -31,6 +32,8 @@ "html-loader": "^0.5.5", "html-webpack-plugin": "^3.2.0", "jest": "^24.1.0", + "patch-package": "^8.0.1", + "postinstall-postinstall": "^2.1.0", "regenerator-runtime": "^0.13.1", "sass": "^1.32.13", "sass-loader": "^10.1.1", diff --git a/js-apps/meep-admin-console/src/js/components/dialogs/id-sign-in-oauth-dialog.js b/js-apps/meep-admin-console/src/js/components/dialogs/id-sign-in-oauth-dialog.js index ba7597cc..f8241430 100644 --- a/js-apps/meep-admin-console/src/js/components/dialogs/id-sign-in-oauth-dialog.js +++ b/js-apps/meep-admin-console/src/js/components/dialogs/id-sign-in-oauth-dialog.js @@ -63,31 +63,39 @@ class IDSignInOAuthDialog extends Component { - this.setState({ username: e.target.value })} - style={{ width: '100%', marginBottom: 10 }} - /> - - - this.setState({ password: e.target.value })} - style={{ width: '100%', marginBottom: 10 }} - /> - - - +
{ e.preventDefault(); if (!isLoginDisabled) this.props.onLocalSignIn(this.state.username, this.state.password); }}> + + + this.setState({ username: e.target.value })} + style={{ width: '100%', marginBottom: 10 }} + /> + + + this.setState({ password: e.target.value })} + style={{ width: '100%', marginBottom: 10 }} + /> + + + + + +
diff --git a/js-apps/meep-admin-console/src/js/components/meep-top-bar.js b/js-apps/meep-admin-console/src/js/components/meep-top-bar.js index 64290a86..8febce6f 100644 --- a/js-apps/meep-admin-console/src/js/components/meep-top-bar.js +++ b/js-apps/meep-admin-console/src/js/components/meep-top-bar.js @@ -121,7 +121,7 @@ class MeepTopBar extends Component { /* eslint-enable */ } - componentWillMount() { + UNSAFE_componentWillMount() { this.props.changeUserMenuDisplay(false); } diff --git a/js-apps/meep-admin-console/src/js/containers/meep-container.js b/js-apps/meep-admin-console/src/js/containers/meep-container.js index a4ff6116..7cf62fd1 100644 --- a/js-apps/meep-admin-console/src/js/containers/meep-container.js +++ b/js-apps/meep-admin-console/src/js/containers/meep-container.js @@ -231,7 +231,7 @@ class MeepContainer extends Component { }); } - componentWillMount() { + UNSAFE_componentWillMount() { // Handle OAuth login in progress if (this.props.signInStatus === STATUS_SIGNING_IN) { let params = (new URL(document.location)).searchParams; diff --git a/js-apps/meep-admin-console/src/js/containers/users/users-page-container.js b/js-apps/meep-admin-console/src/js/containers/users/users-page-container.js index 5a74b6c5..22237902 100644 --- a/js-apps/meep-admin-console/src/js/containers/users/users-page-container.js +++ b/js-apps/meep-admin-console/src/js/containers/users/users-page-container.js @@ -134,6 +134,7 @@ class UsersPageContainer extends Component { this.setState({ newUsername: e.target.value })} style={{ width: '100%' }} @@ -143,6 +144,7 @@ class UsersPageContainer extends Component { this.setState({ newPassword: e.target.value })} style={{ width: '100%' }} -- GitLab From cdbd3eba22b226296d1295c23a6a9d7fd7f8b7b4 Mon Sep 17 00:00:00 2001 From: Muhammad Umair Khan Date: Thu, 27 Aug 2026 07:46:40 +0000 Subject: [PATCH 3/4] Configure containerd IPv4 registry mirror and remove GRUB IPv6 logic --- .../tasks/container_runtime/containerd.py | 22 ++++++++++++++++++ deploy/pyinfra/tasks/system/kernel.py | 23 ------------------- .../templates/registry.k8s.io.hosts.toml.j2 | 5 ++++ 3 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 deploy/pyinfra/templates/registry.k8s.io.hosts.toml.j2 diff --git a/deploy/pyinfra/tasks/container_runtime/containerd.py b/deploy/pyinfra/tasks/container_runtime/containerd.py index 0ab9aa0c..3bb000e0 100644 --- a/deploy/pyinfra/tasks/container_runtime/containerd.py +++ b/deploy/pyinfra/tasks/container_runtime/containerd.py @@ -40,9 +40,31 @@ files.replace( text=r'sandbox_image = "registry.k8s.io/pause:3.8', replace='sandbox_image = "registry.k8s.io/pause:3.10', _sudo=True +) +# Enable certs.d config_path +files.replace( + name="Enable certs.d config_path for registry mirrors", + path=containerd_config_path, + text=r'config_path = ""', + replace='config_path = "/etc/containerd/certs.d"', + _sudo=True ) +files.directory( + name="Create containerd certs.d directory for registry.k8s.io", + path="/etc/containerd/certs.d/registry.k8s.io", + _sudo=True, +) + +files.template( + name="Configure explicit IPv4 mirror for registry.k8s.io", + src="templates/registry.k8s.io.hosts.toml.j2", + dest="/etc/containerd/certs.d/registry.k8s.io/hosts.toml", + _sudo=True, +) + + # Restart containerd systemd.service( name="Restart containerd", diff --git a/deploy/pyinfra/tasks/system/kernel.py b/deploy/pyinfra/tasks/system/kernel.py index e0711a91..24454210 100644 --- a/deploy/pyinfra/tasks/system/kernel.py +++ b/deploy/pyinfra/tasks/system/kernel.py @@ -68,26 +68,3 @@ systemd.daemon_reload( name="Reload systemd", _sudo=True ) - -# Disable IPv6 at the kernel level via GRUB. -# files.replace uses sed (not Python regex), so the pattern must be BRE/ERE: -# no lookaheads. Skip when the file is missing or already has ipv6.disable=1. -grub_cmdline = host.get_fact( - Command, - "grep -E '^GRUB_CMDLINE_LINUX=' /etc/default/grub 2>/dev/null || true", -) - -if grub_cmdline and "ipv6.disable=1" not in grub_cmdline: - files.replace( - name="Disable IPv6 in GRUB", - path="/etc/default/grub", - text=r'^GRUB_CMDLINE_LINUX="(.*)"$', - replace=r'GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"', - extended_regex=True, - _sudo=True, - ) - server.shell( - name="Update GRUB", - commands=["update-grub"], - _sudo=True, - ) diff --git a/deploy/pyinfra/templates/registry.k8s.io.hosts.toml.j2 b/deploy/pyinfra/templates/registry.k8s.io.hosts.toml.j2 new file mode 100644 index 00000000..888598b4 --- /dev/null +++ b/deploy/pyinfra/templates/registry.k8s.io.hosts.toml.j2 @@ -0,0 +1,5 @@ +server = "https://registry.k8s.io" + +[host."http://34.96.108.209"] + capabilities = ["pull", "resolve"] + skip_verify = true -- GitLab From 7ab81ce4b80c32a6c478f0420fc672322d06e64b Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 27 Aug 2026 12:59:43 +0000 Subject: [PATCH 4/4] Use ETSI Labs instead of ETSI forge --- deploy/pyinfra/lib/scripts/verify_oauth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/pyinfra/lib/scripts/verify_oauth.py b/deploy/pyinfra/lib/scripts/verify_oauth.py index d1ab7c88..caa6034f 100644 --- a/deploy/pyinfra/lib/scripts/verify_oauth.py +++ b/deploy/pyinfra/lib/scripts/verify_oauth.py @@ -74,7 +74,7 @@ def verify_gitlab_oauth(client_id: str, client_secret: str, gitlab_url: str = No return False, "GitLab Client ID or Client Secret is empty" if not gitlab_url: - gitlab_url = os.environ.get("GITLAB_URL", "https://forge.etsi.org/rep") + gitlab_url = os.environ.get("GITLAB_URL", "https://labs.etsi.org/rep") url = f"{gitlab_url.rstrip('/')}/oauth/token" payload = { -- GitLab