GitoxideLabs / gitoxide

An idiomatic, lean, fast & safe pure Rust implementation of Git
Apache License 2.0
8.91k stars 303 forks source link

Add ARM64 (AArch64) binary release archives for macOS and Windows #1479

Closed EliahKagan closed 2 months ago

EliahKagan commented 2 months ago

As mentioned in https://github.com/Byron/gitoxide/issues/1478#issuecomment-2257584083, this PR does some of the tasks for #1478. I believe this actually is a complete fix for that bug as described. But I suggest keeping the #1478 open and treating that issue more broadly, to encompass both this and other near-future changes. I've opened this PR now so that the core confusion can be avoided in the next release even if there are delays in doing the rest and even if the next release is sooner than anticipated.

Although I suggest scoping this to just those tasks, I'm willing to broaden this PR to include building universal binaries and just keep this PR open for a while until I can get that done. (But there may be some delays, even if nothing goes wrong, because I'm out of private runner minutes. That's probably a blessing in disguise, since this may not be the best way to work on this, even aside from that limitation. But it does mean I'll have to find another way to approach it.)

Details on the produced archives, analogous to the information there, can be see in this gist, which may make even the most important part more readable than it can be here, but here's that part:

C:\Users\ek\tmp> file */gix* */ein*
gitoxide-lean-v0.38.0-alpha.6-aarch64-apple-darwin/gix:            Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-lean-v0.38.0-alpha.6-aarch64-pc-windows-msvc/gix.exe:     PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-lean-v0.38.0-alpha.6-i686-pc-windows-msvc/gix.exe:        PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-lean-v0.38.0-alpha.6-x86_64-apple-darwin/gix:             Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-lean-v0.38.0-alpha.6-x86_64-pc-windows-gnu/gix.exe:       PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-lean-v0.38.0-alpha.6-x86_64-pc-windows-msvc/gix.exe:      PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-max-pure-v0.38.0-alpha.6-aarch64-apple-darwin/gix:        Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-pure-v0.38.0-alpha.6-aarch64-pc-windows-msvc/gix.exe: PE32+ executable (console) Aarch64, for MS Windows, 11 sections
gitoxide-max-pure-v0.38.0-alpha.6-arm-unknown-linux-gnueabihf/gix: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 4.19.21, stripped
gitoxide-max-pure-v0.38.0-alpha.6-i686-pc-windows-msvc/gix.exe:    PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-apple-darwin/gix:         Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-pc-windows-gnu/gix.exe:   PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-pc-windows-msvc/gix.exe:  PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-unknown-linux-musl/gix:   ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
gitoxide-max-v0.38.0-alpha.6-aarch64-apple-darwin/gix:             Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-v0.38.0-alpha.6-aarch64-pc-windows-msvc/gix.exe:      PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-max-v0.38.0-alpha.6-i686-pc-windows-msvc/gix.exe:         PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-max-v0.38.0-alpha.6-x86_64-apple-darwin/gix:              Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-v0.38.0-alpha.6-x86_64-pc-windows-gnu/gix.exe:        PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-max-v0.38.0-alpha.6-x86_64-pc-windows-msvc/gix.exe:       PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-small-v0.38.0-alpha.6-aarch64-apple-darwin/gix:           Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-small-v0.38.0-alpha.6-aarch64-pc-windows-msvc/gix.exe:    PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-small-v0.38.0-alpha.6-i686-pc-windows-msvc/gix.exe:       PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-small-v0.38.0-alpha.6-x86_64-apple-darwin/gix:            Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-small-v0.38.0-alpha.6-x86_64-pc-windows-gnu/gix.exe:      PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-small-v0.38.0-alpha.6-x86_64-pc-windows-msvc/gix.exe:     PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-lean-v0.38.0-alpha.6-aarch64-apple-darwin/ein:            Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-lean-v0.38.0-alpha.6-aarch64-pc-windows-msvc/ein.exe:     PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-lean-v0.38.0-alpha.6-i686-pc-windows-msvc/ein.exe:        PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-lean-v0.38.0-alpha.6-x86_64-apple-darwin/ein:             Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-lean-v0.38.0-alpha.6-x86_64-pc-windows-gnu/ein.exe:       PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-lean-v0.38.0-alpha.6-x86_64-pc-windows-msvc/ein.exe:      PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-max-pure-v0.38.0-alpha.6-aarch64-apple-darwin/ein:        Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-pure-v0.38.0-alpha.6-aarch64-pc-windows-msvc/ein.exe: PE32+ executable (console) Aarch64, for MS Windows, 11 sections
gitoxide-max-pure-v0.38.0-alpha.6-arm-unknown-linux-gnueabihf/ein: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 4.19.21, stripped
gitoxide-max-pure-v0.38.0-alpha.6-i686-pc-windows-msvc/ein.exe:    PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-apple-darwin/ein:         Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-pc-windows-gnu/ein.exe:   PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-pc-windows-msvc/ein.exe:  PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-max-pure-v0.38.0-alpha.6-x86_64-unknown-linux-musl/ein:   ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
gitoxide-max-v0.38.0-alpha.6-aarch64-apple-darwin/ein:             Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-v0.38.0-alpha.6-aarch64-pc-windows-msvc/ein.exe:      PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-max-v0.38.0-alpha.6-i686-pc-windows-msvc/ein.exe:         PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-max-v0.38.0-alpha.6-x86_64-apple-darwin/ein:              Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-max-v0.38.0-alpha.6-x86_64-pc-windows-gnu/ein.exe:        PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-max-v0.38.0-alpha.6-x86_64-pc-windows-msvc/ein.exe:       PE32+ executable (console) x86-64, for MS Windows, 5 sections
gitoxide-small-v0.38.0-alpha.6-aarch64-apple-darwin/ein:           Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-small-v0.38.0-alpha.6-aarch64-pc-windows-msvc/ein.exe:    PE32+ executable (console) Aarch64, for MS Windows, 5 sections
gitoxide-small-v0.38.0-alpha.6-i686-pc-windows-msvc/ein.exe:       PE32 executable (console) Intel 80386, for MS Windows, 4 sections
gitoxide-small-v0.38.0-alpha.6-x86_64-apple-darwin/ein:            Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>
gitoxide-small-v0.38.0-alpha.6-x86_64-pc-windows-gnu/ein.exe:      PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 10 sections
gitoxide-small-v0.38.0-alpha.6-x86_64-pc-windows-msvc/ein.exe:     PE32+ executable (console) x86-64, for MS Windows, 5 sections

As alluded to in the task list in #1478, this includes refactoring of the workflow to make architectures more explicit. See 076c262 on this and its rationale.