-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release workflow #201
base: main
Are you sure you want to change the base?
Release workflow #201
Conversation
Can we please test the release workflows in a fork of this repository? |
Note: The test failure is caused by a change in go-ethereum, I'm on it. |
Ok, I've forked the repo to |
Didn't we agree to have the LLVM release separate? Meaning it is triggered manually so that it doesn't have to be rebuild for every release. |
That was the idea at first, however not doing this simplifies the release process. It also eases changing LLVM compilation settings between releases. |
This is more of a temporary solution and will change (if needed), especially with addition of the win/mac build. For now we use actions/cache with |
I see. Thanks for clarifying. |
I just checked the linux binary, it isn't the statically linked MUSL build? Also the workflow does not indicate at all that it will be building against MUSL. For Linux we want the musl build (only). Easiest way is to use musl-cross, see the Note: The gnu LLVM is fine to release though. LLVM builds we want to release both: MUSL for reproducibility and GNU so that contributors with slow laptops don't have to wait for an hour. |
It wasn't :(
Now it is static (and llvm-musl now in artifacts)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few notes. Not 100% sure but I think (@xermicus please confirm):
- We neither want nor need any gnu build. Please remove. Musl is portable and will run on any Linux
- The LLVM artifacts should not be released. It is statically linked into the the other artifacts and there is no reason for people to download them. If they are released at all it will be in a separate workflow just to be downloaded by this very workflow.
resolc: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, not stripped
I love it :)
Confirmed.
Ok let's go this route (with a separate workflow and separate release tags just for LLVM) just like originally intended. I just remembered the cache is limited to 10GB, which will not allow caching it for all platforms. |
Will the rest I asked for also be removed? |
Ok, lets summarize everything we have
So we need to release both LLVM, as mentioned here
and revive From The final goal is to have two workflows:
This is a 'step 1' - 'minimal' workflow, so we can have at least some form of release for now. The LLVM release workflow is in a separate pr, but there are problems with the win build Does everyone agree with this, or do we have a different point of view? So I propose next steps:
|
Can you scroll down a bit? Just the next post in this thread I wrote why this list of targets does not make sense. But to recap. We want those AND ONLY THOSE releases of the linux-musl
I propose you start by fixing the trivial suggestions I made here: #201 (review)
I don't know how to express this in any simpler terms. |
Please let me know when I should give it another review. Let's merge it without mac und windows for now so we have at least that. |
@AndWeHaveAPlan can you please add a few more comments and address Alex's questions? Pushing changes is great, discussing & explaining them is even better! Thank you :) |
fork example for current workflow
|
Just to sync discussions between parallel streams: LLVM artifacts will be released in separate tags (the part I'm working on), to later be reused in this release workflow, as well as in test workflow. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks this looks like what we want :)
My main grumble here was that it is unclear when the author is still working on it and when it is considered "done" from their point of view. So I can start reviewing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like we are getting close, thanks!
Can you please update the RELEASE.md
file to reflect how the release works with the new workflow?
.github/workflows/release.yml
Outdated
- name: llvm-musl-cache save | ||
if: steps.llvm-musl-cache.outputs.cache-hit != 'true' | ||
uses: actions/cache/save@v4 | ||
with: | ||
path: target-llvm/musl/target-final | ||
key: llvm-linux-musl-${{ hashFiles('crates/solidity/**') }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we cache the musl artifacts directly after building it? Otherwise it's either both musl and emscripten work and get cached or nothing gets cached.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, reordered
.github/workflows/release.yml
Outdated
- name: build musl | ||
run: | | ||
mkdir resolc-out | ||
docker run -v $PWD:/opt/revive messense/rust-musl-cross:x86_64-musl /bin/bash -c " |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately it doesn't look like they version it properly with tags. Can you please change this to use the image digest? This gives us manual control and will avoid breaking the release workflow randomly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, set @sha256:68b86bc7cb2867259e6b233415a665ff4469c28b57763e78c3bfea1c68091561
, image used in fork workflow
- name: download solc | ||
run: | | ||
curl -o solc https://github.com/ethereum/solidity/releases/download/v0.8.28/solc-static-linux | ||
chmod +x solc | ||
echo "$PWD" >> $GITHUB_PATH |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is technically not required for builds.
However, executing a basic tests using the release build, like compiling a flipper contract, would be good. Can you please add such a test? It can be really simple, i.e. running resolc --bin crates/integration/contracts/flipper.sol
, expecting the PVM magic bytes 50564d
in the output and expecting a return value of 0. Same for the Wasm build. It's unlikely but should the release workflow for some reason produce defective artifacts, without the test, we will only find it out the annoying way.
Automatically create tag and relese based on 'version' in cargo.toml, triggered on main branch only. Do nothing if tag and relese already exist
Example
Release artifacts:
Current issues:
Next steps: