ci: use forgejo & nix
All checks were successful
/ build (push) Successful in 5s
/ release (push) Successful in 11s

This commit is contained in:
Hugo Renard 2024-11-29 09:58:09 +01:00
parent e504d89840
commit 942525fe63
Signed by: hougo
GPG key ID: 3A285FD470209C59
9 changed files with 383 additions and 358 deletions

View file

@ -0,0 +1,24 @@
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
env:
NC_STORE_TOKEN: ${{ secrets.NC_STORE_TOKEN }}

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
vendor
/lib/Vendor
/build

View file

@ -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
}

View file

@ -1,6 +1,6 @@
{
"require-dev": {
"vimeo/psalm": "^4.23",
"vimeo/psalm": "^4",
"nextcloud/ocp": "^28.0",
"nextcloud/coding-standard": "^1.3"
},

236
composer.lock generated
View file

@ -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": [],

61
flake.lock Normal file
View file

@ -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
}

178
flake.nix Normal file
View file

@ -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" ''
<?php
$CONFIG = [
'config_is_read_only' => 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
];
};
}
);
}

42
go.mod
View file

@ -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
)

89
go.sum
View file

@ -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=