|
1 | 1 | ARG SOLANA_VERSION
|
2 |
| - |
3 | 2 | FROM solanalabs/solana:v${SOLANA_VERSION}
|
4 | 3 |
|
| 4 | +# Redeclare SOLANA_VERSION in the new build stage. |
| 5 | +# Persist in env for docker run & inspect. |
| 6 | +ARG SOLANA_VERSION |
| 7 | +ENV SOLANA_VERSION="${SOLANA_VERSION}" |
| 8 | + |
5 | 9 | RUN apt-get update
|
6 |
| -RUN apt-get install -qq cmake curl g++ gcc-multilib git libzstd1 libzstd-dev python3-pytest sudo zlib1g zlib1g-dev |
| 10 | +RUN apt-get install -qq \ |
| 11 | + cmake \ |
| 12 | + curl \ |
| 13 | + g++ \ |
| 14 | + gcc-multilib \ |
| 15 | + git \ |
| 16 | + libzstd1 \ |
| 17 | + libzstd-dev \ |
| 18 | + python3-pytest \ |
| 19 | + sudo \ |
| 20 | + zlib1g \ |
| 21 | + zlib1g-dev |
7 | 22 |
|
8 | 23 | # Grant sudo access to pyth user
|
9 | 24 | RUN echo "pyth ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
10 |
| - |
11 | 25 | RUN useradd -m pyth
|
| 26 | + |
12 | 27 | USER pyth
|
13 | 28 | WORKDIR /home/pyth
|
| 29 | +COPY --chown=pyth:pyth . pyth-client/ |
14 | 30 |
|
15 |
| -COPY --chown=pyth:pyth ${GITHUB_WORKSPACE} pyth-client/ |
| 31 | +RUN echo "\n\ |
| 32 | +export PATH=\"\${PATH}:\${HOME}/pyth-client/build\"\n\ |
| 33 | +export PYTHONPATH=\"\${PYTHONPATH:+\$PYTHONPATH:}\${HOME}/pyth-client\"\n\ |
| 34 | +" >> .profile |
16 | 35 |
|
| 36 | +# Build off-chain binaries. |
17 | 37 | RUN cd pyth-client && ./scripts/build.sh
|
18 | 38 |
|
19 |
| -RUN echo "\nexport PATH=\$PATH:\$HOME/pyth-client/build" >> .profile |
20 |
| - |
21 |
| -RUN echo "\nexport PYTHONPATH=\${PYTHONPATH:+\${PYTHONPATH}:}\$HOME/pyth-client" >> .profile |
| 39 | +# Install rust and add ". ~/.cargo/env" to ~/.profile. |
| 40 | +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ |
| 41 | + | sh -s -- -y --default-toolchain none |
22 | 42 |
|
23 |
| -# Install Rust |
24 |
| -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none |
| 43 | +# Copy solana sdk to modify makefile and header. |
| 44 | +RUN mkdir solana |
| 45 | +RUN cp -a /usr/bin/sdk solana |
25 | 46 |
|
26 |
| -# Link Solana location for makefile |
27 |
| -RUN mkdir solana && cp -a /usr/bin/sdk solana && sed -i 's/-Werror/-Wall -Wextra -Wconversion -Werror/g' solana/sdk/bpf/c/bpf.mk && sed -i 's/-z notext/-z notext -z defs/g' solana/sdk/bpf/c/bpf.mk |
| 47 | +# Enable all clang warnings. |
| 48 | +RUN sed -i \ |
| 49 | + 's/-Werror/-Wall -Wextra -Wconversion -Werror/g' \ |
| 50 | + solana/sdk/bpf/c/bpf.mk |
28 | 51 |
|
29 |
| -# Build the program |
30 |
| -RUN PATH=$PATH:$HOME/.cargo/bin && cd pyth-client/program && make V=1 |
| 52 | +# Disallow missing symbols in ld. |
| 53 | +RUN sed -i \ |
| 54 | + 's/-z notext/-z notext -z defs/g' \ |
| 55 | + solana/sdk/bpf/c/bpf.mk |
31 | 56 |
|
32 |
| -# Print hash of the program |
33 |
| -RUN sha256sum -b pyth-client/target/oracle.so |
| 57 | +# https://github.com/solana-labs/solana/issues/21198 |
| 58 | +RUN sed -i \ |
| 59 | + 's/\(^uint64_t sol_invoke_signed_c(\)/__attribute__(( weak )) \1/g' \ |
| 60 | + solana/sdk/bpf/c/inc/solana_sdk.h |
34 | 61 |
|
| 62 | +# Build and test the oracle program. |
| 63 | +RUN cd pyth-client && ./scripts/build-bpf.sh program |
35 | 64 | RUN /bin/bash -l -c "pytest-3 --pyargs pyth"
|
36 | 65 |
|
37 | 66 | ENTRYPOINT []
|
38 | 67 | CMD []
|
39 |
| - |
|
0 commit comments