semaphoreui/semaphore · error

error at integrations

Error message

error at integrations[%d]: %s

What it means

Produced during project restore in services/project/restore.go when the i-th entry of the backup's Integration list fails to restore itself via its Restore method. It is an aggregation wrapper: the %s embeds the underlying per-integration error (bad stored integration data, missing secret, or a store failure), while the %d index identifies exactly which integrations[] entry in the backup archive is at fault, letting callers distinguish one bad record from a wholesale restore failure.

Solutions

  1. Read the embedded per-entry message to identify which integration type failed and why
  2. Fix or remove the offending integration entry from the backup archive (the index in the message points at the exact element) and retry the restore
  3. If the integration references a missing secret or key, restore the secret storage first or re-create the referenced credential before re-running
  4. Report the index to the user so they can inspect that specific integration in the exported project
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at services/project/restore.go:687 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of semaphoreui/semaphore@1774ccb71a (2026-09-07). Data as JSON: /api/errors/5741d7fc82b74b1f. Report an issue: GitHub.

Appendix: source

Thrown at services/project/restore.go:687

		if string(o.Type) == "deploy" {
			deployTemplates = append(deployTemplates, i)
			continue
		}
		if err := o.Restore(&b); err != nil {
			return nil, fmt.Errorf("error at templates[%d]: %s", i, err.Error())
		}
	}

	for _, i := range deployTemplates {
		o := backup.Templates[i]
		if err := o.Restore(&b); err != nil {
			return nil, fmt.Errorf("error at templates[%d]: %s", i, err.Error())
		}
	}

	for i, o := range backup.Integration {
		if err := o.Restore(&b); err != nil {
			return nil, fmt.Errorf("error at integrations[%d]: %s", i, err.Error())
		}
	}

	for _, o := range backup.IntegrationAliases {
		alias := db.IntegrationAlias{
			Alias:     o,
			ProjectID: b.meta.ID,
		}
		_, _ = b.store.CreateIntegrationAlias(alias)
	}

	for i, o := range backup.Schedules {
		if err := o.Restore(&b); err != nil {
			return nil, fmt.Errorf("error at schedules[%d]: %s", i, err.Error())
		}
	}

	for i, o := range backup.Runners {

View on GitHub (pinned to 1774ccb71a)