Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,28 @@ name: Build and test

on:
push:
branches: ["**"] # not tags: a release tag runs this workflow through release.yml
pull_request:
workflow_dispatch:
workflow_call:

jobs:
workflows:
name: lint the workflows
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.11.3
with:
pixi-version: v0.84.1
environments: release
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'master' }}

- name: Lint the GitHub Actions workflows
run: pixi run workflows

build-test:
name: ${{ matrix.environment }}
runs-on: ubuntu-latest
Expand Down Expand Up @@ -41,12 +59,3 @@ jobs:
with:
name: mess-static-linux-64
path: .pixi/envs/static/bin/mess*

- name: Upload mess-static to the Auto-Mech channel
if: matrix.environment == 'static' && github.event_name == 'push' && github.ref_name == 'master' && github.repository_owner == 'Auto-Mech'
run: |
pixi publish --path static --target-dir dist
# As before: an upload of an existing version fails, which is not an error here
pixi exec rattler-build upload anaconda -o Auto-Mech dist/*.conda || true
env:
ANACONDA_API_KEY: ${{ secrets.ANACONDA_API_KEY }}
98 changes: 98 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Release

on:
push:
tags:
- "v*.*.*"

permissions:
contents: read

jobs:
# Releases are made from master only: stop if the tag is on another branch
check:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # all branches, to compare the tag with master

- name: Check that the tagged commit is on master
run: git merge-base --is-ancestor "$GITHUB_SHA" origin/master

test:
needs: check
uses: ./.github/workflows/build.yml

publish:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # for prefix.dev Trusted Publishing

steps:
- uses: actions/checkout@v4

- uses: prefix-dev/setup-pixi@v0.11.3
with:
pixi-version: v0.84.1
environments: release
cache: true

- name: Build the conda packages
run: pixi run build-conda

- name: Upload the conda packages
uses: actions/upload-artifact@v4
with:
name: conda-packages
path: dist/*.conda

# Only the main repository is a trusted publisher of the channel
- name: Publish the conda packages to prefix.dev
if: github.repository_owner == 'Auto-Mech'
run: pixi run publish-conda

release:
needs: publish
runs-on: ubuntu-latest
permissions:
contents: write # to create the GitHub release

steps:
- uses: actions/checkout@v4

- name: Download the conda packages
uses: actions/download-artifact@v4
with:
name: conda-packages
path: dist/

# The static executables that the test job built and tested
- name: Download the static executables
uses: actions/download-artifact@v4
with:
name: mess-static-linux-64
path: mess-static/

- name: Archive the static executables
run: |
name="mess-static-${GITHUB_REF_NAME#v}-linux-64"
mv mess-static "$name"
chmod +x "$name"/* # artifacts do not keep file permissions
tar -czf "dist/$name.tar.gz" "$name"

- name: Extract release notes
id: extract-release-notes
uses: ffurrer2/extract-release-notes@v2

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
body: ${{ steps.extract-release-notes.outputs.release_notes }}
files: |
dist/*.conda
dist/*.tar.gz
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Versions are `YYYY.M.N`, where `N` counts the releases within the month.

## [Unreleased]

### Added

- The `mess` conda package: the executables linked against conda-forge's ILP64 OpenBLAS and GSL.
- Releases: a version tag builds and tests both packages, publishes them, and makes a GitHub release with the packages and a tarball of the static executables.

### Changed

- `mess-static` is built from source with CMake, instead of repackaging prebuilt executables. The executables are `mess`, `messpf` and `messabs`, and their output for the examples is unchanged.
- `mess` and `mess-static` share one version.
- The packages are published to the [`automech`](https://prefix.dev/channels/automech) channel on prefix.dev. The `auto-mech` channel on anaconda.org keeps the earlier `mess-static` packages and gets no new ones.
- `examples/mess.inp` sets `WithCRM`, which its radiative oscillators need.

### Removed

- The `gumbo` executable from `mess-static`: its example input (`examples/messsym.inp`) does not run, so it cannot be tested.

## [2026.2.4] - 2026-02-04

- `mess-static` on anaconda.org, with executables built from the source of that date.

## [2025.9.0] - 2025-09-25

- `mess-static` on anaconda.org, packaged with Pixi.

## [2024.5.16] - 2024-05-16

- `mess-static` on anaconda.org, the first conda package of the static executables.
36 changes: 33 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,26 @@ rate coefficients for complex-forming reactions via solution of the one-dimensio

## Installation

The Auto-Mech channel provides fully static executables that run on any x86-64 Linux, with no runtime dependencies:
The [`automech`](https://prefix.dev/channels/automech) channel on prefix.dev provides two conda packages with the same executables (`mess`, `messpf`, `messabs`).
Install only one of them.

`mess-static` has fully static executables that run on any x86-64 Linux, with no runtime dependencies:
```
conda install -c https://repo.prefix.dev/automech mess-static
```
In a [Pixi](https://pixi.sh) workspace:
```
pixi workspace channel add https://repo.prefix.dev/automech
pixi add mess-static
```
`mess` is linked against the conda-forge libraries (OpenBLAS, GSL), so it also needs the `conda-forge` channel:
```
conda install -c auto-mech mess-static
conda install -c https://repo.prefix.dev/automech -c conda-forge mess
```
They are also attached to each run of the GitHub Actions workflow (artifact `mess-static-linux-64`).
The static executables are also attached to each [GitHub release](https://github.com/Auto-Mech/MESS/releases) as a tarball, for systems without conda.
The changes in each release are listed in [`CHANGELOG.md`](CHANGELOG.md).

The `auto-mech` channel on anaconda.org keeps the `mess-static` packages up to version 2026.2.4 and gets no new ones.

## Building from source

Expand Down Expand Up @@ -43,6 +58,21 @@ Options:
- `MESS_BLAS_SUFFIX`: the suffix on the library's BLAS/LAPACK symbol names, if any. For example, `64_` for OpenBLAS built with `SYMBOLSUFFIX=64_`, like conda-forge's `libopenblas64_.so`. Check with `nm -D <library> | grep dsyev`. The static archive `libopenblas64_.a` has no suffix.
- `MESS_STATIC` (default `OFF`): link fully static executables.

## Releasing

`mess` and `mess-static` share one version, `YYYY.M.N`, where `N` counts the releases within the month, starting from 0.
To release, from an up-to-date `master` of this repository:
1. List the changes to the source since the last release:
```
git log --no-merges $(git describe --tags --abbrev=0)..HEAD -- src examples
```
2. Describe them under `[Unreleased]` in `CHANGELOG.md`, and commit.
3. Run `pixi run release YYYY.M.N` (for example, `pixi run release 2026.11.0`).
This updates the version and the changelog, then commits, tags and pushes.

The tag starts the release workflow (`.github/workflows/release.yml`), which builds and tests both packages, publishes them to the `automech` channel, and makes a GitHub release.
`pixi run version` shows the current version.

## Reference

See Y. Georgievskii, J. A. Miller, M. P. Burke, and S. J. Klippenstein,
Expand Down
Loading
Loading