Skip to content

Commit df90b9b

Browse files
authored
[docker] Dockerfile improvements and script fixes (#586)
- Add a docker build action - Derive `repo_dir` using `script_dir` instead of running a `git` command. This will allow using the scripts when the repo is downloaded as a `.zip` - Change `script/generate_cmake.py` to default to python3 specifically
1 parent 14c9781 commit df90b9b

13 files changed

+144
-22
lines changed

.dockerignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.git
2-
build/
2+
**/build/
33
third_party/silabs/

.github/workflows/docker.yml

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#
2+
# Copyright (c) 2023, The OpenThread Authors.
3+
# All rights reserved.
4+
#
5+
# Redistribution and use in source and binary forms, with or without
6+
# modification, are permitted provided that the following conditions are met:
7+
# 1. Redistributions of source code must retain the above copyright
8+
# notice, this list of conditions and the following disclaimer.
9+
# 2. Redistributions in binary form must reproduce the above copyright
10+
# notice, this list of conditions and the following disclaimer in the
11+
# documentation and/or other materials provided with the distribution.
12+
# 3. Neither the name of the copyright holder nor the
13+
# names of its contributors may be used to endorse or promote products
14+
# derived from this software without specific prior written permission.
15+
#
16+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
# POSSIBILITY OF SUCH DAMAGE.
27+
#
28+
29+
name: Docker
30+
31+
on:
32+
push:
33+
branches-ignore:
34+
- 'dependabot/**'
35+
pull_request:
36+
branches:
37+
- 'main'
38+
39+
concurrency:
40+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || (github.repository == 'openthread/ot-efr32' && github.run_id) || github.ref }}
41+
cancel-in-progress: true
42+
43+
permissions: # added using https://github.com/step-security/secure-workflows
44+
contents: read
45+
46+
jobs:
47+
buildx:
48+
name: buildx
49+
runs-on: ubuntu-22.04
50+
steps:
51+
- name: Harden Runner
52+
uses: step-security/harden-runner@6b3083af2869dc3314a0257a42f4af696cc79ba3 # v2.3.1
53+
with:
54+
egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
55+
56+
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
57+
with:
58+
submodules: true
59+
60+
- name: Prepare
61+
id: prepare
62+
run: |
63+
DOCKER_IMAGE=siliconlabsinc/ot-efr32-dev
64+
DOCKER_FILE=Dockerfile
65+
DOCKER_PLATFORMS=linux/amd64
66+
VERSION=latest
67+
68+
TAGS="--tag ${DOCKER_IMAGE}:${VERSION}"
69+
70+
echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT
71+
echo "version=${VERSION}" >> $GITHUB_OUTPUT
72+
echo "buildx_args=--platform ${DOCKER_PLATFORMS} \
73+
--build-arg OT_GIT_REF=${{ github.sha }} \
74+
--build-arg VERSION=${VERSION} \
75+
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
76+
--build-arg VCS_REF=${GITHUB_SHA::8} \
77+
${TAGS} --file ${DOCKER_FILE} ." >> $GITHUB_OUTPUT
78+
79+
- name: Set up Docker Buildx
80+
uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0
81+
82+
- name: Docker Buildx (build)
83+
run: |
84+
docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }}
85+
86+
- name: Login to DockerHub
87+
if: success() && github.repository == 'SiliconLabs/ot-efr32' && github.event_name != 'pull_request'
88+
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0
89+
with:
90+
username: ${{ secrets.DOCKER_USERNAME }}
91+
password: ${{ secrets.DOCKER_PASSWORD }}
92+
93+
- name: Docker Buildx (push)
94+
if: success() && github.repository == 'SiliconLabs/ot-efr32' && github.event_name != 'pull_request'
95+
run: |
96+
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }}
97+
98+
- name: Inspect Image
99+
if: always() && github.repository == 'SiliconLabs/ot-efr32' && github.event_name != 'pull_request'
100+
run: |
101+
docker buildx imagetools inspect ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}

Dockerfile

+25-8
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,34 @@
1-
FROM ubuntu:20.04
1+
FROM ubuntu:22.04
22

33
ENV TZ="America/New_York"
44
ENV repo_dir="/ot-efr32"
5+
WORKDIR ${repo_dir}
56

