Release Process

May 12, 2026 ยท View on GitHub

In order to publish the ATT&CK website, follow the process outlined here. Hopefully to no one's surprise, only members with appropriate access can follow these steps.

If you are only updating the banner and nothing else, follow these steps.

Website changes

  1. Verify that all features/bugs/documentation updates are tied to issues from the issue tracker.

    • Update and commit any necessary changes to CHANGELOG.md
  2. Merge the master branch into the develop branch, since commits to master may have been made for banner updates.

    git checkout develop
    git merge origin/master
    
  3. Verify that all required changes for the next release are present in the develop branch, including merging finished feature/bugfix branches.

    • Update the website version number in modules/site_config.py
    • Update any dependencies needed in requirements.txt.
    • If applicable, update the year in the following files:
      • attack-theme/templates/general/base-template.html
      • modules/website_build/static_pages/terms-of-use.md
      • NOTICE.txt
      • LICENSE.txt
      • README.md
  4. If this website build includes ATT&CK/STIX content updates, see the appropriate section below for either Major or Minor ATT&CK releases

  5. Build the website locally to do one final test that it looks correct

    • e.g. python update-attack.py --attack-brand --extras --no-test-exitstatus
    • Look in the generated reports/broken-links-report.txt for broken links. Any broken links that start with /versions/v* can be ignored.
  6. Commit and push changes to the develop branch.

  7. Open and accept the pull request from develop to master https://github.com/mitre-attack/attack-website/pulls.

ATT&CK Content updates

Consult these sections as needed for step 4 in the above list.

  • Create a detailed changelog for the release:

    • Create a new folder: modules/resources/docs/changelogs/v<previous-ATT&CK-version>-v<current-ATT&CK-version>
    • Create a detailed changelog and excel files using mitreattack-python
    ATTACK_WEBSITE_REPO="/path/to/attack-website/repo"
    ATTACK_PREVIOUS_VERSION=18.1
    ATTACK_CURRENT_VERSION=19.0
    
    # generate detailed changelog
    uvx --from mitreattack-python attack-changelog \
      --attack-website-links \
      --old-version ${ATTACK_PREVIOUS_VERSION} \
      --new-version ${ATTACK_CURRENT_VERSION} \
      --output-dir ${ATTACK_WEBSITE_REPO}/modules/resources/docs/changelogs/v${ATTACK_PREVIOUS_VERSION}-v${ATTACK_CURRENT_VERSION}
    
    # generate excel files
    uvx --from mitreattack-python attack-to-excel from-release \
      --version ${ATTACK_CURRENT_VERSION} \
      --output=${ATTACK_WEBSITE_REPO}/modules/resources/docs/attack-excel-files
    

Major release

  • Update data/versions.json

    • Current: all information should reference the latest release
    • Previous:
      • Dates should not overlap
      • cti_url: should be tag URL for the release on the mitre/cti repo
      • commit: should be sha256 hash of latest commit from mitre-attack/attack-website on the gh-pages branch prior to new content release
  • (If not already completed for this release) Run the archive-website.py script to get the previously released archives of the ATT&CK website

    • Upload the tar.gz of the latest previous version of the website to the Archived Website Files release
    • Optional - If sufficient changes were made to the archive process then re-upload all tar.gz files
  • Update notes

    • Add new file: modules/resources/static_pages/updates-<month>-<year>.md
    • Update former updates announcement file to specify end date of old release
    • Create the release-summary table for the new updates page
      • This is the markdown table at the top of the release announcement that lists the ATT&CK version, start/end dates, MITRE/CTI release links, and changelog links
      • TODO - write a script to create the html table data for new releases
  • Update CHANGELOG.md

    • Add a bullet point to the Features section in the following format
    * Release [ATT&CK content version X.Y](https://github.com/mitre/cti/releases/tag/ATT%26CK-vX.Y).
      See the release notes [here](https://attack.mitre.org/resources/updates/updates-<month>-<year>/).
    
  • Update the layer_version and navigator_version in modules/site_config.py if navigator version or navigator layer version has been updated.
    Check the layer specification version here and the navigator version here.

Minor release

  • Update data/versions.json

    • Current: all information should reference the latest release
    • Previous: leave alone!
  • Update modules/resources/static_pages/updates-<month>-<year>.md

    • Minor releases currently don't get their own update page, so make the following updates to the table at the top of the page:
      • Under the Data column: Add a new entry for the latest tag, using <br /> to separate them
      • Under the Changelogs column: Add a new entry for the latest detailed changelog, for both HTML and JSON (also using <br /> as a separator)
      • TODO - write a script to update the html table data for new releases
  • Update CHANGELOG.md

    • Add a bullet point to the Features section in the following format
    * Release ATT&CK content version X.Y.
      See detailed changes [here](https://github.com/mitre/cti/releases/tag/ATT%26CK-vX.Y).
    
  • Update the layer_version and navigator_version in modules/site_config.py if navigator version or navigator layer version has been updated.
    Check the layer specification version here and the navigator version here.