vectordotdev/vector · error

already exists for release . Delete it (or move it aside)…

Error message

{} already exists for release {new_version}. Delete it (or move it aside) and re-run.

What it means

The command detected an existing upgrade-guide/highlights file for the target release (found via `find_existing_upgrade_guide` which matches by release version across dated filenames) and aborts to avoid rendering two 'upgrade guide' cards for the same release in the single-page release layout.

Solutions

  1. Delete or move the existing highlights/upgrade-guide file identified in the message, then re-run.
  2. If the existing guide is authoritative (hand-authored), keep it and remove whatever would cause regeneration of the highlights, or skip that part of the run.
  3. Confirm the version argument matches the intended release; a wrong version can collide with an older guide.

Example fix

// before
vdev release generate-cue 0.46.0  # fails: 2026-09-14-upgrading-0.45-to-0.46.md exists
// after
git rm website/content/en/highlights/2026-09-14-upgrading-0.45-to-0.46.md
vdev release generate-cue 0.46.0
Defensive patterns

Strategy: validation

Validate before calling

ls website/content/en/highlights/ | grep -- "0.46" || echo 'no guide for this release'

Prevention

When it happens

Trigger: Running `vdev release generate-cue` with breaking changes when any file in the highlights directory matches `upgrade_guide_filename` for `new_version` — including a guide from a previous UTC day or a maintainer-authored guide dated earlier.

Common situations: Regenerating a release after the highlights file was already committed; a maintainer pre-wrote an upgrade guide by hand for the same version; the run spans a UTC date boundary so the dated filename differs but the version matches.

Understand the failure class

Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.

Related errors


AI-assisted analysis of vectordotdev/vector@0d4ab78a4f (2026-09-16). Data as JSON: /api/errors/c89f4f1b9f5fe1ae. Report an issue: GitHub.

Appendix: source

Thrown at vdev/src/commands/release/generate_cue.rs:122

    // failure doesn't leave a partial CUE file behind (which would then trip the
    // "file already exists" guard on the next run).
    let cue_text = render_release_cue(&new_version, &changelog_entries);
    let breaking: Vec<&BreakingDetails> = changelog_entries
        .iter()
        .filter_map(|e| e.breaking_details.as_ref())
        .collect();
    let highlights_md = if breaking.is_empty() {
        None
    } else {
        // Guard against clobbering an existing upgrade guide for this release. We match on
        // the version-suffix rather than the exact `today`-prefixed filename so a partial
        // run from a previous UTC day (or a maintainer-authored guide dated earlier) is
        // still detected. The single-page release layout would otherwise render two
        // "upgrade guide" cards for the same release.
        if let Some(existing) =
            find_existing_upgrade_guide(&repo_root.join(HIGHLIGHTS_DIR), &new_version)?
        {
            bail!(
                "{} already exists for release {new_version}. Delete it (or move it aside) and re-run.",
                existing.display()
            );
        }
        validate_breaking_anchors(&breaking)?;
        Some(render_upgrade_guide(&today, &new_version, &breaking))
    };

    // Everything valid — commit the writes atomically via .tmp + rename.
    atomic_write(&cue_path, &cue_text)?;
    if let Some(md) = highlights_md {
        if let Err(e) = atomic_write(&highlights_path, &md) {
            // Highlights write failed after CUE succeeded — roll the CUE back so the next
            // attempt doesn't hit the "file already exists" guard.
            drop(fs::remove_file(&cue_path));
            return Err(e);
        }
        success!("Wrote {}", highlights_path.display());

View on GitHub (pinned to 0d4ab78a4f)