Closed ifndefJOSH closed 4 months ago
Thanks for raising this issue. The reason is that the zip format doesn't preserve file attributes. The proper fix is to release a tar.gz for Linux and macOS.
Note for future developers: remember that the zip release for Linux/macOS is used by our prusti-assistant extension, so don't remove the zip release yet. Converting prusti-assistant to unpack tar.gz requires adding a corresponding TarGzDownloader
in our vs-verification-toolbox repo.
The reason is that the zip format doesn't preserve file attributes.
I was under the impression that file mode bits were stored in the ZIP format's external attributes. Additionally, using the standard zip
(v3.0) and unzip
(v6.0) utilities on my Linux machine, I was able to verify that a test shell file which I marked as executable had its executable bit preserved upon compression and subsequent extraction from a ZIP file.
-rwxr-xr-x 1 38 Feb 27 08:59 hello_world.sh
-rwxr-xr-x 1 38 Feb 27 08:59 hello_world_unzipped.sh
-rw-r--r-- 1 216 Feb 27 09:00 test.zip
Oh, nice! Thanks for pointing that out. So maybe the fault is in the version of zip
that we use in GitHub's workflows?
Or maybe the permissions are lost when passing artifacts between the jobs of a GitHub workflow:
It would be great if someone can experiment with GitHub runners to figure out what's needed to preserve those flags.
Or maybe the permissions are lost when passing artifacts between the jobs of a GitHub workflow:
Indeed, that seems to be the reason: https://github.com/actions/download-artifact/issues/14. A workaround would be to zip and unzip that artifact on our own, or to add the chmod +x
after that download-artifact
step.
(The upload-artifact
action preserves the permissions correctly, in my tests.)
None of the executable files in the zip downloaded at releases have the executable mode bit set. This includes:
prusti-rustc
prusti-server
prusti-server-driver
cargo-prusti
viper_tools/z3/bin
viper_tools/boogie/Binaries/Boogie
If a user manually marks
prusti-rustc
andcargo-prusti
as executable viachmod
, and then attempts to verify a simple program, they get an error.Conversely, if
prusti-rustc
,prusti-server
,prusti-server-driver
, andcargo-prusti
are marked as executable (butz3
andBoogie
are not), they receive the following compiler panic. err_report.txtTemporary Workaround: Obviously after running the following shell script in the Prusti directory, I was able to get Prusti to work.
Platform information: Debian 12 6.1.55-1 (2023-09-29) x86_64 GNU/Linux (I downloaded the Ubuntu/Linux/ELF release)
Notes
zip
option is recursive-r
)