Skip to content

Commit

Permalink
Try #878: --target cross
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] authored Jul 1, 2022
2 parents f059d1a + 953ea7f commit 6f51b86
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 3 deletions.
10 changes: 9 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ jobs:
- { target: thumbv7em-none-eabi, os: ubuntu-latest, std: 1 }
- { target: thumbv7em-none-eabihf, os: ubuntu-latest, std: 1 }
- { target: thumbv7m-none-eabi, os: ubuntu-latest, std: 1 }
- { target: cross, os: ubuntu-latest }
build:
name: target (${{ matrix.pretty }},${{ matrix.os }})
Expand Down Expand Up @@ -283,7 +284,7 @@ jobs:
IMAGE: ${{ steps.build-docker-image.outputs.image }}
shell: bash
- name: Test Image
if: steps.prepare-meta.outputs.has-image
if: steps.prepare-meta.outputs.has-image && steps.prepare-meta.outputs.test-variant == 'default'
run: ./ci/test.sh
env:
TARGET: ${{ matrix.target }}
Expand All @@ -300,6 +301,13 @@ jobs:
target: ${{ matrix.target }}
image: ${{ steps.build-docker-image.outputs.image }}

- name: Test Cross Image
if: steps.prepare-meta.outputs.has-image && steps.prepare-meta.outputs.test-variant == 'cross'
run: ./ci/test-cross-image.sh
env:
TARGET: 'aarch64-unknown-linux-gnu'
shell: bash

- name: Login to GitHub Container Registry
if: steps.prepare-meta.outputs.has-image
uses: docker/login-action@v1
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased] - ReleaseDate

### Added

- #878 - added a dockerfile containing cross.

### Changed

- #869 - ensure cargo configuration environment variable flags are passed to the docker container.
Expand Down
26 changes: 26 additions & 0 deletions ci/test-cross-image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
# shellcheck disable=SC2086

set -x
set -eo pipefail

if [[ -z "${TARGET}" ]]; then
export TARGET="aarch64-unknown-linux-gnu"
fi
if [[ -z "${CROSS_TARGET_CROSS_IMAGE}" ]]; then
CROSS_TARGET_CROSS_IMAGE="ghcr.io/cross-rs/cross:main"
fi

main() {
docker run --rm -e TARGET \
-v /var/run/docker.sock:/var/run/docker.sock \
"${CROSS_TARGET_CROSS_IMAGE}" sh -c '
#!/usr/bin/env sh
td="$(mktemp -d)"
git clone --depth 1 https://github.com/cross-rs/rust-cpp-hello-word "${td}"
cd "${td}"
cross run --target "${TARGET}"
'
}

main "${@}"
22 changes: 22 additions & 0 deletions docker/Dockerfile.cross
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FROM ubuntu:20.04 as rust
ARG DEBIAN_FRONTEND=noninteractive
COPY docker/lib.sh docker/cross.sh /
COPY ./ /project
RUN /cross.sh /project

# we build our images in 2 steps, to ensure we have a compact
# image, since we want to add our current subdirectory
FROM ubuntu:20.04
COPY --from=rust /root/.cargo /root/.cargo
COPY --from=rust /root/.rustup /root/.rustup

# need some basic devtools, and requirements for docker
RUN apt-get update && apt-get install --assume-yes --no-install-recommends \
ca-certificates \
curl \
git

RUN curl -fsSL https://get.docker.com | sh

ENV CROSS_CONTAINER_IN_CONTAINER=1 \
PATH=/root/.cargo/bin:$PATH
24 changes: 24 additions & 0 deletions docker/cross.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC1091

set -x
set -euo pipefail

. lib.sh

main() {
local project_dir="${1}"

install_packages ca-certificates curl gcc libc6-dev

cd "${project_dir}"
curl --proto "=https" --tlsv1.2 --retry 3 -sSfL https://sh.rustup.rs | sh -s -- -y
source "${HOME}"/.cargo/env
cargo install --path . --locked

purge_packages

rm -rf "${0}"
}

main "${@}"
9 changes: 7 additions & 2 deletions xtask/src/build_docker_image.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ pub fn build_docker_image(
}
}
let gha = std::env::var("GITHUB_ACTIONS").is_ok();
let docker_root = metadata.workspace_root.join("docker");
let root = metadata.workspace_root;
let docker_root = root.join("docker");
let cross_toolchains_root = docker_root.join("cross-toolchains").join("docker");
let targets = targets
.into_iter()
Expand Down Expand Up @@ -237,7 +238,11 @@ pub fn build_docker_image(
docker_build.args(&["--build-arg", arg]);
}

docker_build.arg(".");
if target.needs_workspace_root_context() {
docker_build.arg(&root);
} else {
docker_build.arg(".");
}

if !dry_run && (force || !push || gha) {
let result = docker_build.run(msg_info, false);
Expand Down
5 changes: 5 additions & 0 deletions xtask/src/ci.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ pub fn ci(args: CiJob, metadata: CargoMetadata) -> cross::Result<()> {
if target.has_ci_image() {
gha_output("has-image", "true")
}
if target.is_default_test_image() {
gha_output("test-variant", "default")
} else {
gha_output("test-variant", &target.triplet)
}
}
CiJob::Check { ref_type, ref_name } => {
let version = semver::Version::parse(&cross_meta.version)?;
Expand Down
10 changes: 10 additions & 0 deletions xtask/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@ impl ImageTarget {
.iter()
.any(|m| m.builds_image() && m.target == self.triplet && m.sub == self.sub)
}

/// Determine if this target uses the default test script
pub fn is_default_test_image(&self) -> bool {
self.triplet != "cross"
}

/// Determine if this target needs to interact with the project root.
pub fn needs_workspace_root_context(&self) -> bool {
self.triplet == "cross"
}
}

impl std::str::FromStr for ImageTarget {
Expand Down

0 comments on commit 6f51b86

Please sign in to comment.