67
# Install packages
78
RUN apt-get update && \
8-
apt-get -y install sudo tzdata && \
9-
rm -rf /var/lib/apt/lists/*
9+
apt-get -y install --no-install-recommends \
10+
sudo \
11+
tzdata \
12+
&& rm -rf /var/lib/apt/lists/*
1013

1114
# Copy scripts
12-
RUN mkdir -p ${repo_dir}/third_party/silabs/slc
13-
COPY ./script ${repo_dir}/script
14-
COPY ./openthread/script ${repo_dir}/openthread/script
15+
COPY ./openthread/script ./openthread/script
16+
COPY ./script/bootstrap \
17+
./script/bootstrap_silabs \
18+
./script/
19+
COPY ./requirements.txt .
1520

16-
# bootstrap
17-
RUN ./ot-efr32/script/bootstrap
21+
# Bootstrap
22+
RUN ./script/bootstrap packages && rm -rf /var/lib/apt/lists/*
23+
24+
ENV SLC_INSTALL_DIR=/opt/slc_cli
25+
RUN mkdir ${SLC_INSTALL_DIR} && \
26+
./script/bootstrap silabs
27+
28+
RUN ./script/bootstrap openthread && rm -rf /var/lib/apt/lists/*
29+
30+
# Clone repo for convenience
31+
ARG REPO_URL="https://github.com/openthread/ot-efr32"
32+
WORKDIR /
33+
RUN rm -rf ${repo_dir} && git clone ${REPO_URL} ${repo_dir}
34+
WORKDIR ${repo_dir}

script/bootstrap

+6-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ else
3838
script_path="$0"
3939
fi
4040
script_dir="$(realpath "$(dirname "${script_path}")")"
41-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
41+
repo_dir="$(dirname "${script_dir}")"
4242

4343
# ==============================================================================
4444

@@ -54,7 +54,8 @@ install_packages_apt()
5454
python3-setuptools \
5555
python3-pip \
5656
git-lfs \
57-
unzip
57+
unzip \
58+
wget
5859
}
5960

6061
install_packages_opkg()
@@ -83,7 +84,7 @@ install_packages_source()
8384

8485
install_packages_pip3()
8586
{
86-
pip3 install -U -r "${repo_dir}/requirements.txt"
87+
pip3 install --no-cache-dir --upgrade -r "${repo_dir}/requirements.txt"
8788
}
8889

8990
install_packages()
@@ -122,6 +123,8 @@ main()
122123
install_packages
123124
do_bootstrap_openthread
124125
do_bootstrap_silabs
126+
elif [ "$1" == 'packages' ]; then
127+
install_packages
125128
elif [ "$1" == 'openthread' ]; then
126129
do_bootstrap_openthread
127130
elif [ "$1" == 'python' ]; then

script/bootstrap_silabs

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ else
3838
script_path="$0"
3939
fi
4040
script_dir="$(realpath "$(dirname "${script_path}")")"
41-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
41+
repo_dir="$(dirname "${script_dir}")"
4242

4343
# ==============================================================================
4444

@@ -55,10 +55,11 @@ install_slc_cli()
5555
fi
5656

5757
local zip_url="https://www.silabs.com/documents/login/software/slc_cli_${os_type}.zip"
58+
mkdir -p "${SLC_INSTALL_DIR}"
5859
pushd "${SLC_INSTALL_DIR}"
5960
local zip_path="./slc_cli.zip"
6061
wget "${zip_url}" -O "${zip_path}"
61-
unzip -q -o "${zip_path}" -d "$(dirname ${zip_path})"
62+
unzip -q -o "${zip_path}" -d "$(dirname ${zip_path})" && rm "${zip_path}"
6263
popd
6364
}
6465

script/build

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ else
3636
script_path="$0"
3737
fi
3838
script_dir="$(realpath "$(dirname "${script_path}")")"
39-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
39+
repo_dir="$(dirname "${script_dir}")"
4040

4141
# shellcheck source=script/efr32-definitions
4242
source "${repo_dir}/script/efr32-definitions"

script/build_example_apps

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ else
3838
script_path="$0"
3939
fi
4040
script_dir="$(realpath "$(dirname "${script_path}")")"
41-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
41+
repo_dir="$(dirname "${script_dir}")"
4242

4343
# shellcheck source=script/efr32-definitions
4444
source "${repo_dir}/script/efr32-definitions"

script/efr32-definitions

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ else
3636
script_path="$0"
3737
fi
3838
script_dir="$(realpath "$(dirname "${script_path}")")"
39-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
39+
repo_dir="$(dirname "${script_dir}")"
4040
sdk_dir="${repo_dir}/third_party/silabs/gecko_sdk"
4141

4242
efr32_device_regex=""

script/generate

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ else
3838
script_path="$0"
3939
fi
4040
script_dir="$(realpath "$(dirname "${script_path}")")"
41-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
41+
repo_dir="$(dirname "${script_dir}")"
4242
sdk_dir="${repo_dir}/third_party/silabs/gecko_sdk"
4343

4444
# shellcheck source=script/slc_cli

script/generate_cmake.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
#
33
# Copyright (c) 2023, The OpenThread Authors.
44
# All rights reserved.

script/make-pretty

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ else
6464
script_path="$0"
6565
fi
6666
script_dir="$(realpath "$(dirname "${script_path}")")"
67-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
67+
repo_dir="$(dirname "${script_dir}")"
6868

6969
OT_BUILD_JOBS=$(getconf _NPROCESSORS_ONLN)
7070
readonly OT_BUILD_JOBS

script/slc_cli

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ else
3636
script_path="$0"
3737
fi
3838
script_dir="$(realpath "$(dirname "${script_path}")")"
39-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
39+
repo_dir="$(dirname "${script_dir}")"
4040

4141
# slc-cli installation dir
4242
[ -n "${SLC_INSTALL_DIR-}" ] || SLC_INSTALL_DIR="${repo_dir}/slc"

script/test

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ else
3838
script_path="$0"
3939
fi
4040
script_dir="$(realpath "$(dirname "${script_path}")")"
41-
repo_dir="$(git -C "${script_dir}" rev-parse --show-toplevel)"
41+
repo_dir="$(dirname "${script_dir}")"
4242

4343
# shellcheck source=script/efr32-definitions
4444
source "${repo_dir}/script/efr32-definitions"

0 commit comments

Comments
 (0)