mirror of https://github.com/ARMmbed/mbed-os.git
GitHub Action workflow for mbed-os-env docker image test and publish
parent
f3f55c8c34
commit
faac0ed034
|
@ -0,0 +1,121 @@
|
|||
|
||||
name: Publish or Update docker image for mbed-os-5.15
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- mbed-os-5.15
|
||||
|
||||
paths:
|
||||
- requirements.txt
|
||||
- docker_images/mbed-os-env/**
|
||||
- .github/workflows/docker_management.publish.yml
|
||||
|
||||
# manual trigger when needed
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
prepare-tags:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Extract branch name
|
||||
shell: bash
|
||||
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
|
||||
id: extract_branch
|
||||
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
-
|
||||
name: Set UUID
|
||||
id: generate-uuid
|
||||
uses: filipstefansson/uuid-action@v1
|
||||
|
||||
# set docker tags we are building, and intending to publish
|
||||
# dev-tag is temporary for testing purpose. This should be considered as unstable.
|
||||
# dated-tag is created for versioning purpose
|
||||
# prod-tag-latest could be used by customers, CI etc for keeping up to date
|
||||
-
|
||||
name: Get build information
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p build_info
|
||||
date=$(date +"%Y.%m.%dT%H.%M.%S")
|
||||
echo dev-${{ steps.extract_branch.outputs.branch }}-${date}-${{ steps.generate-uuid.outputs.uuid }} > build_info/dev_tag
|
||||
echo ${{ steps.extract_branch.outputs.branch }}-${date} > build_info/prod_tag_dated
|
||||
echo ${{ steps.extract_branch.outputs.branch }}-latest > build_info/prod_tag_latest
|
||||
echo ${{ steps.extract_branch.outputs.branch }} > build_info/mbed_os_version
|
||||
echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]' > build_info/repository_owner
|
||||
|
||||
-
|
||||
name: Archive information
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: build-info
|
||||
path: build_info
|
||||
|
||||
|
||||
build-container:
|
||||
runs-on: ubuntu-latest
|
||||
needs: prepare-tags
|
||||
|
||||
steps:
|
||||
-
|
||||
name: unarchive artefacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: build-info
|
||||
|
||||
-
|
||||
name: Get build info from archive
|
||||
shell: bash
|
||||
id: build_info
|
||||
run: |
|
||||
value=`cat dev_tag`
|
||||
echo "DEV TAG is $value"
|
||||
echo "::set-output name=DOCKER_DEV_TAG::$value"
|
||||
value=`cat prod_tag_dated`
|
||||
echo "PROD TAG DATED is $value"
|
||||
echo "::set-output name=DOCKER_PROD_TAG_DATED::$value"
|
||||
value=`cat prod_tag_latest`
|
||||
echo "::set-output name=DOCKER_PROD_TAG_LATEST::$value"
|
||||
echo "PROD TAG is $value"
|
||||
value=`cat repository_owner`
|
||||
echo "::set-output name=REPO_OWNER::$value"
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
-
|
||||
name: Login to ghcr.io
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
-
|
||||
name: Build docker containers
|
||||
uses: docker/build-push-action@v2
|
||||
id: docker_build_dev
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
file: ./docker_images/mbed-os-env/Dockerfile
|
||||
tags: ghcr.io/${{ steps.build_info.outputs.REPO_OWNER }}/mbed-os-env:${{ steps.build_info.outputs.DOCKER_PROD_TAG_LATEST }}
|
||||
|
||||
# as docker tags are reused, copy also to a "fixed tag"
|
||||
# for troubleshooting purpose if needed
|
||||
-
|
||||
name: copy tag to fixed tag
|
||||
run: |
|
||||
docker run quay.io/skopeo/stable --src-creds=${{ github.repository_owner }}:${{ secrets.GITHUB_TOKEN }} --dest-creds=${{ github.repository_owner }}:${{ secrets.GITHUB_TOKEN }} copy --all docker://ghcr.io/${{ steps.build_info.outputs.REPO_OWNER }}/mbed-os-env:${{ steps.build_info.outputs.DOCKER_PROD_TAG_LATEST }} docker://ghcr.io/${{ steps.build_info.outputs.REPO_OWNER }}/mbed-os-env:${{ steps.build_info.outputs.DOCKER_PROD_TAG_DATED }}
|
|
@ -0,0 +1,72 @@
|
|||
name: Build and test docker image
|
||||
|
||||
# This workflow is triggered when Dockerfile related or github action itself changes are made in a PR
|
||||
# The workflow is quite simple - builds and test the image. Release of newer version is done only when PR is merged.
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ mbed-os-5.15 ]
|
||||
paths:
|
||||
- docker_images/mbed-os-env/**
|
||||
- .github/workflows/docker_management.*
|
||||
- requirements.txt
|
||||
|
||||
jobs:
|
||||
|
||||
build-container:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [linux/amd64]
|
||||
|
||||
steps:
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
# use mbed-os-5.15 branch of blinky
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: ARMmbed/mbed-os-example-blinky
|
||||
path: mbed-os-example-blinky
|
||||
ref: mbed-os-5.15
|
||||
|
||||
-
|
||||
name: Remove mbed-os from example-application
|
||||
shell: bash
|
||||
run: |
|
||||
cd mbed-os-example-blinky
|
||||
rm -rf mbed-os
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: mbed-os-example-blinky/mbed-os
|
||||
|
||||
-
|
||||
name: Build container
|
||||
uses: docker/build-push-action@v2
|
||||
id: docker_build_dev
|
||||
with:
|
||||
context: ./mbed-os-example-blinky/mbed-os
|
||||
platforms: ${{ matrix.platform }}
|
||||
file: ./mbed-os-example-blinky/mbed-os/docker_images/mbed-os-env/Dockerfile
|
||||
load: true
|
||||
tags: mbed-os-env:a_pr_test
|
||||
|
||||
-
|
||||
name: test the container
|
||||
id: test
|
||||
uses: addnab/docker-run-action@v2
|
||||
with:
|
||||
options: -v ${{ github.workspace }}:/work -w=/work
|
||||
image: mbed-os-env:a_pr_test
|
||||
shell: bash
|
||||
run: |
|
||||
uname -m
|
||||
cd mbed-os-example-blinky
|
||||
# build using CLI1
|
||||
mbed compile -m K64F -t GCC_ARM
|
|
@ -0,0 +1,89 @@
|
|||
# ------------------------------------------------------------------------------
|
||||
# Pull base image
|
||||
FROM ubuntu:20.04
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Arguments
|
||||
ARG WORKDIR=/root
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Install tools via apt
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN set -x \
|
||||
&& apt -y update \
|
||||
&& apt -y install \
|
||||
git \
|
||||
wget \
|
||||
python3 \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-pip \
|
||||
build-essential \
|
||||
astyle \
|
||||
mercurial \
|
||||
ninja-build \
|
||||
libssl-dev \
|
||||
cargo \
|
||||
flex \
|
||||
bison \
|
||||
doxygen \
|
||||
aspell \
|
||||
ccache \
|
||||
gcovr \
|
||||
&& apt clean && rm -rf /var/lib/apt/lists \
|
||||
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 \
|
||||
&& : # last line
|
||||
|
||||
# Set up Mbed environment
|
||||
WORKDIR /tmp/
|
||||
COPY requirements.txt .
|
||||
RUN set -x \
|
||||
&& pip3 install -r requirements.txt \
|
||||
&& : # last line
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Install Python modules (which are not included in requirements.txt)
|
||||
RUN set -x \
|
||||
&& pip3 install -U \
|
||||
mbed-cli \
|
||||
&& : # last line
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# install scancode-toolkit, which is available only in x86_64
|
||||
RUN set -x \
|
||||
&& [ "$(uname -m)" = "x86_64" ] && \
|
||||
pip install scancode-toolkit
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Install arm-none-eabi-gcc
|
||||
WORKDIR /opt/mbed-os-toolchain
|
||||
|
||||
RUN set -x \
|
||||
&& [ "$(uname -m)" = "aarch64" ] && \
|
||||
TARBALL="gcc-arm-none-eabi-9-2019-q4-major-aarch64-linux.tar.bz2" || \
|
||||
TARBALL="gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2" \
|
||||
&& wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/${TARBALL} \
|
||||
&& tar -xjf ${TARBALL} \
|
||||
&& rm ${TARBALL} \
|
||||
&& : # last line
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# Configure environment variables
|
||||
ENV MBED_GCC_ARM_PATH=/opt/mbed-os-toolchain/gcc-arm-none-eabi-9-2019-q4-major/bin/
|
||||
ENV PATH="${PATH}:${MBED_GCC_ARM_PATH}"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Display, check and save environment settings
|
||||
# NOTE: using bash instead of Ubuntu default bash due to unsupport for pipefail
|
||||
# Pipefail is crucial here, if the tools didn't install properly, docker build should not pass because of piping
|
||||
RUN /bin/bash -c \
|
||||
"set -x -o pipefail \
|
||||
&& arm-none-eabi-gcc --version | grep arm-none-eabi-gcc | tee env_settings \
|
||||
&& python --version 2>&1 | tee -a env_settings \
|
||||
&& (echo -n 'mbed-cli ' && mbed --version) | tee -a env_settings \
|
||||
&& (echo -n 'mbed-greentea ' && mbedgt --version | grep ^[0-9]) | tee -a env_settings \
|
||||
&& (echo -n 'mbed-host-tests ' && mbedhtrun --version) | tee -a env_settings \
|
||||
&& : # LAST LINE"
|
||||
|
||||
WORKDIR /root
|
|
@ -0,0 +1,49 @@
|
|||
# Mbed OS development environment Docker image
|
||||
|
||||
This Docker image is the official Mbed OS development environment.
|
||||
|
||||
* It is based on Ubuntu 20.04
|
||||
* Arm-none-eabi-gcc toolchain is installed
|
||||
* Latest released version of mbed-cli and mbed-greentea are installed
|
||||
* All other Mbed OS dependency tools are installed.
|
||||
|
||||
# How to use the Docker image:
|
||||
|
||||
## Pull the Docker image
|
||||
```bash
|
||||
docker pull ghcr.io/armmbed/mbed-os-env:<label>
|
||||
```
|
||||
|
||||
## Run Mbed OS environment without HW support (build Mbed images only)
|
||||
Launch the Docker image by
|
||||
```bash
|
||||
docker run -it ghcr.io/armmbed/mbed-os-env:<label>
|
||||
```
|
||||
Then you will have a container with an Mbed OS development environment.
|
||||
You should be able to compile Mbed commands/examples as recommended in the documentation
|
||||
e.g.
|
||||
```bash
|
||||
mbed-tools import mbed-os-example-blinky
|
||||
cd mbed-os-example-blinky
|
||||
mbed-tools compile -m <TARGET> -t GCC_ARM
|
||||
```
|
||||
|
||||
## Run Mbed OS environment with HW support (USB pass-through)
|
||||
:warning: This currently works only on Linux host machines with [Mbed CLI 1](https://os.mbed.com/docs/mbed-os/v6.13/build-tools/mbed-cli-1.html).
|
||||
|
||||
If you want to use this Docker image to connect and flash your targets, you will need some extra command line option to pass-through your USB devices.
|
||||
```bash
|
||||
sudo docker run -it --privileged -v /dev/disk/by-id:/dev/disk/by-id -v /dev/serial/by-id:/dev/serial/by-id ghcr.io/armmbed/mbed-os-env:<label>
|
||||
```
|
||||
Then you will have a container with an Mbed OS development environment.
|
||||
To make sure your Mbed targets have been detected, you might want to manually run the mount command and `mbedls` to check
|
||||
```bash
|
||||
mount /dev/sdb /mnt
|
||||
mbedls
|
||||
```
|
||||
If `mbedls` detected your connected target, then you should be able to run Mbed tests/examples as recommended in the Mbed documentation.
|
||||
``` bash
|
||||
mbed import mbed-os
|
||||
cd mbed-os
|
||||
mbed test -t GCC_ARM -m <target>
|
||||
```
|
Loading…
Reference in New Issue