DMD Release Building

From D Wiki
Revision as of 07:28, 7 November 2016 by S-ludwig (talk | contribs) (Add a draft for the DUB release build process)
Jump to: navigation, search


Setup boxes

  • See the build script for how to setup the vagrant boxes.

Build steps

  • Make sure dmd/VERSION contains the to be build version

 cd dmd
 git checkout stable
 echo 2.072.1 > VERSION
 git add VERSION
 git commit -m 'update VERSION file'
 git push upstream stable

  • Combining the changelog
    • copy the changelog.dd parts from the dmd/druntime/phobos stable repos to a new
    • use tools/changed to get the bugzilla changelog list
    • Use to update prev/next navigation in changelogs
    • Update
  • Test building the stable branch
    • cd installer/create_dmd_release
    • rdmd build_all v2.070.2 stable
    • possibly fix build script, repos, or update patches
  • Tag a new version

Push the tags to your private forks (origin) first to test whether the release builds cleanly. Tags on upstream must not be changed ever. To build from your private forks you need to change the base url in cloneSources.

 for proj in dmd druntime phobos tools installer; do
   pushd $proj
   git fetch upstream
   git tag -sm 'v2.071.2-b4' v2.071.2-b4 upstream/stable
   git push origin v2.071.2-b4

  • Build binaries
    • cd installer/create_dmd_release
    • rm -rf build
    • rdmd build_all v2.070.2 v2.071.2-b4
  • Sign binaries

 for file in build/*; do
   gpg2 -b $file

  • Perform additional tests
  • Upload binaries
    • rsync --progress -av --chmod=ug=rw build/
    • Upload to releases or pre-releases
      • aws --profile ddo s3 sync build/ s3://$(date '+%Y')/ --acl public-read --cache-control max-age=604800
      • aws --profile ddo s3 sync build/ s3://$(date '+%Y')/ --acl public-read --cache-control max-age=604800
      • Make sure to check for errors during upload and probably repeat
  • If everything went right until here, push the tags to upstream

 for proj in dmd druntime phobos tools installer; do
   git -C $proj push upstream v2.068.1-b1

    • aws --profile ddo s3 cp LATEST_BETA s3:// --acl public-read
    • aws --profile ddo s3 cp LATEST s3:// --acl public-read
  • Update
    • cd (
    • ls create_dmd_release/build >> make-links
    • edit 'make-links' and add symlinks for all the new files
    • run ./make-links
    • build make -C src
    • and run ./src/build-gen-index s3_index generate to regenerate the download pages to ./ddo
    • aws --profile ddo s3 sync ./ddo/ s3:// --acl public-read --cache-control max-age=604800
    • commit and push changes to
  • Update LATEST_BETA or LATEST on ftp server (for compatibility with older scripts)
    • ssh 'echo -n 2.071.2-b4 > /var/pub/'
    • ssh 'echo -n 2.071.2 > /var/pub/'
  • Merge stable branches into master

 cd dmd # repeat for every repo
 git fetch upstream
 git checkout -b merge_stable upstream/master
 git merge upstream/stable
 # fix any conflicts
 git hub pull new -b master

  • Rebuild and sync
  • Use a tool like Check-My-Links to check the download pages
  • Write an announcement to digitalmars.D.announce and/or dmd-beta.
  • Update the version in D's Wikipedia article
  • Publish announcements to Twitter, Reddit, HackerNews, Slashdot (make noise!)
  • Update DMD version in this D wiki

Draft for DUB release building

 cd dub
 git checkout stable
 # (... edit change log with the final release date ...)
 echo "module dub.version_;" > source/dub/version_.d
 echo "enum dubVersion = \"$DUB_VERSION\";" >> source/dub/version_.d
 git add source/dub/version_.d
 git commit -m "Update change log and version fie."
 # should be a proper tag with message, possibly signed
 git tag v$DUB_VERSION -m "$DUB_VERSION release"
 # if everything went right:
 git push upstream $DUB_VERSION
 # (... copy binary to release archive ...)

Note: downloads on are automatically built once the new version tag gets pushed.