-
Notifications
You must be signed in to change notification settings - Fork 20
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
Add Dockerfile for developing ROFL #2063
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# NOTE: This name appears in GitHub's Checks API and in workflow's status badge. | ||
name: rofl-dev-image | ||
|
||
on: | ||
push: | ||
# XXX: ideally on main branches we would build the image only if there are changes in the | ||
# 'docker/' directory (as we do in pull_requests). However, this doesn't work when pushing a new | ||
# 'stable/*' branch - the build on a new branch does not trigger unless there are changes | ||
# compared to main on the filtered path. | ||
# If this is ever fixed, or per branch filters are possible, bring back the path filter to only | ||
# build the image when there are changes within 'docker/' directory. | ||
branches: | ||
- main | ||
- stable/* | ||
# Or when a pull request event occurs for a pull request against one of the matched branches and at least | ||
# one modified file matches the configured paths. | ||
# | ||
# NOTE: We use this to be able to easily test Docker image changes. | ||
pull_request: | ||
branches: | ||
- main | ||
- stable/* | ||
paths: | ||
- docker/rofl-dev/** | ||
# Or every day at 04:00 UTC (for the default/main branch). | ||
schedule: | ||
- cron: "0 4 * * *" | ||
|
||
# Cancel in-progress jobs on same branch. | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
|
||
build-rofl-dev: | ||
# NOTE: This name appears in GitHub's Checks API. | ||
name: build-rofl-dev | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
# Check out pull request's HEAD commit instead of the merge commit. | ||
ref: ${{ github.event.pull_request.head.sha }} | ||
|
||
- name: Determine tag name | ||
id: determine-tag | ||
uses: ./.github/actions/determine-tag | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Login to ghcr.io | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: "Rebuild oasisprotocol/rofl-dev:${{ steps.determine-tag.outputs.tag }}" | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: docker/rofl-dev | ||
file: docker/rofl-dev/Dockerfile | ||
tags: ghcr.io/oasisprotocol/rofl-dev:${{ steps.determine-tag.outputs.tag }} | ||
pull: true | ||
push: true | ||
labels: | | ||
org.opencontainers.image.source=${{ github.event.repository.html_url }} | ||
org.opencontainers.image.created=${{ steps.determine-tag.outputs.created }} | ||
org.opencontainers.image.revision=${{ github.sha }} | ||
|
||
- name: Prune old ghcr.io/oasisprotocol/rofl-dev images | ||
uses: vlaurin/[email protected] | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
organization: oasisprotocol | ||
container: rofl-dev | ||
keep-younger-than: 7 # days | ||
keep-last: 2 | ||
prune-untagged: true | ||
prune-tags-regexes: ^pr- |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
FROM ghcr.io/oasisprotocol/oasis-core-dev:stable-24.3.x AS oasis-core-dev | ||
|
||
ARG OASIS_CLI_VERSION=0.10.3 | ||
|
||
RUN curl -L -o /tmp/cli.tar.gz "https://github.com/oasisprotocol/cli/releases/download/v${OASIS_CLI_VERSION}/oasis_cli_${OASIS_CLI_VERSION}_linux_amd64.tar.gz" && \ | ||
tar -C /usr/bin -xf /tmp/cli.tar.gz --strip-components 1 "oasis_cli_${OASIS_CLI_VERSION}_linux_amd64/oasis" && \ | ||
rm /tmp/cli.tar.gz | ||
|
||
VOLUME /src |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,27 @@ If you already have everything set up, feel free to skip to the [next chapter]. | |
The following is a list of prerequisites required to start developing using the | ||
Oasis SDK: | ||
|
||
:::info | ||
|
||
Docker images are available to help you set up a development | ||
environment. If you don't want to install everything locally (or **in | ||
particular if you use macOS** as your development system), you can use | ||
the `ghcr.io/oasisprotocol/rofl-dev` image, which contains all the tools | ||
needed to compile a ROFL app. | ||
|
||
To use it, bind the directory with your app source to the container's | ||
`/src` directory with a command like the following, then continue with | ||
the next section of this guide: | ||
|
||
```bash | ||
docker run --platform linux/amd64 --volume ./rofl-oracle:/src -it ghcr.io/oasisprotocol/rofl-dev | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This command could actually be expanded in the application.md chapter to include full build commands. |
||
``` | ||
|
||
Note that on macOS you **must** use the `--platform linux/amd64` | ||
parameter, no matter which processor your computer has. | ||
|
||
::: | ||
|
||
### [Rust] | ||
|
||
We follow [Rust upstream's recommendation][rust-upstream-rustup] on using | ||
|
@@ -77,20 +98,18 @@ nightly-2022-08-22-x86_64-unknown-linux-gnu (overridden by '/code/rust-toolchain | |
rustc 1.65.0-nightly (c0941dfb5 2022-08-21) | ||
``` | ||
|
||
For testing ROFL binaries on Sapphire Localnet, the binaries should be compiled | ||
for [MUSL C standard library]. You will need to add the following target to your | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Feel free to remove the |
||
rust environment: | ||
Make sure you have the correct target for rust to compile for: | ||
|
||
```shell | ||
rustup target add x86_64-unknown-linux-musl | ||
rustup target add x86_64-unknown-linux-gnu | ||
``` | ||
|
||
Additionally, you will need the MUSL wrapper for gcc, the multilib package and | ||
clang for compiling the `mbedtls-sys-auto` dependency. On Ubuntu/Debian systems, | ||
In addition, you will need gcc's multilib support package and clang for | ||
compiling the `mbedtls-sys-auto` dependency. On Ubuntu/Debian systems, | ||
you can install those by running: | ||
|
||
```shell | ||
sudo apt install musl-tools gcc-multilib clang | ||
sudo apt install gcc-multilib clang | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note: when trying to run it in ubuntu docker (and devcontainer), it also required: sudo apt update
sudo apt -y install pkg-config protobuf-compiler cmake |
||
``` | ||
|
||
<!-- markdownlint-disable line-length --> | ||
|
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.
Related to oasisprotocol/cli#319