Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package digger-cli for openSUSE:Factory checked in at 2026-01-21 14:19:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/digger-cli (Old) and /work/SRC/openSUSE:Factory/.digger-cli.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "digger-cli" Wed Jan 21 14:19:19 2026 rev:46 rq:1328427 version:0.6.141 Changes: -------- --- /work/SRC/openSUSE:Factory/digger-cli/digger-cli.changes 2026-01-17 14:55:00.835836003 +0100 +++ /work/SRC/openSUSE:Factory/.digger-cli.new.1928/digger-cli.changes 2026-01-21 14:19:31.748304469 +0100 @@ -1,0 +2,11 @@ +Wed Jan 21 06:13:00 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 0.6.141: + * fix: add pagination to GetUserTeams for teams and members + (#2545) + * improve error messages for units when permission denied (#2539) + * Update GCP link in README.md (#2535) + * Docs/envref (#2532) + * docs: replace broken url (#2531) + +------------------------------------------------------------------- Old: ---- digger-cli-0.6.140.obscpio New: ---- digger-cli-0.6.141.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ digger-cli.spec ++++++ --- /var/tmp/diff_new_pack.8xtwyb/_old 2026-01-21 14:19:33.684385252 +0100 +++ /var/tmp/diff_new_pack.8xtwyb/_new 2026-01-21 14:19:33.688385419 +0100 @@ -19,7 +19,7 @@ %define executable_name digger Name: digger-cli -Version: 0.6.140 +Version: 0.6.141 Release: 0 Summary: CLI for the digger open source IaC orchestration tool License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.8xtwyb/_old 2026-01-21 14:19:33.732387255 +0100 +++ /var/tmp/diff_new_pack.8xtwyb/_new 2026-01-21 14:19:33.736387422 +0100 @@ -6,7 +6,7 @@ <param name="exclude">go.mod</param> <param name="exclude">go.work</param> <param name="exclude">go.work.sum</param> - <param name="revision">v0.6.140</param> + <param name="revision">v0.6.141</param> <param name="match-tag">v*</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.8xtwyb/_old 2026-01-21 14:19:33.764388590 +0100 +++ /var/tmp/diff_new_pack.8xtwyb/_new 2026-01-21 14:19:33.768388757 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/diggerhq/digger</param> - <param name="changesrevision">4121d16e2490ab91cf08b62ad90740902b20e628</param></service><service name="tar_scm"> + <param name="changesrevision">3ba4b6b9059736c32605d68329e3da66c7c0833e</param></service><service name="tar_scm"> <param name="url">https://github.com/johanneskastl/digger</param> <param name="changesrevision">8fe377068e53e2050ff4c745388d8428d2b13bb0</param></service></servicedata> (No newline at EOF) ++++++ digger-cli-0.6.140.obscpio -> digger-cli-0.6.141.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/README.md new/digger-cli-0.6.141/README.md --- old/digger-cli-0.6.140/README.md 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/README.md 2026-01-21 04:28:40.000000000 +0100 @@ -43,7 +43,7 @@ ## Getting Started - [GitHub Actions + AWS](https://docs.digger.dev/getting-started/github-actions-+-aws) -- [GitHub Actions + GCP](https://docs.digger.dev/getting-started/github-actions-and-gcp) +- [GitHub Actions + GCP](https://docs.opentaco.dev/ce/gcp/setting-up-gcp-+-gh-actions) ## How it works diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/docs/ce/getting-started/with-terraform.mdx new/digger-cli-0.6.141/docs/ce/getting-started/with-terraform.mdx --- old/digger-cli-0.6.140/docs/ce/getting-started/with-terraform.mdx 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/docs/ce/getting-started/with-terraform.mdx 2026-01-21 04:28:40.000000000 +0100 @@ -25,7 +25,7 @@ <Step title="Install the Digger GitHub App"> -Install the Digger [GitHub App](https://github.com/apps/digger-pro/installations/select_target) into your repository. +Install the Digger [GitHub App](https://github.com/apps/opentaco-cloud) into your repository. <Note> Digger GitHub App does not need access to your cloud account, it just starts jobs in your CI. All sensitive data stays in your CI job. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/docs/ce/reference/environment-variables.mdx new/digger-cli-0.6.141/docs/ce/reference/environment-variables.mdx --- old/digger-cli-0.6.140/docs/ce/reference/environment-variables.mdx 1970-01-01 01:00:00.000000000 +0100 +++ new/digger-cli-0.6.141/docs/ce/reference/environment-variables.mdx 2026-01-21 04:28:40.000000000 +0100 @@ -0,0 +1,450 @@ +--- +title: "Environment Variables" +description: "Reference for configuring OpenTaco services via environment variables" +--- + +<Note> + Variables marked as **Required** must be set for the service to function. Optional variables have sensible defaults. +</Note> + +--- + +## OpenTaco/Statesman (State Backend) + +The state backend service manages Terraform state storage and querying. + +### Server Configuration + +<ParamField path="OPENTACO_PORT" type="string" default="8080"> + HTTP server port +</ParamField> + +<ParamField path="OPENTACO_HOST" type="string" default="0.0.0.0"> + HTTP server bind address +</ParamField> + +<ParamField path="OPENTACO_LOG_LEVEL" type="string" default="info"> + Logging level: `debug`, `info`, `warn`, or `error` +</ParamField> + +<ParamField path="OPENTACO_ENABLE_INTERNAL_ENDPOINTS" type="boolean" default="false"> + Enable internal management endpoints +</ParamField> + +### Storage Backend + +<ParamField path="OPENTACO_STORAGE" type="string" default="memory"> + State file storage type. Options: `memory` (non-persistent) or `s3` +</ParamField> + +<AccordionGroup> + <Accordion title="S3 Storage Configuration"> + Required when `OPENTACO_STORAGE=s3` + + <ParamField path="OPENTACO_S3_BUCKET" type="string" required> + S3 bucket name for state storage + </ParamField> + + <ParamField path="OPENTACO_S3_REGION" type="string" required> + AWS region for S3 bucket + </ParamField> + + <ParamField path="OPENTACO_S3_PREFIX" type="string"> + Key prefix for state files in S3 + </ParamField> + + <ParamField path="AWS_ACCESS_KEY_ID" type="string"> + AWS access key (or use IAM role) + </ParamField> + + <ParamField path="AWS_SECRET_ACCESS_KEY" type="string"> + AWS secret key (or use IAM role) + </ParamField> + + <ParamField path="AWS_REGION" type="string"> + AWS region (alternative to S3_REGION) + </ParamField> + + <ParamField path="AWS_ENDPOINT" type="string"> + Custom S3-compatible endpoint URL + </ParamField> + + <ParamField path="AWS_SDK_LOAD_CONFIG" type="boolean"> + Load AWS config from default locations + </ParamField> + </Accordion> +</AccordionGroup> + +### Query Backend + +<ParamField path="OPENTACO_QUERY_BACKEND" type="string" default="sqlite"> + Database type for state queries. Options: `sqlite`, `postgres`, `mysql`, `mssql` +</ParamField> + +<AccordionGroup> + <Accordion title="SQLite Configuration"> + Used when `OPENTACO_QUERY_BACKEND=sqlite` + + <ParamField path="OPENTACO_SQLITE_DB_PATH" type="string" default="./data/taco.db"> + SQLite database file path + </ParamField> + + <ParamField path="OPENTACO_SQLITE_CACHE" type="string" default="shared"> + SQLite cache mode + </ParamField> + + <ParamField path="OPENTACO_SQLITE_BUSY_TIMEOUT" type="string" default="5s"> + Busy timeout duration + </ParamField> + + <ParamField path="OPENTACO_SQLITE_MAX_OPEN_CONNS" type="number" default="25"> + Maximum open connections + </ParamField> + + <ParamField path="OPENTACO_SQLITE_MAX_IDLE_CONNS" type="number" default="10"> + Maximum idle connections + </ParamField> + + <ParamField path="OPENTACO_SQLITE_CONN_MAX_LIFETIME" type="string" default="300s"> + Connection max lifetime + </ParamField> + + <ParamField path="OPENTACO_SQLITE_CONN_MAX_IDLE_TIME" type="string" default="600s"> + Connection max idle time + </ParamField> + + <ParamField path="OPENTACO_SQLITE_PRAGMA_JOURNAL_MODE" type="string" default="WAL"> + SQLite journal mode + </ParamField> + + <ParamField path="OPENTACO_SQLITE_PRAGMA_FOREIGN_KEYS" type="string" default="ON"> + Foreign keys enforcement + </ParamField> + + <ParamField path="OPENTACO_SQLITE_PRAGMA_BUSY_TIMEOUT" type="number" default="5000"> + Busy timeout in milliseconds + </ParamField> + </Accordion> + + <Accordion title="PostgreSQL Configuration"> + Used when `OPENTACO_QUERY_BACKEND=postgres` + + <ParamField path="OPENTACO_POSTGRES_HOST" type="string" default="localhost" required> + PostgreSQL server host + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_PORT" type="number" default="5432"> + PostgreSQL server port + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_USER" type="string" default="postgres" required> + Database username + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_PASSWORD" type="string" required> + Database password + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_DBNAME" type="string" default="taco"> + Database name + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_SSLMODE" type="string" default="disable"> + SSL mode: `disable`, `require`, `verify-ca`, or `verify-full` + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_MAX_OPEN_CONNS" type="number" default="25"> + Maximum open connections + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_MAX_IDLE_CONNS" type="number" default="10"> + Maximum idle connections + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_CONN_MAX_LIFETIME" type="string" default="300s"> + Connection max lifetime + </ParamField> + + <ParamField path="OPENTACO_POSTGRES_CONN_MAX_IDLE_TIME" type="string" default="600s"> + Connection max idle time + </ParamField> + </Accordion> + + <Accordion title="MySQL Configuration"> + Used when `OPENTACO_QUERY_BACKEND=mysql` + + <ParamField path="OPENTACO_MYSQL_HOST" type="string" default="localhost" required> + MySQL server host + </ParamField> + + <ParamField path="OPENTACO_MYSQL_PORT" type="number" default="3306"> + MySQL server port + </ParamField> + + <ParamField path="OPENTACO_MYSQL_USER" type="string" default="root" required> + Database username + </ParamField> + + <ParamField path="OPENTACO_MYSQL_PASSWORD" type="string" required> + Database password + </ParamField> + + <ParamField path="OPENTACO_MYSQL_DBNAME" type="string" default="taco"> + Database name + </ParamField> + + <ParamField path="OPENTACO_MYSQL_CHARSET" type="string" default="utf8mb4"> + Character set + </ParamField> + + <ParamField path="OPENTACO_MYSQL_MAX_OPEN_CONNS" type="number" default="25"> + Maximum open connections + </ParamField> + + <ParamField path="OPENTACO_MYSQL_MAX_IDLE_CONNS" type="number" default="10"> + Maximum idle connections + </ParamField> + + <ParamField path="OPENTACO_MYSQL_CONN_MAX_LIFETIME" type="string" default="300s"> + Connection max lifetime + </ParamField> + + <ParamField path="OPENTACO_MYSQL_CONN_MAX_IDLE_TIME" type="string" default="600s"> + Connection max idle time + </ParamField> + </Accordion> + + <Accordion title="MSSQL Configuration"> + Used when `OPENTACO_QUERY_BACKEND=mssql` + + <ParamField path="OPENTACO_MSSQL_HOST" type="string" default="localhost" required> + MSSQL server host + </ParamField> + + <ParamField path="OPENTACO_MSSQL_PORT" type="number" default="1433"> + MSSQL server port + </ParamField> + + <ParamField path="OPENTACO_MSSQL_USER" type="string" required> + Database username + </ParamField> + + <ParamField path="OPENTACO_MSSQL_PASSWORD" type="string" required> + Database password + </ParamField> + + <ParamField path="OPENTACO_MSSQL_DBNAME" type="string" default="taco"> + Database name + </ParamField> + </Accordion> +</AccordionGroup> + +### Authentication + +<ParamField path="OPENTACO_AUTH_DISABLE" type="boolean" default="false"> + Disable authentication (not recommended for production) +</ParamField> + +<AccordionGroup> + <Accordion title="OIDC/OAuth Configuration"> + <ParamField path="OPENTACO_AUTH_ISSUER" type="string"> + OIDC issuer URL + </ParamField> + + <ParamField path="OPENTACO_AUTH_CLIENT_ID" type="string"> + OIDC client ID + </ParamField> + + <ParamField path="OPENTACO_AUTH_CLIENT_SECRET" type="string"> + OIDC client secret + </ParamField> + + <ParamField path="OPENTACO_AUTH_AUTH_URL" type="string"> + OIDC authorization URL + </ParamField> + + <ParamField path="OPENTACO_AUTH_TOKEN_URL" type="string"> + OIDC token URL + </ParamField> + + <ParamField path="OPENTACO_AUTH_DEV_SKIP_VERIFY" type="boolean" default="false"> + Skip OIDC verification (development only) + </ParamField> + + <ParamField path="OPENTACO_OAUTH_STATE_KEY" type="string"> + 32+ character encryption key for OAuth state (required for PKCE flow) + </ParamField> + </Accordion> + + <Accordion title="JWT Configuration"> + <ParamField path="OPENTACO_TOKENS_KID" type="string" default="k1"> + JWT Key ID + </ParamField> + + <ParamField path="OPENTACO_TOKENS_PRIVATE_KEY_PEM_PATH" type="string"> + Path to Ed25519 private key PEM file for signing JWTs + </ParamField> + + <ParamField path="OPENTACO_TOKENS_ACCESS_TTL" type="string" default="1h"> + Access token lifetime + </ParamField> + + <ParamField path="OPENTACO_TOKENS_REFRESH_TTL" type="string" default="720h"> + Refresh token lifetime (30 days) + </ParamField> + + <ParamField path="OPENTACO_PUBLIC_BASE_URL" type="string"> + Public base URL for JWT issuer claim + </ParamField> + </Accordion> +</AccordionGroup> + +### Sandbox Execution + +<ParamField path="OPENTACO_SANDBOX_PROVIDER" type="string" default="none"> + Sandbox provider for remote execution. Options: `e2b` or `none` +</ParamField> + +<AccordionGroup> + <Accordion title="E2B Sandbox Configuration"> + Required when `OPENTACO_SANDBOX_PROVIDER=e2b` + + <ParamField path="OPENTACO_E2B_SIDECAR_URL" type="string" required> + E2B sidecar service URL (e.g., `http://sidecar:9100`) + </ParamField> + + <ParamField path="OPENTACO_E2B_POLL_INTERVAL" type="string" default="5s"> + Polling interval for sandbox status + </ParamField> + + <ParamField path="OPENTACO_E2B_POLL_TIMEOUT" type="string" default="30m"> + Maximum time to poll for results + </ParamField> + + <ParamField path="OPENTACO_E2B_HTTP_TIMEOUT" type="string" default="60s"> + HTTP request timeout for E2B API + </ParamField> + </Accordion> +</AccordionGroup> + + +--- + + +### Database + +<ParamField path="DATABASE_URL" type="string" required> + PostgreSQL connection string (e.g., `postgres://user:password@host:5432/dbname?sslmode=disable`) +</ParamField> + +### GitHub App Integration + +<ParamField path="GITHUB_APP_ID" type="string" required> + GitHub App ID from app settings +</ParamField> + +<ParamField path="GITHUB_APP_CLIENT_ID" type="string" required> + GitHub App client ID +</ParamField> + +<ParamField path="GITHUB_APP_CLIENT_SECRET" type="string" required> + GitHub App client secret +</ParamField> + +<ParamField path="GITHUB_APP_PRIVATE_KEY_BASE64" type="string" required> + Base64-encoded GitHub App private key +</ParamField> + +<ParamField path="GITHUB_APP_PRIVATE_KEY" type="string"> + Raw GitHub App private key (alternative to BASE64 version) +</ParamField> + +<ParamField path="GITHUB_WEBHOOK_SECRET" type="string" required> + Webhook secret for verifying GitHub webhook signatures +</ParamField> + +<ParamField path="GITHUB_ORG" type="string"> + Restrict to specific GitHub organization +</ParamField> + +<ParamField path="GITHUB_PAT_TOKEN" type="string"> + GitHub Personal Access Token (for additional API access) +</ParamField> + + + +## Sandbox Sidecar (E2B) + +Provides sandboxed execution environment for Terraform operations. + +<ParamField path="PORT" type="number" default="9100"> + HTTP server port +</ParamField> + +<ParamField path="SANDBOX_RUNNER" type="string" required> + Must be set to `e2b` +</ParamField> + +<ParamField path="E2B_API_KEY" type="string" required> + E2B API key for authentication +</ParamField> + +<ParamField path="E2B_BAREBONES_TEMPLATE_ID" type="string" required> + E2B template ID for runtime environment +</ParamField> + +--- + +## UI/Frontend Service + +Web interface for OpenTaco. + +### WorkOS Authentication + +<ParamField path="WORKOS_CLIENT_ID" type="string" required> + WorkOS client ID +</ParamField> + +<ParamField path="WORKOS_API_KEY" type="string" required> + WorkOS API key +</ParamField> + +<ParamField path="WORKOS_REDIRECT_URI" type="string" required> + OAuth redirect URI (e.g., `http://localhost:3000/api/auth/callback`) +</ParamField> + +<ParamField path="WORKOS_COOKIE_PASSWORD" type="string" required> + Cookie encryption password (minimum 32 characters) +</ParamField> + +<ParamField path="WORKOS_WEBHOOK_SECRET" type="string"> + WorkOS webhook secret for verification +</ParamField> + + +## Database Services + +### PostgreSQL + +When using the bundled PostgreSQL container: + +<ParamField path="POSTGRES_USER" type="string" default="digger"> + Database username +</ParamField> + +<ParamField path="POSTGRES_PASSWORD" type="string" required> + Database password +</ParamField> + +<ParamField path="POSTGRES_DB" type="string" default="digger"> + Database name +</ParamField> + + + +## See Also + +- [Self-host with Docker](/ce/self-host/deploy-docker) +- [Self-host with Docker Compose](/ce/self-host/deploy-docker-compose) +- [Self-host with Helm](/ce/self-host/deploy-helm) +- [Authentication Methods](/ce/self-host/auth-methods) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/docs/docs.json new/digger-cli-0.6.141/docs/docs.json --- old/digger-cli-0.6.140/docs/docs.json 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/docs/docs.json 2026-01-21 04:28:40.000000000 +0100 @@ -147,7 +147,8 @@ "ce/reference/action-inputs", "ce/reference/api", "ce/reference/terraform.lock", - "ce/reference/comment-args" + "ce/reference/comment-args", + "ce/reference/environment-variables" ] }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/libs/ci/github/github.go new/digger-cli-0.6.141/libs/ci/github/github.go --- old/digger-cli-0.6.140/libs/ci/github/github.go 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/libs/ci/github/github.go 2026-01-21 04:28:40.000000000 +0100 @@ -44,19 +44,49 @@ } func (svc GithubService) GetUserTeams(organisation string, user string) ([]string, error) { - teamsResponse, _, err := svc.Client.Teams.ListTeams(context.Background(), organisation, nil) - if err != nil { - return nil, fmt.Errorf("failed to list github teams: %v", err) - } var teams []string - for _, team := range teamsResponse { - teamMembers, _, _ := svc.Client.Teams.ListTeamMembersBySlug(context.Background(), organisation, *team.Slug, nil) - for _, member := range teamMembers { - if *member.Login == user { - teams = append(teams, *team.Name) - break + + // Paginate through all teams + opts := &github.ListOptions{PerPage: 100} + for { + teamsResponse, resp, err := svc.Client.Teams.ListTeams(context.Background(), organisation, opts) + if err != nil { + return nil, fmt.Errorf("failed to list github teams: %v", err) + } + + for _, team := range teamsResponse { + // Paginate through all team members + memberOpts := &github.TeamListTeamMembersOptions{ + ListOptions: github.ListOptions{PerPage: 100}, } + memberLoop: + for { + teamMembers, memberResp, err := svc.Client.Teams.ListTeamMembersBySlug( + context.Background(), organisation, *team.Slug, memberOpts) + if err != nil { + // Log error but continue with other teams + slog.Warn("failed to list team members", "team", *team.Slug, "error", err) + break + } + + for _, member := range teamMembers { + if *member.Login == user { + teams = append(teams, *team.Name) + break memberLoop // Found user, move to next team + } + } + + if memberResp.NextPage == 0 { + break + } + memberOpts.Page = memberResp.NextPage + } + } + + if resp.NextPage == 0 { + break } + opts.Page = resp.NextPage } return teams, nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/taco/internal/unit/handler.go new/digger-cli-0.6.141/taco/internal/unit/handler.go --- old/digger-cli-0.6.140/taco/internal/unit/handler.go 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/taco/internal/unit/handler.go 2026-01-21 04:28:40.000000000 +0100 @@ -149,6 +149,18 @@ "detail": fmt.Sprintf("A unit with name '%s' already exists in this organization", name), }) } + if err == storage.ErrForbidden { + logger.Warn("Permission denied to create unit", + "operation", "create_unit", + "name", name, + "org_id", orgCtx.OrgID, + ) + analytics.SendEssential("unit_create_failed_forbidden") + return c.JSON(http.StatusForbidden, map[string]string{ + "error": "Permission denied", + "detail": "You don't have permission to create units. Contact your administrator to request access.", + }) + } logger.Error("Failed to create unit", "operation", "create_unit", "name", name, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.140/ui/src/api/statesman_units.ts new/digger-cli-0.6.141/ui/src/api/statesman_units.ts --- old/digger-cli-0.6.140/ui/src/api/statesman_units.ts 2026-01-16 00:22:27.000000000 +0100 +++ new/digger-cli-0.6.141/ui/src/api/statesman_units.ts 2026-01-21 04:28:40.000000000 +0100 @@ -202,7 +202,11 @@ }); if (!response.ok) { - throw new Error(`Failed to create unit: ${response.statusText}`); + const errorBody = await response.json().catch(() => ({})); + if (response.status === 403) { + throw new Error(errorBody.detail || "You don't have permission to create units. Contact your administrator to request access."); + } + throw new Error(errorBody.detail || errorBody.error || `Failed to create unit: ${response.statusText}`); } return response.json(); ++++++ digger-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.8xtwyb/_old 2026-01-21 14:19:37.416540975 +0100 +++ /var/tmp/diff_new_pack.8xtwyb/_new 2026-01-21 14:19:37.424541309 +0100 @@ -1,5 +1,5 @@ name: digger-cli -version: 0.6.140 -mtime: 1768519347 -commit: 4121d16e2490ab91cf08b62ad90740902b20e628 +version: 0.6.141 +mtime: 1768966120 +commit: 3ba4b6b9059736c32605d68329e3da66c7c0833e ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/digger-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.digger-cli.new.1928/vendor.tar.gz differ: char 135, line 2
