# Setup V (Vlang) Build

[![Latest version](https://img.shields.io/npm/v/setup-v-action) ![Dependency status](https://img.shields.io/librariesio/release/npm/setup-v-action)](https://www.npmjs.com/package/setup-v-action)

GitHub action for setting up a V build environment by downloading and unpacking the V compiler or building it from sources.

* Simple syntax with defaults according to the best performance and practices.
* Convenient version specification - `master`, `weekly`, `latest`, `X.Y.Z`, `<commit hash>`.
* Downloading an unpacking pre-built binaries is preferred to building from sources.
* An already unpacked or built version is cached to speed up the build pipeline.
* Automatic installation of module dependencies from `v.mod`.
* GitHub workflow token is used by default.

## Usage

Install V from the latest release:

```yml
- uses: prantlf/setup-v-action@v4
```

Test against multiple versions of V using the matrix strategy:

```yml
jobs:
  test:
    strategy:
      matrix:
        v-version: ["latest", "weekly", "master"]

    steps:
    - uses: actions/checkout@v7
    - uses: prantlf/setup-v-action@v4
      with:
        version: ${{ matrix.v-version }}
    - run: v test .
```

If you want to install module dependencies from `v.mod` automatically, run this action after checking out the sources.

## Inputs

The following parameters can be specified using the `with` object:

### version

Type: `String`<br>
Default: `latest`

One of the following values is supported:

* `master` - built from the most recent commit to the `master` branch
* `weekly` - downloaded from the most recent weekly release (default)
* `latest` - downloaded from the most recent (semantic) version release
* `vX.Y.Z` or `X.Y.Z` - downloaded from a specific (semantic) version release
* `<commit hash>` - built from a specific commit

The initial default - `weekly` was changed to `latest`. V stopped releasing the regular weekly releases after 0.5. The versioned releases became more recent tha the development releases.

### use-cache

Type: `Boolean`<br>
Default: `true`

Set to `false` to ignore the cache and always perform the full installation, either by downloading and unpacking a binary, or by downloading sources and building. The default is `true`.

### force-build

Type: `Boolean`<br>
Default: `false`

Set to `true` to always build V from sources, even if the binary archive is available. The default is `false`.

### install-dependencies

Type: `Boolean`<br>
Default: `true`

Set to `false` to prevent module dependencies from `v.mod` from being installed automatically. The default is `true`.

### global-dependencies

Type: `Boolean`<br>
Default: `true`

Set to `false` to install module dependencies from `v.mod` to `./modules` instead of to `~/.vmodules`.

### modules-dir

Type: `String`<br>
Default: `src/modules` or `modules`

Set the directory for the locally installed dependencies. It is `src/modules` if `src` exists, otherwise `modules`.

### token

Type: `String`<br>
Default: `${{ github.token }}`

Authorization token to inspect releases and commits in the `vlang/v` repository. Either a GitHub personal access token or the GitHub workflow token. If not provided, the environment variable `GITHUB_TOKEN` will be used as a fallback. And if even that is not set, the GitHub workflow token from the action-execution context will be used as default.

## Outputs

The following parameters can be accessed by the `github` context:

### version

Type: `String`<br>

The actually installed version of V, as returned by `v -V`, for example: `V 0.3.4 046dd54`.

### bin-path

Type: `String`<br>

The complete path to the directory with the V compiler.

### v-bin-path

Type: `String`<br>

The complete path to the V compiler executable.

### used-cache

Type: `Boolean`<br>

A boolean value indicating if the installation succeeded from the cache.

### was-built

Type: `Boolean`<br>

A boolean value indicating if the V compiler was built from sources.

## License

Copyright (C) 2023-2026 Ferdinand Prantl

Licensed under the [MIT License].

[MIT License]: http://en.wikipedia.org/wiki/MIT_License
