semaphoreui/semaphore · error

BoltDB is not supported starting from version 2.19

Error message

BoltDB is not supported starting from version 2.19

What it means

During interactive setup (`semaphore setup`), choosing option 2 (BoltDB) hits an intentional `panic`. BoltDB support was removed in Semaphore 2.19; the prompt still lists it marked NOT SUPPORTED so users migrating from old configs discover the removal explicitly rather than silently creating a broken config.

Solutions

  1. Choose 1 (MySQL), 3 (PostgreSQL), or 4 (SQLite) instead of BoltDB.
  2. If migrating old BoltDB data, export/upgrade via an intermediate Semaphore version that still supported BoltDB before 2.19.
  3. For scripted setups, feed the new default (MySQL/PostgreSQL) answer instead of 2.
  4. Store the database choice in the config file (`database.dialect`) to skip the interactive prompt entirely.

Example fix

// before (interactive answer)
What database to use: 2
// after
What database to use: 1  # MySQL (or 3 PostgreSQL / 4 SQLite)
Defensive patterns

Strategy: validation

Validate before calling

// in automation, sanitize the answer before feeding stdin:
case "$DB_CHOICE" in
  1|3|4) ;; # allowed
  *) echo "BoltDB unsupported; choose 1, 3, or 4" >&2; exit 1 ;;
esac

Try / catch

// Go side: replace panic with a friendly error
if db == 2 {
    fmt.Fprintln(os.Stderr, "BoltDB is not supported starting from version 2.19; choose MySQL, PostgreSQL, or SQLite")
    os.Exit(1)
}

Prevention

When it happens

Trigger: Answering `2` at the "What database to use" prompt of `semaphore setup`.

Common situations: Operators following old documentation or muscle memory from pre-2.19 installs; scripted/automated setup piping a legacy answer of 2 into the prompt.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at cli/setup/setup.go:97

func InteractiveSetup(conf *util.ConfigType) {
	fmt.Print(interactiveSetupBlurb)

	dbPrompt := `What database to use:
   1 - MySQL
   2 - BoltDB (NOT SUPPORTED)
   3 - PostgreSQL
   4 - SQLite
`

	var db int
	askValue(dbPrompt, "1", &db)

	switch db {
	case 1:
		conf.Dialect = util.DbDriverMySQL
		scanMySQL(conf)
	case 2:
		panic("BoltDB is not supported starting from version 2.19")
	case 3:
		conf.Dialect = util.DbDriverPostgres
		scanPostgres(conf)
	case 4:
		conf.Dialect = util.DbDriverSQLite
		scanSQLite(conf)
	default:
		panic("Unsupported database dialect")
	}

	defaultPlaybookPath := filepath.Join(os.TempDir(), "semaphore")
	askValue("Playbook path", defaultPlaybookPath, &conf.TmpPath)
	conf.TmpPath = filepath.Clean(conf.TmpPath)

	askValue("Public URL (optional, example: https://example.com/semaphore)", "", &conf.WebHost)

	askConfirmation("Enable email alerts?", false, &conf.EmailAlert)
	if conf.EmailAlert {

View on GitHub (pinned to 1774ccb71a)