Tool:rustup

From Wikitech
Jump to navigation Jump to search


Toolforge tools
Crystal Clear app package utilities.png Shared Rust installation for Toolforge
Description Maintains a shared rustup toolchain for other tools to use
Keywords rustup, rust
Author(s) The Rust Project
Maintainer(s) Legoktm, APerson, Magnus Manske (View all)
Source code https://github.com/rust-lang/rustup/
License Apache License 2.0
Main article: Help:Toolforge/Rust

This tool maintains and manages a shared rustup installation for use on Toolforge. To use it in your tool, add the following to ~/.profile:

. "/data/project/rustup/rustup/.cargo/env"
export RUSTUP_HOME=/data/project/rustup/rustup/.rustup

After logging out and in again, try running rustup show, you should see something like:

Default host: x86_64-unknown-linux-gnu
rustup home:  /data/project/rustup/rustup/.rustup

installed toolchains
--------------------

stable-x86_64-unknown-linux-gnu (default)
1.55-x86_64-unknown-linux-gnu
1.56-x86_64-unknown-linux-gnu

active toolchain
----------------

stable-x86_64-unknown-linux-gnu (default)
rustc 1.56.1 (59eed8a2a 2021-11-01)

If you had previously installed rustup in the tool itself, you should make sure to uninstall it first, usually rustup self uninstall will do the trick.

Using a different Rust version

By default, you will follow the "stable" channel, which will track the latest stable Rust version within a day of its release. If you want to track a specific minor Rust version, like 1.55, you can either specify the version in each command you run, e.g. cargo +1.55 build --release or you can create a rust-toolchain.toml in your project.

All stable Rust versions since 1.55 should be available. If you need something older, please ask one of the maintainers to install it for you.

If you try setting a rustup override or using rustup default, it will not work because of how the shared installation is set up. Sorry.

Implementation details

The installation was set up by creating a new directory in /data/project/rustup, chmod -R 755ing it so only that tool can modify it, then running:

export RUSTUP_HOME=/data/project/rustup/rustup/.rustup
export CARGO_HOME=/data/project/rustup/rustup/.cargo
curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal

The update script runs on a daily cron:

update.sh
#!/bin/bash
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2021 Kunal Mehta
set -euxo pipefail

# Update existing toolchains
rustup update
# Add the latest minor Rust toolchain
export LATEST_RUST=$(curl 'https://release-monitoring.org/api/v2/versions/?project_id=7635' | jq '.latest_version' -r | cut -c -4)
rustup toolchain install $LATEST_RUST
crontab -l
# m	h	dom	mon	dow	command
@daily /usr/bin/jsub -N update -mem 1G -once -quiet /data/project/rustup/update.sh