diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 61c77d388a..03e720d25d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1345,7 +1345,6 @@ jobs: # Do not edit this file in .github/workflows build-freebsd-main: # job-name skip-stable runs-on: ubuntu-latest - if: ${{ (github.event_name == 'push' && github.ref_name == 'main') || github.event_name == 'schedule' }} # skip-stable steps: - uses: actions/checkout@v6 with: @@ -1357,7 +1356,10 @@ jobs: - name: Run a full build uses: vmactions/freebsd-vm@v1 with: - release: 13.2 + # HACK: Due to + # we cannot use v13 or v14 for testing for now, but it should be okay + # since we only have best-effort testing on FreeBSD. + release: "15.0" usesh: true copyback: false prepare: | @@ -1389,7 +1391,10 @@ jobs: - name: Run a full build uses: vmactions/freebsd-vm@v1 with: - release: 13.2 + # HACK: Due to + # we cannot use v13 or v14 for testing for now, but it should be okay + # since we only have best-effort testing on FreeBSD. + release: "15.0" usesh: true copyback: false prepare: | diff --git a/ci/actions-templates/freebsd-builds-template.yaml b/ci/actions-templates/freebsd-builds-template.yaml index 9795b04a3a..e10ea334b6 100644 --- a/ci/actions-templates/freebsd-builds-template.yaml +++ b/ci/actions-templates/freebsd-builds-template.yaml @@ -5,7 +5,6 @@ jobs: # skip-main skip-stable build-freebsd-main: # job-name skip-stable build-freebsd-stable: # job-name skip-main runs-on: ubuntu-latest - if: ${{ (github.event_name == 'push' && github.ref_name == 'main') || github.event_name == 'schedule' }} # skip-stable if: ${{ github.event_name == 'push' && github.ref_name == 'stable' }} # skip-main steps: - uses: actions/checkout@v6 @@ -18,7 +17,10 @@ jobs: # skip-main skip-stable - name: Run a full build uses: vmactions/freebsd-vm@v1 with: - release: 13.2 + # HACK: Due to + # we cannot use v13 or v14 for testing for now, but it should be okay + # since we only have best-effort testing on FreeBSD. + release: "15.0" usesh: true copyback: false prepare: | diff --git a/src/test/dist.rs b/src/test/dist.rs index e1f2f98dcf..54bf26925f 100644 --- a/src/test/dist.rs +++ b/src/test/dist.rs @@ -920,9 +920,10 @@ fn create_tarball(relpath: &Path, src: &Path, dst: &Path) -> io::Result<()> { zstwriter = zstd::stream::write::Encoder::new(outfile, 0)?.auto_finish(); &mut zstwriter } - _ => panic!("Unsupported archive format"), + _ => panic!("unsupported archive format"), }; let mut tar = tar::Builder::new(writer); + tar.mode(tar::HeaderMode::Deterministic); for entry in walkdir::WalkDir::new(src) { let entry = entry?; let parts: Vec<_> = entry.path().iter().map(ToOwned::to_owned).collect(); @@ -930,11 +931,30 @@ fn create_tarball(relpath: &Path, src: &Path, dst: &Path) -> io::Result<()> { let parts = parts.into_iter().skip(parts_len - entry.depth()); let mut relpath = relpath.to_owned(); relpath.extend(parts); - if entry.file_type().is_file() { - let mut srcfile = File::open(entry.path())?; - tar.append_file(relpath, &mut srcfile)?; + let mut header = tar::Header::new_ustar(); + let srcfile = if entry.file_type().is_file() { + let srcfile = File::open(entry.path())?; + header.set_entry_type(tar::EntryType::Regular); + header.set_size(srcfile.metadata()?.len()); + header.set_mode(0o644); + Some(srcfile) } else if entry.file_type().is_dir() { - tar.append_dir(relpath, entry.path())?; + let mut header = tar::Header::new_ustar(); + header.set_entry_type(tar::EntryType::Directory); + header.set_size(0); + header.set_mode(0o755); + None + } else { + continue; + }; + header.set_uid(0); + header.set_gid(0); + header.set_mtime(0); + header.set_cksum(); + if let Some(mut srcfile) = srcfile { + tar.append_data(&mut header, relpath, &mut srcfile)?; + } else { + tar.append_data(&mut header, relpath, io::empty())?; } } tar.finish()