Tuist for Elixir
This package provides mix tuist.login, which authenticates with Tuist and saves
the session in the same credential file used by the Tuist command line tool and
Gradle plugin. Build instrumentation and test reporting are planned separately.
Configure the server
You can share the Tuist server address with your team in mix.exs:
def project do
[
app: :my_app,
tuist: [url: "https://tuist.example.com"]
]
end
TUIST_URL overrides that address, as it does in the Tuist command line tool.
You can also pass --url when TUIST_URL is unset. The default is
https://tuist.dev. URL
means Uniform Resource Locator.
Log in
mix tuist.login
mix tuist.login --email person@example.com --password secret
mix tuist.login --url https://tuist.example.com
Without credentials, the task opens a browser and waits for authorization. If
you provide only --email or --password, it prompts for the missing value.
On a continuous integration provider, it exchanges an
OpenID Connect identity token
from GitHub Actions, CircleCI, or Bitrise, matching the Tuist command line flow.
Credentials are saved under the Tuist configuration directory. The task writes them atomically with access restricted to the current user. Refreshes take a lock at the Tuist command line tool's lock path and reread the file before exchanging the refresh token, so parallel processes do not refresh the same token twice.
Development
Requires Elixir 1.18 or later. From tuist_ex/:
mix deps.get
mix format --check-formatted
mix compile --warnings-as-errors
mix test --warnings-as-errors
mix hex.build
mix docs --warnings-as-errors
Quokka is configured as a formatter plugin.
mix format applies its fixes; mix format --check-formatted enforces them in
automated checks. Mimic is available for test mocks.
Register modules with Mimic.copy/1 in test/test_helper.exs as tests are added.
The package currently has focused authentication and locking tests.
Automated checks and releases
The check workflow runs compilation, documentation, tests, formatting, and package assembly as separate jobs. Compilation checks Elixir 1.18 and the repository's current Elixir version; the other jobs use the current version.
The tuist-ex release component uses tuist-ex@ tags and scoped commits such as
feat(tuist-ex): add build instrumentation. On main, the release workflow
checks for a version bump, runs the same validation, publishes the package and
documentation to Hex, and creates a GitHub release. Publication is serialized
and never cancelled mid-release. If package publication succeeds but the GitHub
release fails, a retry verifies the published package contents and resumes
documentation and release creation without replacing the package. Manual releases are restricted to main.
The release workflow sets the package version from the shared release checker;
the version in mix.exs is the development baseline. Release notes are generated
from scoped commits using cliff.toml.
Publication reuses the repository's HEX_API_KEY secret, which also publishes
Noora. Its Hex account must be the intended owner of tuist_ex and the key
must have package publishing permission. The first publication requires the
package name to be available. TUIST_RELEASE_GITHUB_TOKEN is used for GitHub
releases when available, with the workflow token as the fallback.