From 86e514347a4924752f8db3c05cf68e51078cdf13 Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sat, 28 Dec 2024 15:15:49 +0000 Subject: [PATCH 1/5] Bump version number to 3.3.2 --- cabal.config | 2 +- package.yaml | 2 +- stack.cabal | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cabal.config b/cabal.config index 209bb81298..9e2806dd98 100644 --- a/cabal.config +++ b/cabal.config @@ -169,7 +169,7 @@ constraints: , socks ==0.6.1 , split ==0.2.5 , splitmix ==0.1.0.5 - , stack ==3.3.1 + , stack ==3.3.2 , static-bytes ==0.1.1 , stm ==2.5.3.1 , stm-chans ==3.0.0.9 diff --git a/package.yaml b/package.yaml index 287751122c..a6199107e8 100644 --- a/package.yaml +++ b/package.yaml @@ -2,7 +2,7 @@ spec-version: 0.35.0 name: stack -version: '3.3.1' +version: '3.3.2' synopsis: The Haskell Tool Stack description: | Please see the documentation at diff --git a/stack.cabal b/stack.cabal index 7896a68946..d442faf75c 100644 --- a/stack.cabal +++ b/stack.cabal @@ -5,7 +5,7 @@ cabal-version: 2.0 -- see: https://github.com/sol/hpack name: stack -version: 3.3.1 +version: 3.3.2 synopsis: The Haskell Tool Stack description: Please see the documentation at for usage information. From 346c8302f7e31a3fa53e7d7d823ab0e0889c622a Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sat, 28 Dec 2024 18:05:48 +0000 Subject: [PATCH 2/5] Fix spaces in ChangeLog.md --- ChangeLog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 9d4c930969..a142b2ecad 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -41,9 +41,9 @@ Bug fixes: as '`stack`' if the executable file is named `stack` or, on Windows, `stack.exe`. Previously only how it was invoked was considered. * `stack test --no-run-tests --dry-run` no longer reports that Stack would test - project packages with test suites and - `stack bench --no-run-benchmarks --dry-run` no longer reports that Stack - would benchmark project packages with benchmarks. + project packages with test suites and + `stack bench --no-run-benchmarks --dry-run` no longer reports that Stack + would benchmark project packages with benchmarks. * `StackSetupShim` compiles with `Cabal >= 3.14.0.0`. ## v3.1.1 - 2024-07-28 From d5d4b0083a1f8fe5a53054f7491dd361898d53a3 Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sat, 28 Dec 2024 19:21:37 +0000 Subject: [PATCH 3/5] Minor updates to release process --- doc/maintainers/releases.md | 193 ++++++++++++++++++++++-------------- 1 file changed, 116 insertions(+), 77 deletions(-) diff --git a/doc/maintainers/releases.md b/doc/maintainers/releases.md index adde6ac392..4f6cc0339e 100644 --- a/doc/maintainers/releases.md +++ b/doc/maintainers/releases.md @@ -16,6 +16,7 @@ A Stack package or executable may have a version with three or four components: * Versions with an _even_ `Y` component are development versions (the `master` branch) + * Versions with an _odd_ `Y` component are stable versions (the `stable` branch, or in a `rc/vX.Y` release candidate branch for not-yet-released versions) @@ -23,38 +24,54 @@ A Stack package or executable may have a version with three or four components: * Versions with an _even_ `Z` component are unreleased versions (including release candidates) + * Versions with an _odd_ `Z` component are released versions + * Except for the `release` branch (which matches exactly the most recent release), all branches must have an even `Z` component + * Branches other than `stable`, `release`, and a `rc/vX.Y` release candidate will always have a `0` `Z` component ### Use of a fourth component * Release candidate binaries will be released with an odd `A` component + * Hackage-only dependency compatibility patch releases add a `A` component - (e.g. `v2.5.5.1`, in the `release` branch) + (e.g. `v2.5.1.1`, in the `release` branch) + * Pre-release unstable binaries will be released with the date as the `A` - component (e.g. `2.14.0.20240126`) + component (e.g. `3.6.0.20241228`) Examples: -* `2.15.0.0`: `v2.15.x` series pre-release branch (`rc/v2.15` branch) -* `2.15.0.1`: first release candidate for first release of `v2.15.x` series - (`rc/v2.15` branch) -* `2.15.0.2`: continuing development on pre-release branch -* `2.15.0.3`: second release candidate for first release of `v2.15.x` series - (`rc/v2.15` branch) -* `2.15.1`: first release of the `2.15.x` series (`release` branch) -* `2.15.2`: development for second release of `2.15.x` series +* `3.5.0.0`: `v3.5.x` series pre-release branch (`rc/v3.5` branch) + +* `3.5.0.1`: first release candidate for first release of `v3.5.x` series + (`rc/v3.5` branch) + +* `3.5.0.2`: continuing development on pre-release branch + +* `3.5.0.3`: second release candidate for first release of `v3.5.x` series + (`rc/v3.5` branch) + +* `3.5.1`: first release of the `3.5.x` series (`release` branch) + +* `3.5.2`: development for second release of `3.5.x` series (`stable` branch) -* `2.15.2.1`: first release candidate for second release of `2.15.x` series - (`rc/v2.15` branch) -* `2.15.3`: second release of `2.15.x` series (`release` branch) -* `2.15.3.1`: first Hackage-only patch of `2.15.3` (`release` branch) -* `2.15.3.2`: second Hackage-only patch of `2.15.3` (`release` branch) -* `2.14.0`: unstable development code (`master` branch) -* `2.14.0.20240126`: pre-release snapshot of unstable version (`master` branch) + +* `3.5.2.1`: first release candidate for second release of `3.5.x` series + (`rc/v3.5` branch) + +* `3.5.3`: second release of `3.5.x` series (`release` branch) + +* `3.5.3.1`: first Hackage-only patch of `3.5.3` (`release` branch) + +* `3.5.3.2`: second Hackage-only patch of `3.5.3` (`release` branch) + +* `3.6.0`: unstable development code (`master` branch) + +* `3.6.0.20241228`: pre-release snapshot of unstable version (`master` branch) ## Pre-release checks @@ -99,37 +116,52 @@ Examples: ### A: In the `master` branch -* `package.yaml`: bump to the next release candidate version (bump the second - component to the next odd number, ensure the third component is `0`, and add - patchlevel `0`; e.g. from `2.14.0` to `2.15.0.0`). +1. `package.yaml`: bump to the next release candidate version (bump the second + component to the next odd number, ensure the third component is `0`, and add + patchlevel `0`; e.g. from `3.4.0` to `3.5.0.0`). !!! attention Be sure to update also `stack.cabal` (for example by using `stack build --dry-run`). -* `ChangeLog.md`: Check for any entries that snuck into the previous version's - changes due to merges (`git diff origin/stable HEAD ChangeLog.md`) +2. `cabal.config`: Ensure the `stack` constraint is set to the same version as + in the `package.yaml`. + +3. `ChangeLog.md`: Check for any entries that snuck into the previous version's + changes due to merges (`git diff origin/stable HEAD ChangeLog.md`) + +4. Commit the changes to the `master` branch. ### B: Create a new release candidate branch -Cut a new release candidate (RC) branch named `rc/vX.Y` from the `master` -branch. +From the `master` branch, checkout a new release candidate (RC) branch named +`rc/vX.Y` (replacing `X.Y` with the first and second components of the release +version). + +~~~text +git checkout -b rc/vX.Y +~~~ ### C: Return to the `master` branch 1. `package.yaml`: bump version to the next unstable version (bump the second component to the next even number, ensure the third component is `0`; e.g. - from `2.15.0` to `2.16.0`). + from `3.5.0` to `3.6.0`). !!! attention Be sure to update also `stack.cabal` (for example by using `stack build --dry-run`). -2. `Changelog.md`: +2. `cabal.config`: Ensure the `stack` constraint is set to the same version as + in the `package.yaml`. + +3. `Changelog.md`: + * Change the title of the existing **Unreleased changes** section to what - will be the next final (non-RC) release (e.g. `v2.15.1`). + will be the next final (non-RC) release (e.g. `v3.5.1`). + * Add new "Unreleased changes" section: ~~~markdown @@ -148,18 +180,19 @@ branch. Bug fixes: ~~~ -3. `cabal.config`: Ensure the `stack` constraint is set to the same version as - in the `package.yaml`. +4. Commit the changes to the `master` branch. -### D: In the release candidate branch +### D: For each release candidate, in the release candidate branch 1. Review documentation for any changes that need to be made: * Ensure all the documentation pages are listed in the `mkdocs.yaml` file. Use `git diff --stat origin/stable..HEAD doc/` to look for new or deleted files. + * Any new documentation pages should have the "may not be correct for the released version of Stack" warning at the top. + * Search for old Stack version, unstable Stack version, and the next "obvious" possible versions in sequence, and `UNRELEASED` and replace with next release version (`X.Y.1`, where Y is odd). @@ -172,16 +205,21 @@ branch. * Search for old snapshots, set to latest snapshot (e.g. in documentation where it references the "currently the latest LTS") + * Look for any links to "latest" (`latest/`) documentation, replace with version tag 2. Check for any platform entries that need to be added to (or removed from): * [releases.yaml](https://github.com/fpco/stackage-content/blob/master/stack/releases.yaml), + * [install_and_upgrade.md](https://github.com/commercialhaskell/stack/blob/master/doc/install_and_upgrade.md), + * [get-stack.sh](https://github.com/commercialhaskell/stack/blob/master/etc/scripts/get-stack.sh), + * [doc/README.md](https://github.com/commercialhaskell/stack/blob/master/doc/README.md), and + * `get.haskellstack.org` redirects. 3. Re-do the pre-release checks (see the section above). @@ -225,7 +263,9 @@ branch. 5. Ensure the `stack ==` constraint in `cabal.config` is set to be equal to the same version as `package.yaml`. -6. Follow the steps in the *Release process* section below that apply. +6. Commit the changes to the release candidate branch. + +7. Follow the steps in the *Release process* section below that apply. ## Release process @@ -266,6 +306,7 @@ final release. * Add `(release candidate)` to the name field and ensure that *This is a pre-release* is checked. + * Add the ChangeLog to the description. Publish the GitHub release. @@ -281,8 +322,11 @@ final release. prerequisites are: * a computer with that platform (operating system, machine architecture); + * a sufficiently-recent existing version of Stack for that platform; + * a tool to print SHA checksums, such as `shasum` on Linux and macOS; and + * the GNU Privacy Guard tool (`gpg`), which has had imported the private key used to sign Stack executables (see further below). @@ -335,13 +379,16 @@ final release. In the `rc/vX.Y` branch: * `package.yaml`: bump the version number. Bump the fourth component to an - even number (e.g. from `2.15.0.1` to `2.15.0.2`). + even number (e.g. from `3.5.0.1` to `3.5.0.2`). !!! attention Be sure to update also `stack.cabal` (for example by using `stack build --dry-run`). + * `cabal.config`: Ensure the `stack` constraint is set to the same version + as in the `package.yaml`. + * `ChangeLog.md`: Add an “Unreleased changes” section (update the “changes since” version): @@ -372,32 +419,35 @@ final release. ### G: Announce the release candidate - Announce the release candidate on the - [Haskell Community](https://discourse.haskell.org/c/announcements/10/l/latest) - forum. + Announce the release candidate: - Announce the release candidate in the Haskell Foundation's - [general](https://matrix.to/#/#haskell-foundation-general:matrix.org) room - (address `#haskell-foundation-general:matrix.org`) on - [Matrix](https://matrix.org/). + * on the + [Haskell Community](https://discourse.haskell.org/c/announcements/10/l/latest) + forum; - Announce the release candidate in the Haskell - [Stack and Stackage](https://matrix.to/#/#haskell-stack:matrix.org) room - (address `#haskell-stack:matrix.org`) on [Matrix](https://matrix.org/). + * in the Haskell Foundation's + [general](https://matrix.to/#/#haskell-foundation-general:matrix.org) room + (address `#haskell-foundation-general:matrix.org`) on + [Matrix](https://matrix.org/); + + * in the Haskell + [Stack and Stackage](https://matrix.to/#/#haskell-stack:matrix.org) room + (address `#haskell-stack:matrix.org`) on [Matrix](https://matrix.org/); + and - Announce the release candidate in Reddit's - [Haskell](https://www.reddit.com/r/haskell/) community. + * in Reddit's [Haskell](https://www.reddit.com/r/haskell/) community. In each case, use the subject (change 'first' to 'second' etc for subsequent release candidates): - * `ANN: first release candidate for stack-X.Y.Z` + * `[ANN] First release candidate for Stack X.Y.Z` In the message, include: * a link to the release on GitHub (`https://github.com/commercialhaskell/stack/releases/tag/rc/vX.Y.Z.A`) to download it + * the release description from Github. === "Final Release" @@ -463,8 +513,11 @@ final release. prerequisites are: * a computer with that platform (operating system, machine architecture); + * a sufficiently-recent existing version of Stack for that platform; + * a tool to print SHA checksums, such as `shasum` on Linux and macOS; and + * the GNU Privacy Guard tool (`gpg`), which has had imported the private key used to sign Stack executables (see further below). @@ -593,31 +646,15 @@ final release. In the `stable` branch: * `package.yaml`: bump the version number. Bump the third component to an - even number (e.g. from `2.15.1` to `2.15.2`). + even number (e.g. from `3.5.1` to `3.5.2`). !!! attention Be sure to update also `stack.cabal` (for example by using `stack build --dry-run`). - * `ChangeLog.md`: Add an “Unreleased changes” section (update the “changes - since” version): - - ~~~markdown - ## Unreleased changes - - Release notes: - - **Changes since vX.Y.Z:** - - Major changes: - - Behavior changes: - - Other enhancements: - - Bug fixes: - ~~~ + * `cabal.config`: Ensure the `stack` constraint is set to the same version + as in the `package.yaml`. ### I: Update the repository's issue and pull request templates @@ -636,24 +673,26 @@ final release. ### K: Announce the release - Announce the release on the - [Haskell Community](https://discourse.haskell.org/c/announcements/10/l/latest) - forum. + Announce the release: - Announce the release candidate in the Haskell Foundation's - [general](https://matrix.to/#/#haskell-foundation-general:matrix.org) - room (address `#haskell-foundation-general:matrix.org`) on - [Matrix](https://matrix.org/). + * on the + [Haskell Community](https://discourse.haskell.org/c/announcements/10/l/latest) + forum. - Announce the release in the Haskell - [Stack and Stackage](https://matrix.to/#/#haskell-stack:matrix.org) room - (address `#haskell-stack:matrix.org`) on [Matrix](https://matrix.org/). + * in the Haskell Foundation's + [general](https://matrix.to/#/#haskell-foundation-general:matrix.org) + room (address `#haskell-foundation-general:matrix.org`) on + [Matrix](https://matrix.org/). - Announce the release in Reddit's - [Haskell](https://www.reddit.com/r/haskell/) community. + * in the Haskell + [Stack and Stackage](https://matrix.to/#/#haskell-stack:matrix.org) room + (address `#haskell-stack:matrix.org`) on [Matrix](https://matrix.org/). + + * in Reddit's [Haskell](https://www.reddit.com/r/haskell/) community. In each case, use the subject: - * `ANN: stack-X.Y.Z` + + * `[ANN] Stack X.Y.Z` In the message, include: From c796089a4db0b39a586705bc823ff7a942c3687f Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sat, 28 Dec 2024 21:07:26 +0000 Subject: [PATCH 4/5] Rearrange version scheme and release process --- doc/maintainers/releases.md | 81 ++++++------------------------- doc/maintainers/version_scheme.md | 63 ++++++++++++++++++++++++ mkdocs.yml | 1 + stack.cabal | 1 + 4 files changed, 79 insertions(+), 67 deletions(-) create mode 100644 doc/maintainers/version_scheme.md diff --git a/doc/maintainers/releases.md b/doc/maintainers/releases.md index 4f6cc0339e..dd7168e64b 100644 --- a/doc/maintainers/releases.md +++ b/doc/maintainers/releases.md @@ -2,80 +2,27 @@ # Releases -!!! todo "To do - Simplify the branch or version structure" +## Branches - Just release from the `master` branch (but keep the `stable` branch - tracking the latest stable release plus updates to documentation). +* The `release` branch is intended to preserve the most recent release + (including, if applicable, Hackage-only dependency compatibility patch + releases). -## Version scheme +* The `stable` branch is intended to be a copy of the `release` branch together + with any subsequent commits that (only) revise the documentation for the most + recent release. That documentation is presented at . -A Stack package or executable may have a version with three or four components: -`X.Y.Z` or `X.Y.Z.A`. +* The `master` branch is the current development branch. It is intended that a + working version of Stack can be built from the branch. The release process + begins with a copy of the branch. -### Development or stable versions - -* Versions with an _even_ `Y` component are development versions (the `master` - branch) - -* Versions with an _odd_ `Y` component are stable versions (the `stable` branch, - or in a `rc/vX.Y` release candidate branch for not-yet-released versions) - -### Unreleased or released versions - -* Versions with an _even_ `Z` component are unreleased versions (including - release candidates) - -* Versions with an _odd_ `Z` component are released versions - -* Except for the `release` branch (which matches exactly the most recent - release), all branches must have an even `Z` component - -* Branches other than `stable`, `release`, and a `rc/vX.Y` release candidate - will always have a `0` `Z` component - -### Use of a fourth component - -* Release candidate binaries will be released with an odd `A` component - -* Hackage-only dependency compatibility patch releases add a `A` component - (e.g. `v2.5.1.1`, in the `release` branch) - -* Pre-release unstable binaries will be released with the date as the `A` - component (e.g. `3.6.0.20241228`) - -Examples: - -* `3.5.0.0`: `v3.5.x` series pre-release branch (`rc/v3.5` branch) - -* `3.5.0.1`: first release candidate for first release of `v3.5.x` series - (`rc/v3.5` branch) - -* `3.5.0.2`: continuing development on pre-release branch - -* `3.5.0.3`: second release candidate for first release of `v3.5.x` series - (`rc/v3.5` branch) - -* `3.5.1`: first release of the `3.5.x` series (`release` branch) - -* `3.5.2`: development for second release of `3.5.x` series - (`stable` branch) - -* `3.5.2.1`: first release candidate for second release of `3.5.x` series - (`rc/v3.5` branch) - -* `3.5.3`: second release of `3.5.x` series (`release` branch) - -* `3.5.3.1`: first Hackage-only patch of `3.5.3` (`release` branch) - -* `3.5.3.2`: second Hackage-only patch of `3.5.3` (`release` branch) - -* `3.6.0`: unstable development code (`master` branch) - -* `3.6.0.20241228`: pre-release snapshot of unstable version (`master` branch) +* A `rc/vX.Y` branch (named after a release in the Stack X.Y.* series) is + intended to be for release candidates and final releases. It begins as a copy + of the `master` branch. ## Pre-release checks -1. Check for any P0 and P1 issues that should be dealt with before release. +1. Check for any important issues that should be dealt with before release. 2. Check for un-merged pull requests that should be merged before release. diff --git a/doc/maintainers/version_scheme.md b/doc/maintainers/version_scheme.md new file mode 100644 index 0000000000..d409cfae3c --- /dev/null +++ b/doc/maintainers/version_scheme.md @@ -0,0 +1,63 @@ +
+ +# Version scheme + +A Stack package or executable may have a version with three or four components: +`X.Y.Z` or `X.Y.Z.A`. + +## Development or stable versions + +* Versions with an _even_ `Y` component are development versions (the `master` + branch) + +* Versions with an _odd_ `Y` component are stable versions (the `stable` branch, + or in a `rc/vX.Y` release candidate branch for not-yet-released versions) + +## Unreleased or released versions + +* Versions with an _even_ `Z` component are unreleased versions (including + release candidates) + +* Versions with an _odd_ `Z` component are released versions + +* Except for the `release` branch, all branches must have an even `Z` component + +* Except for the `release`, `stable` and `rc/vX.Y` release candidate branches, + all branches will have a `0` `Z` component + +## Use of a fourth component + +* Release candidate binaries will be released with an odd `A` component + +* Hackage-only dependency compatibility patch releases add a `A` component + (e.g. `v2.5.1.1`, in the `release` branch) + +* Pre-release unstable binaries will be released with the date as the `A` + component (e.g. `3.6.0.20241228`) + +## Examples + +* `3.5.0.0`: `v3.5.*` series pre-release branch (`rc/v3.5` branch) + +* `3.5.0.1`: first release candidate for first release of `v3.5.*` series + (`rc/v3.5` branch) + +* `3.5.0.2`: continuing development on pre-release branch + +* `3.5.0.3`: second release candidate for first release of `v3.5.*` series + (`rc/v3.5` branch) + +* `3.5.1`: first release of the `3.5.*` series (`release` branch) + +* `3.5.2.1`: first release candidate for second release of `3.5.*` series + (`rc/v3.5` branch) + +* `3.5.3`: second release of `3.5.*` series (`release` branch) + +* `3.5.3.1`: first Hackage-only patch of `3.5.3` (`release` branch) + +* `3.5.3.2`: second Hackage-only patch of `3.5.3` (`release` branch) + +* `3.6.0`: unstable development code (`master` branch) + +* `3.6.0.20241228`: pre-release snapshot of unstable version (`master` branch) diff --git a/mkdocs.yml b/mkdocs.yml index 6d463f08bd..9e3a024ec8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -127,6 +127,7 @@ nav: - Contributor's guide: CONTRIBUTING.md - Dev Containers: dev_containers.md - Maintainers: + - Version scheme: maintainers/version_scheme.md - Releases: maintainers/releases.md - Maintainer team process: maintainers/team_process.md - Add GHC version: maintainers/ghc.md diff --git a/stack.cabal b/stack.cabal index d442faf75c..152b2f6226 100644 --- a/stack.cabal +++ b/stack.cabal @@ -96,6 +96,7 @@ extra-source-files: doc/maintainers/self-hosted_runners.md doc/maintainers/stack_errors.md doc/maintainers/team_process.md + doc/maintainers/version_scheme.md doc/other_resources.md doc/README.md doc/SIGNING_KEY.md From 541546ef31397836e40e85202b48b83265188b5f Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Tue, 31 Dec 2024 09:44:49 +0000 Subject: [PATCH 5/5] Correct doc references to APPDIR, to be APPDATA --- doc/configure/yaml/index.md | 2 +- doc/topics/stack_root.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/configure/yaml/index.md b/doc/configure/yaml/index.md index 9911d73873..78aed557d2 100644 --- a/doc/configure/yaml/index.md +++ b/doc/configure/yaml/index.md @@ -122,5 +122,5 @@ variables, respectively. If Stack is following the XDG Base Directory Specification, the location of `config.yaml` (for user-specific options) is `/stack`. If the `XDG_CONFIG_HOME` environment variable does not exist, the default is - `~/.config/stack` on Unix-like operating systems and `%APPDIR%\stack` on + `~/.config/stack` on Unix-like operating systems and `%APPDATA%\stack` on Windows. diff --git a/doc/topics/stack_root.md b/doc/topics/stack_root.md index f80084560d..973328b0ce 100644 --- a/doc/topics/stack_root.md +++ b/doc/topics/stack_root.md @@ -33,7 +33,7 @@ command line. === "Windows" - The default Stack root is `$Env:APPDIR\stack`. + The default Stack root is `$Env:APPDATA\stack`. If the `LOCALAPPDATA` environment variable exists, then the default location of tools is `$Env:LOCALAPPDATA\Programs\stack`. Otherwise, it is the @@ -61,7 +61,7 @@ command line. === "Windows (Command Prompt)" - The default Stack root is `%APPDIR%\stack`. + The default Stack root is `%APPDATA%\stack`. If the `LOCALAPPDATA` environment variable exists, then the default location of tools is `%LOCALAPPDATA%\Programs\stack`. Otherwise, it is the `programs` @@ -91,11 +91,11 @@ command line. The Stack root is `/stack`. If the `XDG_DATA_HOME` environment variable does not exist, the default is `~/.local/share/stack` - on Unix-like operating systems and `%APPDIR%\stack` on Windows. + on Unix-like operating systems and `%APPDATA%\stack` on Windows. The location of `config.yaml` is `/stack`. If the `XDG_CONFIG_HOME` environment variable does not exist, the default is - `~/.config/stack` on Unix-like operating systems and `%APPDIR%\stack` on + `~/.config/stack` on Unix-like operating systems and `%APPDATA%\stack` on Windows. This approach treats: