diff --git a/.forgejo/workflows/main.yml b/.forgejo/workflows/main.yml new file mode 100644 index 0000000..e84e176 --- /dev/null +++ b/.forgejo/workflows/main.yml @@ -0,0 +1,22 @@ +on: [push, tag] +jobs: + build: + runs-on: native + steps: + - uses: actions/checkout@v4 + - run: nix run .#make + env: + SCIMSERVICEPROVIDER_CRT: ${{ secrets.SCIMSERVICEPROVIDER_CRT }} + SCIMSERVICEPROVIDER_KEY: ${{ secrets.SCIMSERVICEPROVIDER_KEY }} + - uses: actions/upload-artifact@v3 + with: + path: build/scimserviceprovider*.tar.gz* + release: + runs-on: native + needs: [build] + if: github.ref_type == 'tag' + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v3 + - run: nix run .#release + - run: nix run .#publish diff --git a/.gitignore b/.gitignore index 0a2d0d0..018f01d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ vendor /lib/Vendor +/build \ No newline at end of file diff --git a/ci/main.go b/ci/main.go deleted file mode 100644 index ec00f15..0000000 --- a/ci/main.go +++ /dev/null @@ -1,108 +0,0 @@ -package main - -import ( - "context" - "encoding/xml" - "fmt" - "os" - "path" - "time" - - "dagger.io/dagger" -) - -type info struct { - Version string `xml:"version"` -} - -func main() { - ctx := context.Background() - - // initialize Dagger client - client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stderr)) - if err != nil { - panic(err) - } - defer client.Close() - - keySecret := loadSecret(client, "scimserviceprovider.key") - certSecret := loadSecret(client, "scimserviceprovider.crt") - s3Secret := client.SetSecret("s3", fmt.Sprintf("https://%s:%s@hot-objects.liiib.re", os.Getenv("S3_ACCESSKEY"), os.Getenv("S3_SECRETKEY"))) - ncSecret := client.SetSecret("nc", os.Getenv("NC_STORE_TOKEN")) - - i := loadInfo() - - archiveName := fmt.Sprintf("scimserviceprovider-v%s.tar.gz", i.Version) - - fmt.Println("cc", i.Version) - - // execute - vendor := client.Container().From("docker.io/composer:2.6"). - WithFile("composer.json", client.Host().File("composer.json")). - WithFile("composer.lock", client.Host().File("composer.lock")). - WithExec([]string{"composer", "i", "--no-dev", "--ignore-platform-reqs"}). - WithExec([]string{"rm", "-rf", "vendor/audriga/scim-server-php/.git"}). - Directory("vendor") - - output := client.Container().From("docker.io/nextcloud:28"). - WithWorkdir("/scimserviceprovider"). - WithDirectory("vendor", vendor). - WithDirectory(".", client.Host().Directory(".", dagger.HostDirectoryOpts{ - Include: []string{"appinfo", "lib", "LICENSE"}, - })). - WithMountedSecret("/scimserviceprovider.crt", certSecret). - WithMountedSecret("/scimserviceprovider.key", keySecret). - WithExec([]string{"php", "/usr/src/nextcloud/occ", "integrity:sign-app", "--path=/scimserviceprovider", "--privateKey=/scimserviceprovider.key", "--certificate=/scimserviceprovider.crt"}). - WithExec([]string{"mkdir", "/output"}). - WithExec([]string{"tar", "czf", path.Join("/output", archiveName), "/scimserviceprovider"}). - WithExec([]string{"bash", "-c", "openssl dgst -sha512 -sign /scimserviceprovider.key " + path.Join("/output", archiveName) + " | openssl base64 > " + path.Join("/output", archiveName+".sign")}). - Directory("/output") - - _, err = client.Container().From("docker.io/minio/mc"). - WithSecretVariable("MC_HOST_repo", s3Secret). - WithDirectory("/output", output). - WithExec([]string{"mc", "cp", "-r", "/output/", "repo/artifacts/"}). - Sync(ctx) - if err != nil { - panic(err) - } - - _, err = client.Container().From("docker.io/alpine"). - WithExec([]string{"apk", "add", "--no-cache", "curl"}). - WithWorkdir("/output"). - WithDirectory("/output", output). - WithEnvVariable("ARCHIVE_NAME", archiveName). - WithSecretVariable("TOKEN", ncSecret). - WithEnvVariable("CACHEBUSTER", time.Now().String()). - WithExec([]string{"sh", "-c", - `printf '{"download":"https://hot-objects.liiib.re/artifacts/%s", "signature": "%s"}' "$ARCHIVE_NAME" "$(cat ${ARCHIVE_NAME}.sign)" | curl --fail-with-body -s -X POST https://apps.nextcloud.com/api/v1/apps/releases -H "Authorization: Token ${TOKEN}" -H "Content-Type: application/json" -d @-`}). - Sync(ctx) - if err != nil { - panic(err) - } -} - -func loadSecret(client *dagger.Client, name string) *dagger.Secret { - home, err := os.UserHomeDir() - if err != nil { - panic(err) - } - data, err := os.ReadFile(path.Join(home, ".nextcloud/certificates/", name)) - if err != nil { - panic(err) - } - return client.SetSecret(name, string(data)) -} - -func loadInfo() info { - data, err := os.ReadFile("appinfo/info.xml") - if err != nil { - panic(err) - } - i := info{} - err = xml.Unmarshal(data, &i) - if err != nil { - panic(err) - } - return i -} diff --git a/composer.json b/composer.json index 40d6a82..2c1a273 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "require-dev": { - "vimeo/psalm": "^4.23", + "vimeo/psalm": "^4", "nextcloud/ocp": "^28.0", "nextcloud/coding-standard": "^1.3" }, diff --git a/composer.lock b/composer.lock index d435f5e..bf18b6a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f46c2521f4a40788b84eb61646c04c1a", + "content-hash": "3bbf10c4c1a2c7ba90a4038e08d09e0a", "packages": [ { "name": "audriga/scim-server-php", @@ -12,14 +12,14 @@ "source": { "type": "git", "url": "https://forge.libre.sh/libre.sh/scim-server-php.git", - "reference": "dfa3a7646a896f54501e86bf38cf0cb299e20920" + "reference": "c968abdf095ed26cab6ff120946f134617a0ca58" }, "require": { "coenjacobs/mozart": "^0.7.1", "firebase/php-jwt": "^6.3", "illuminate/database": "^11", "monolog/monolog": "^2.4", - "php": "^7.4", + "php": "^8", "php-di/php-di": "^7.0", "ramsey/uuid": "^4.2", "slim/php-view": "^3.1", @@ -66,7 +66,7 @@ } ], "description": "An open library for SCIM servers implementation", - "time": "2024-08-14T13:23:00+00:00" + "time": "2024-11-06T15:55:50+00:00" }, { "name": "brick/math", @@ -405,16 +405,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -462,9 +462,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "illuminate/collections", @@ -472,12 +472,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "2d99ccbb19e34450508ff3ab2f62ba90aa2e9793" + "reference": "fd2103ddc121449a7926fc34a9d220e5b88183c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/2d99ccbb19e34450508ff3ab2f62ba90aa2e9793", - "reference": "2d99ccbb19e34450508ff3ab2f62ba90aa2e9793", + "url": "https://api.github.com/repos/illuminate/collections/zipball/fd2103ddc121449a7926fc34a9d220e5b88183c1", + "reference": "fd2103ddc121449a7926fc34a9d220e5b88183c1", "shasum": "" }, "require": { @@ -519,7 +519,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-10T19:23:07+00:00" + "time": "2024-11-27T14:51:56+00:00" }, { "name": "illuminate/conditionable", @@ -527,12 +527,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", - "reference": "362dd761b9920367bca1427a902158225e9e3a23" + "reference": "911df1bda950a3b799cf80671764e34eede131c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/362dd761b9920367bca1427a902158225e9e3a23", - "reference": "362dd761b9920367bca1427a902158225e9e3a23", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/911df1bda950a3b799cf80671764e34eede131c6", + "reference": "911df1bda950a3b799cf80671764e34eede131c6", "shasum": "" }, "require": { @@ -565,7 +565,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-06-28T20:10:30+00:00" + "time": "2024-11-21T16:28:56+00:00" }, { "name": "illuminate/container", @@ -573,12 +573,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "06dfc614aff58384b28ba5ad191f6a02d6b192cb" + "reference": "b057b0bbb38d7c7524df1ca5c38e7318f4c64d26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/06dfc614aff58384b28ba5ad191f6a02d6b192cb", - "reference": "06dfc614aff58384b28ba5ad191f6a02d6b192cb", + "url": "https://api.github.com/repos/illuminate/container/zipball/b057b0bbb38d7c7524df1ca5c38e7318f4c64d26", + "reference": "b057b0bbb38d7c7524df1ca5c38e7318f4c64d26", "shasum": "" }, "require": { @@ -616,7 +616,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-11T15:30:11+00:00" + "time": "2024-11-21T20:07:31+00:00" }, { "name": "illuminate/contracts", @@ -624,12 +624,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8" + "reference": "184317f701ba20ca265e36808ed54b75b115972d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/56312862af937bd6da8e6dc8bbd88188dfb478f8", - "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/184317f701ba20ca265e36808ed54b75b115972d", + "reference": "184317f701ba20ca265e36808ed54b75b115972d", "shasum": "" }, "require": { @@ -664,7 +664,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-09-22T15:08:08+00:00" + "time": "2024-11-25T15:33:38+00:00" }, { "name": "illuminate/database", @@ -672,12 +672,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "af371b7b34c55777e2b3f761c846e1b921aebb5d" + "reference": "f08bb9ffa1d829cb6f8bb713e5c9cd3a47636ff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/af371b7b34c55777e2b3f761c846e1b921aebb5d", - "reference": "af371b7b34c55777e2b3f761c846e1b921aebb5d", + "url": "https://api.github.com/repos/illuminate/database/zipball/f08bb9ffa1d829cb6f8bb713e5c9cd3a47636ff2", + "reference": "f08bb9ffa1d829cb6f8bb713e5c9cd3a47636ff2", "shasum": "" }, "require": { @@ -692,7 +692,7 @@ }, "suggest": { "ext-filter": "Required to use the Postgres database driver.", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.24).", "illuminate/console": "Required to use the database commands (^11.0).", "illuminate/events": "Required to use the observers with Eloquent (^11.0).", "illuminate/filesystem": "Required to use the migrations (^11.0).", @@ -733,7 +733,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-21T14:14:36+00:00" + "time": "2024-11-25T22:44:52+00:00" }, { "name": "illuminate/macroable", @@ -787,12 +787,12 @@ "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "ec2cb8d9fa0be75302fac9442981383b662b403e" + "reference": "2b718a86571baed50fdc5d5748a846c2e58e07eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/ec2cb8d9fa0be75302fac9442981383b662b403e", - "reference": "ec2cb8d9fa0be75302fac9442981383b662b403e", + "url": "https://api.github.com/repos/illuminate/support/zipball/2b718a86571baed50fdc5d5748a846c2e58e07eb", + "reference": "2b718a86571baed50fdc5d5748a846c2e58e07eb", "shasum": "" }, "require": { @@ -804,9 +804,9 @@ "illuminate/conditionable": "^11.0", "illuminate/contracts": "^11.0", "illuminate/macroable": "^11.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.4", "php": "^8.2", - "voku/portable-ascii": "^2.0" + "voku/portable-ascii": "^2.0.2" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -822,7 +822,7 @@ "symfony/process": "Required to use the composer class (^7.0).", "symfony/uid": "Required to use Str::ulid() (^7.0).", "symfony/var-dumper": "Required to use the dd function (^7.0).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.6.1)." }, "type": "library", "extra": { @@ -855,20 +855,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-24T14:27:28+00:00" + "time": "2024-11-27T14:58:17+00:00" }, { "name": "laravel/serializable-closure", - "version": "dev-master", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "43244bfd7161fdbce7419c76f9a776b7d705b333" + "reference": "8be68b9a31863c40ccccac14f7e885e274b8ea62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/43244bfd7161fdbce7419c76f9a776b7d705b333", - "reference": "43244bfd7161fdbce7419c76f9a776b7d705b333", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8be68b9a31863c40ccccac14f7e885e274b8ea62", + "reference": "8be68b9a31863c40ccccac14f7e885e274b8ea62", "shasum": "" }, "require": { @@ -881,7 +881,6 @@ "phpstan/phpstan": "^1.8.2", "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -917,7 +916,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-09-24T15:52:47+00:00" + "time": "2024-11-19T20:48:19+00:00" }, { "name": "league/flysystem", @@ -1075,12 +1074,12 @@ "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "23560e32b11ca2e11d420279b2ea774c911aee1a" + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/23560e32b11ca2e11d420279b2ea774c911aee1a", - "reference": "23560e32b11ca2e11d420279b2ea774c911aee1a", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", "shasum": "" }, "require": { @@ -1169,7 +1168,7 @@ "type": "tidelift" } ], - "time": "2024-08-27T07:31:25+00:00" + "time": "2024-11-12T12:43:37+00:00" }, { "name": "nesbot/carbon", @@ -1177,12 +1176,12 @@ "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "5040f2911da70932682ea64895e0ca8e80c21078" + "reference": "901a6988edbc6f469896b3fd991935ce2560ae2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/5040f2911da70932682ea64895e0ca8e80c21078", - "reference": "5040f2911da70932682ea64895e0ca8e80c21078", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/901a6988edbc6f469896b3fd991935ce2560ae2f", + "reference": "901a6988edbc6f469896b3fd991935ce2560ae2f", "shasum": "" }, "require": { @@ -1276,7 +1275,7 @@ "type": "tidelift" } ], - "time": "2024-10-16T21:23:18+00:00" + "time": "2024-11-19T17:15:47+00:00" }, { "name": "nikic/fast-route", @@ -2023,12 +2022,12 @@ "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "9e8aa057ba5384e5888954c828f8de90ccd3ca4c" + "reference": "99fc2f461452e2f4243d70f9099c4dd2b1c2bffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/9e8aa057ba5384e5888954c828f8de90ccd3ca4c", - "reference": "9e8aa057ba5384e5888954c828f8de90ccd3ca4c", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/99fc2f461452e2f4243d70f9099c4dd2b1c2bffd", + "reference": "99fc2f461452e2f4243d70f9099c4dd2b1c2bffd", "shasum": "" }, "require": { @@ -2108,7 +2107,7 @@ "type": "tidelift" } ], - "time": "2024-10-14T21:21:59+00:00" + "time": "2024-11-25T21:13:53+00:00" }, { "name": "slim/php-view", @@ -2446,12 +2445,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "108d436c2af470858bdaba3257baab3a74172017" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/108d436c2af470858bdaba3257baab3a74172017", - "reference": "108d436c2af470858bdaba3257baab3a74172017", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -2537,7 +2536,7 @@ "type": "tidelift" } ], - "time": "2024-10-08T07:27:17+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3317,12 +3316,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627" + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", - "reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627", + "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", "shasum": "" }, "require": { @@ -3395,7 +3394,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-11-13T13:31:12+00:00" }, { "name": "symfony/translation", @@ -3573,16 +3572,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -3607,7 +3606,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -3619,7 +3618,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -3643,7 +3642,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" } ], "packages-dev": [ @@ -3887,12 +3886,12 @@ "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https://api.github.com/repos/composer/pcre/zipball/deb3871d20d5012eb5faa5a9caa71c44f151db49", + "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49", "shasum": "" }, "require": { @@ -3902,8 +3901,9 @@ "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, "default-branch": true, @@ -3943,7 +3943,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" + "source": "https://github.com/composer/pcre/tree/main" }, "funding": [ { @@ -3959,7 +3959,7 @@ "type": "tidelift" } ], - "time": "2024-08-27T18:44:43+00:00" + "time": "2024-11-20T09:10:58+00:00" }, { "name": "composer/semver", @@ -4590,16 +4590,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.64.0", + "version": "v3.65.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "81ccfd24baf3a10810dab1152c403981a790b837" + "reference": "4983ec79b9dee926695ac324ea6e8d291935525d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/81ccfd24baf3a10810dab1152c403981a790b837", - "reference": "81ccfd24baf3a10810dab1152c403981a790b837", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/4983ec79b9dee926695ac324ea6e8d291935525d", + "reference": "4983ec79b9dee926695ac324ea6e8d291935525d", "shasum": "" }, "require": { @@ -4636,9 +4636,9 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/shim/issues", - "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.64.0" + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.65.0" }, - "time": "2024-08-30T23:10:11+00:00" + "time": "2024-11-25T00:39:41+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4699,12 +4699,12 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "60741fe3871f40e44ca10a28ce85d08b7ed841cd" + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/60741fe3871f40e44ca10a28ce85d08b7ed841cd", - "reference": "60741fe3871f40e44ca10a28ce85d08b7ed841cd", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", + "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", "shasum": "" }, "require": { @@ -4713,17 +4713,17 @@ "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.5", + "mockery/mockery": "~1.3.5 || ~1.6.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" + "psalm/phar": "^5.26" }, "default-branch": true, "type": "library", @@ -4754,9 +4754,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.x" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" }, - "time": "2024-08-14T20:00:37+00:00" + "time": "2024-11-12T11:25:25+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4764,19 +4764,19 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "eee054a3d40f09920f5b27c9b09a6483f88d9d24" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/eee054a3d40f09920f5b27c9b09a6483f88d9d24", - "reference": "eee054a3d40f09920f5b27c9b09a6483f88d9d24", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -4813,38 +4813,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-05-24T14:24:30+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.33.0", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" + "reference": "04c8de0d350731bccfa216a5b5e9b3e1c26e4e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/04c8de0d350731bccfa216a5b5e9b3e1c26e4e24", + "reference": "04c8de0d350731bccfa216a5b5e9b3e1c26e4e24", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -4860,9 +4861,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.x" }, - "time": "2024-10-13T11:25:22+00:00" + "time": "2024-11-07T10:15:44+00:00" }, { "name": "psr/event-dispatcher", @@ -5152,27 +5153,26 @@ }, { "name": "webmozart/path-util", - "version": "dev-master", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/path-util.git", - "reference": "6099b5238073f87f246863fd58c2e447acfc0d24" + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/6099b5238073f87f246863fd58c2e447acfc0d24", - "reference": "6099b5238073f87f246863fd58c2e447acfc0d24", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0", + "php": ">=5.3.3", "webmozart/assert": "~1.0" }, "require-dev": { "phpunit/phpunit": "^4.6", "sebastian/version": "^1.0.1" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -5197,10 +5197,10 @@ "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", "support": { "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/master" + "source": "https://github.com/webmozart/path-util/tree/2.3.0" }, "abandoned": "symfony/filesystem", - "time": "2021-11-08T08:17:20+00:00" + "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f59a84a --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2f13a8e --- /dev/null +++ b/flake.nix @@ -0,0 +1,178 @@ +{ + description = "Empty Template"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = + { + nixpkgs, + flake-utils, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + + config = pkgs.writeText "config.php" '' + true, + 'logfile' => getenv('NEXTCLOUD_DATA_DIR').'/nextcloud.log', + 'apps_paths' => [ + [ + 'path'=> '${pkgs.nextcloud28}/apps', + 'url' => '/apps', + 'writable' => false, + ], + [ + 'path'=> getenv('NEXTCLOUD_DATA_DIR').'/apps', + 'url' => '/apps', + 'writable' => true, + ], + ], + ]; + ''; + occ = pkgs.writeShellApplication { + name = "occ"; + runtimeInputs = with pkgs; [ + nextcloud28 + php + ]; + text = '' + NEXTCLOUD_DATA_DIR="$(mktemp -d)" + export NEXTCLOUD_DATA_DIR="$NEXTCLOUD_DATA_DIR" + export NEXTCLOUD_CONFIG_DIR="$NEXTCLOUD_DATA_DIR/config" + mkdir "$NEXTCLOUD_CONFIG_DIR" + mkdir "$NEXTCLOUD_DATA_DIR/apps" + cp ${config} "$NEXTCLOUD_CONFIG_DIR/config.php" + exec php ${pkgs.nextcloud28}/occ "$@" + ''; + }; + + src = ./.; + version = builtins.readFile ( + pkgs.runCommand "version" { } '' + ${pkgs.coreutils}/bin/cat ${src}/appinfo/info.xml | ${pkgs.xq-xml}/bin/xq -x "info/version" | ${pkgs.coreutils}/bin/tr -d '\n' > $out + '' + ); + vendor = pkgs.stdenv.mkDerivation { + pname = "scimserviceprovider-vendor"; + inherit src version; + doCheck = false; + dontFixup = true; + nativeBuildInputs = with pkgs; [ + cacert + php + php.packages.composer + rsync + ]; + buildPhase = '' + runHook preBuild + export COMPOSER_MIRROR_PATH_REPOS=1 + export COMPOSER_CACHE_DIR=/dev/null + export COMPOSER_HTACCESS_PROTECT=0 + composer install --no-interaction --no-dev + runHook postBuild + ''; + installPhase = '' + runHook preInstall + mkdir $out + rsync -av --progress vendor/ $out --exclude .git + runHook postInstall + ''; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = "sha256-fPSCufyPWf1G1XH3NsbuWSbKBBw/AM6j6Vd9lX+6qIQ="; + #outputHash = pkgs.lib.fakeHash; + }; + scimserviceprovider = pkgs.stdenv.mkDerivation { + pname = "scimserviceprovider"; + inherit src version; + installPhase = '' + runHook preInstall + mkdir $out + cp -r appinfo $out/ + cp -r lib $out/ + cp LICENSE $out/ + ln -sv ${vendor} $out/vendor + runHook postInstall + ''; + }; + scimserviceproviderArchive = "${scimserviceprovider.pname}-v${scimserviceprovider.version}.tar.gz"; + scimserviceproviderArchiveSignature = "${scimserviceprovider.pname}-v${scimserviceprovider.version}.tar.gz.sign"; + make = pkgs.writeShellApplication { + name = "make"; + runtimeInputs = with pkgs; [ + coreutils + gnutar + openssl + occ + ]; + text = '' + SCIMSERVICEPROVIDER_CRT_PATH="$HOME/.nextcloud/certificates/scimserviceprovider.crt" + SCIMSERVICEPROVIDER_KEY_PATH="$HOME/.nextcloud/certificates/scimserviceprovider.key" + CI=''${CI:-false} + if [ "$CI" = true ]; then + echo "Loading CI secrets" + SCIMSERVICEPROVIDER_CRT_PATH="$PWD/scimserviceprovider.crt" + SCIMSERVICEPROVIDER_KEY_PATH="$PWD/scimserviceprovider.key" + echo -n "$SCIMSERVICEPROVIDER_CRT" | base64 -d > "$SCIMSERVICEPROVIDER_CRT_PATH" + echo -n "$SCIMSERVICEPROVIDER_KEY" | base64 -d > "$SCIMSERVICEPROVIDER_KEY_PATH" + fi + rm -rf build + mkdir -p build/scimserviceprovider + cd build + cp -Lr --no-preserve=all ${scimserviceprovider}/* scimserviceprovider/ + occ integrity:sign-app --privateKey="$SCIMSERVICEPROVIDER_KEY_PATH" --certificate="$SCIMSERVICEPROVIDER_CRT_PATH" --path="$PWD/scimserviceprovider" + tar czf ${scimserviceproviderArchive} scimserviceprovider + openssl dgst -sha512 -sign "$SCIMSERVICEPROVIDER_KEY_PATH" "$PWD/${scimserviceproviderArchive}" | openssl base64 -A > "$PWD/${scimserviceproviderArchiveSignature}" + ''; + }; + publish = pkgs.writeShellApplication { + name = "publish"; + runtimeInputs = with pkgs; [ + coreutils + curl + ]; + text = '' + printf '{"download":"https://forge.libre.sh/libre.sh/scimserviceprovider/releases/download/${scimserviceprovider.version}/${scimserviceproviderArchive}","signature":"%s"}' "$(cat artifact/${scimserviceproviderArchiveSignature})" | curl --fail-with-body -s -X POST https://apps.nextcloud.com/api/v1/apps/releases -H "Authorization: Token $NC_STORE_TOKEN" -H "Content-Type: application/json" -d @- + ''; + }; + release = pkgs.writeShellApplication { + name = "publish"; + runtimeInputs = with pkgs; [ + coreutils + findutils + tea + git-cliff + ]; + text = '' + export XDG_CONFIG_HOME=$PWD/.config + export GITEA_SERVER_TOKEN="$GITHUB_TOKEN" + tea login add --url "$GITHUB_SERVER_URL" + # shellcheck disable=SC2046 + tea release create $(find artifact/ -type f -printf "--asset %p ") --note "$(git-cliff -s all --tag "$GITHUB_REF_NAME")" --repo "$GITHUB_REPOSITORY" --tag "$GITHUB_REF_NAME" --title "$GITHUB_REF_NAME" + ''; + }; + in + { + packages.default = scimserviceprovider; + packages.scimserviceprovider = scimserviceprovider; + packages.vendor = vendor; + packages.occ = occ; + packages.make = make; + packages.publish = publish; + packages.release = release; + devShells.default = pkgs.mkShell { + buildInputs = [ + occ + make + ]; + }; + } + ); +} diff --git a/go.mod b/go.mod deleted file mode 100644 index 351e1e7..0000000 --- a/go.mod +++ /dev/null @@ -1,42 +0,0 @@ -module nextcloud-scim - -go 1.22 - -toolchain go1.22.5 - -require dagger.io/dagger v0.12.4 - -require ( - github.com/99designs/gqlgen v0.17.49 // indirect - github.com/Khan/genqlient v0.7.0 // indirect - github.com/adrg/xdg v0.4.0 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/sosodev/duration v1.3.1 // indirect - github.com/vektah/gqlparser/v2 v2.5.16 // indirect - go.opentelemetry.io/otel v1.27.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 // indirect - go.opentelemetry.io/otel/log v0.3.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect - go.opentelemetry.io/otel/sdk v1.27.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.3.0 // indirect - go.opentelemetry.io/otel/trace v1.27.0 // indirect - go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect - google.golang.org/grpc v1.64.0 // indirect - google.golang.org/protobuf v1.34.1 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index d00c984..0000000 --- a/go.sum +++ /dev/null @@ -1,89 +0,0 @@ -dagger.io/dagger v0.12.4 h1:PeAsBs0dgMrV4TN8prVqeDDEvg8qOMMjdQiXHe9q2uc= -dagger.io/dagger v0.12.4/go.mod h1:e5Xuvu+FnswwG28nMk7ZcDtT+p9vadvONowzLKf/0dA= -github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= -github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= -github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= -github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= -github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= -github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= -github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= -github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= -go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= -go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= -go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= -go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= -go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= -go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= -go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= -go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= -go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= -go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= -go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= -go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=