This site is being rebuilt and some pages are out of date. For current details, write to [email protected]. This notice goes away when the rebuild is done.

No analytics unless you allow it, no tracking. This site keeps in your browser the language you pick, the theme, its colour, which site you chose, the currency on the pricing page and that you closed this notice; signing in adds session cookies. The legal page has the details.

Sign in

Radar · Rust · Archive · Week 44 · Oct 27 – Nov 2, 2025

Update actions/upload-pages-artifact to v4

Breakingtooling

What changed
The upload-pages-artifact action was upgraded from v3.0.1 to v4.0.0. Hidden files (dotfiles) will no longer be included in the artifact. If dotfiles are required, the action must be replaced with a custom artifact creation that meets the new requirements.
Production impact
The source does not say.
Try it
Run a GitHub Actions workflow that uses actions/upload-pages-artifact@v4 and observe that dotfiles are omitted from the uploaded artifact.
Source
github.com/rust-lang/rfcs/pull/3876

Understand it, then run it

Run it now

Todayrust
// This program demonstrates the effect of the v4.0.0 change to
// actions/upload-pages-artifact: dotfiles are not included in the
// artifact by default.  Since we cannot run the GitHub action here,
// we simulate the behavior by creating a temporary directory with
// a normal file and a dotfile, then listing the files that would
// be uploaded.

use std::fs::{self, File};
use std::io::Write;
use std::path::Path;

fn main() -> std::io::Result<()> {
    // Create a temporary directory
    let dir = std::env::temp_dir().join("artifact_demo");
    if dir.exists() {
        fs::remove_dir_all(&dir)?;
    }
    fs::create_dir(&dir)?;

    // Normal file
    let normal_path = dir.join("index.html");
    File::create(&normal_path)?.write_all(b"<html></html>")?;

    // Dotfile
    let dot_path = dir.join(".gitignore");
    File::create(&dot_path)?.write_all(b"*")?;

    // Simulate the artifact upload: list non-dot files
    println!("Files that would be uploaded by v4.0.0:");
    for entry in fs::read_dir(&dir)? {
        let entry = entry?;
        let file_name = entry.file_name();
        let name_str = file_name.to_string_lossy();
        if !name_str.starts_with('.') {
            println!("  {}", name_str);
        }
    }

    // Clean up
    fs::remove_dir_all(&dir)?;
    Ok(())
}

What it printed when we ran it on Rust 1.98.1 (edition 2024)

Files that would be uploaded by v4.0.0:
  index.html

Run sends this program (for Solidity, the contract and its tests) to our own sandbox, where it is compiled and run once, with no network, and what it printed or the test report comes back here. Nothing is kept. Runs are counted per visitor for the day so everyone gets a turn; the details are on the legal page.

Written by gpt-oss-20b from the linked source · claims checked against the sources · archive, not individually reviewed