v4l2rtspserver/.circleci/config.yml
2021-02-27 14:47:41 +01:00

278 lines
10 KiB
YAML

defaults: &defaults
working_directory: /v4l2rtspserver
docker:
- image: heroku/heroku:18
version: 2
jobs:
build_x86_64:
<<: *defaults
steps:
- checkout
- run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make g++ liblog4cpp5-dev libasound2-dev pkg-config
- run: cmake . && make
- run: cpack .
- run: mkdir -p /distrib && cp *.deb /distrib
- persist_to_workspace:
root: /
paths:
- distrib
build_rpi_armv6:
<<: *defaults
environment:
TAR_OPTIONS: --no-same-owner
CROSSCOMPILER: https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz
steps:
- checkout
- run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make pkg-config
- run:
command: wget -qO- ${CROSSCOMPILER} | tar xz -C /opt
no_output_timeout: 30m
- run: echo "export PATH=$(ls -d /opt/cross-pi-gcc-*/bin):\$PATH" >> $BASH_ENV
- run: cmake -DCMAKE_SYSTEM_PROCESSOR=armv6l -DCMAKE_TOOLCHAIN_FILE=${CIRCLE_WORKING_DIRECTORY}/raspberry.toolchain . && make
- run: cpack .
- run: mkdir -p /distrib && cp *.deb /distrib
- persist_to_workspace:
root: /
paths:
- distrib
build_rpi_armv7:
<<: *defaults
environment:
TAR_OPTIONS: --no-same-owner
CROSSCOMPILER: https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz
steps:
- checkout
- run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make pkg-config
- run:
command: wget -qO- ${CROSSCOMPILER} | tar xz -C /opt
no_output_timeout: 30m
- run: echo "export PATH=$(ls -d /opt/cross-pi-gcc-*/bin):\$PATH" >> $BASH_ENV
- run: cmake -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_TOOLCHAIN_FILE=${CIRCLE_WORKING_DIRECTORY}/raspberry.toolchain . && make
- run: cpack .
- run: mkdir -p /distrib && cp *.deb /distrib
- persist_to_workspace:
root: /
paths:
- distrib
build_mips:
<<: *defaults
steps:
- checkout
- run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make g++-mips-linux-gnu pkg-config
- run: cmake -DCMAKE_TOOLCHAIN_FILE=${CIRCLE_WORKING_DIRECTORY}/mips.toolchain . && make
- run: cpack .
- run: mkdir -p /distrib && cp *.deb /distrib
- persist_to_workspace:
root: /
paths:
- distrib
build_arm64:
<<: *defaults
steps:
- checkout
- run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make gcc-aarch64-linux-gnu g++-aarch64-linux-gnu pkg-config
- run: cmake -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY . && make
- run: cpack .
- run: mkdir -p /distrib && cp *.deb /distrib
- persist_to_workspace:
root: /
paths:
- distrib
store_artifact:
<<: *defaults
steps:
- attach_workspace:
at: /
- store_artifacts:
path: /distrib
github_release:
<<: *defaults
steps:
- attach_workspace:
at: /
- run: apt-get update; apt-get install -y --no-install-recommends golang
- run: go get github.com/tcnksm/ghr
- deploy:
name: "Deploy to Github"
command: $(go env GOPATH)/bin/ghr -t $GITHUB_TOKEN -u $CIRCLE_PROJECT_USERNAME -r $CIRCLE_PROJECT_REPONAME $CIRCLE_TAG /distrib
# -------------------------------------
# publish docker amd64
# -------------------------------------
publish_docker_linuxamd64:
machine:
docker_layer_caching: false
steps:
- checkout
- run: git submodule update --init
- run:
command: |
export TAG=${CIRCLE_TAG:-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 -f Dockerfile .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64
# -------------------------------------
# publish docker arm
# -------------------------------------
publish_docker_linuxarm32v7:
machine:
docker_layer_caching: false
steps:
- checkout
- run: git submodule update --init
- run:
command: |
export TAG=${CIRCLE_TAG:-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 -f Dockerfile.rpi .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7
# -------------------------------------
# publish docker arm
# -------------------------------------
publish_docker_linuxarm32v6:
machine:
docker_layer_caching: false
steps:
- checkout
- run: git submodule update --init
- run:
command: |
export TAG=${CIRCLE_TAG:-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --build-arg ARCH=armv6l --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 -f Dockerfile.rpi .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6
# -------------------------------------
# publish docker arm
# -------------------------------------
publish_docker_linuxarm64:
machine:
docker_layer_caching: false
steps:
- checkout
- run: git submodule update --init
- run:
command: |
export TAG=${CIRCLE_TAG:-latest}
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm64 -f Dockerfile.arm64 .
docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm64
# -------------------------------------
# publish docker manifest
# -------------------------------------
publish_docker_multiarch:
machine:
image: circleci/classic:201808-01
steps:
- run:
command: |
mkdir $HOME/.docker
sh -c 'echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json'
#
docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
export TAG=${CIRCLE_TAG:-latest}
echo "create manifest"
docker manifest create --amend $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm64
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 --os linux --arch amd64
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 --os linux --arch arm --variant v7
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 --os linux --arch arm --variant v6l
docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm64 --os linux --arch arm64
docker manifest inspect $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}
echo "push manifest"
docker manifest push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} -p
workflows:
version: 2
build:
jobs:
- build_x86_64:
filters:
tags:
only: /.*/
- build_rpi_armv6:
filters:
tags:
only: /.*/
- build_rpi_armv7:
filters:
tags:
only: /.*/
- build_mips:
filters:
tags:
only: /.*/
- build_arm64:
filters:
tags:
only: /.*/
- store_artifact:
requires:
- build_x86_64
- build_rpi_armv6
- build_rpi_armv7
- build_mips
- build_arm64
filters:
tags:
only: /.*/
- github_release:
requires:
- build_x86_64
- build_rpi_armv6
- build_rpi_armv7
- build_mips
- build_arm64
filters:
branches:
ignore: /.*/
tags:
only: /.*/
docker:
jobs:
- publish_docker_linuxamd64:
filters:
tags:
only: /.*/
- publish_docker_linuxarm32v7:
filters:
tags:
only: /.*/
- publish_docker_linuxarm32v6:
filters:
tags:
only: /.*/
- publish_docker_linuxarm64:
filters:
tags:
only: /.*/
- publish_docker_multiarch:
requires:
- publish_docker_linuxamd64
- publish_docker_linuxarm32v7
- publish_docker_linuxarm32v6
- publish_docker_linuxarm64
filters:
tags:
only: /.*/