diff --git a/.github/workflows/build-ci-image.yaml b/.github/workflows/build-ci-image.yaml new file mode 100644 index 000000000..ad4451bcc --- /dev/null +++ b/.github/workflows/build-ci-image.yaml @@ -0,0 +1,36 @@ +name: Build CI image + +on: + push: + branches: [main] + paths: + - 'Dockerfile' + - '.github/workflows/build-ci-image.yaml' + workflow_dispatch: + +env: + IMAGE: YOUR_DOCKERHUB_USERNAME/stack-wallet-ci + +jobs: + build: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + + - uses: docker/setup-buildx-action@v4 + + - uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v7 + with: + context: . + push: true + tags: | + ${{ env.IMAGE }}:latest + ${{ env.IMAGE }}:${{ github.sha }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..3f501e85c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# syntax=docker/dockerfile:1.7 +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive \ + TZ=Etc/UTC \ + LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl git gnupg sudo xz-utils file python3 unzip \ + build-essential automake cmake meson ninja-build pkg-config libtool \ + libglib2.0-dev libgtk-3-dev liblzma-dev \ + libgcrypt20-dev libgirepository1.0-dev \ + openjdk-8-jre-headless libgit2-dev clang \ + libncurses5-dev libncursesw5-dev zlib1g-dev llvm debhelper \ + libclang-dev opencl-headers libssl-dev ocl-icd-opencl-dev \ + libc6-dev-i386 valac libtss2-dev \ + && rm -rf /var/lib/apt/lists/* + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \ + && apt-get install -y --no-install-recommends nodejs \ + && rm -rf /var/lib/apt/lists/* + +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --default-toolchain 1.89.0 --profile minimal --no-modify-path \ + && rustup install 1.85.1 --profile minimal \ + && rustup target add x86_64-unknown-linux-gnu --toolchain 1.89.0 \ + && cargo install cargo-ndk \ + && chmod -R a+rwX "$CARGO_HOME" "$RUSTUP_HOME" + +ENV FLUTTER_HOME=/opt/flutter \ + PATH=/opt/flutter/bin:/opt/flutter/bin/cache/dart-sdk/bin:$PATH + +RUN git clone --depth 1 --branch 3.38.1 https://github.com/flutter/flutter.git "$FLUTTER_HOME" \ + && git config --global --add safe.directory '*' \ + && flutter config --no-analytics \ + && flutter precache --linux \ + && chmod -R a+rwX "$FLUTTER_HOME" + +RUN flutter --version && rustc --version && cargo --version && node --version