diff --git a/.circleci/config.yml b/.circleci/config.yml index 4bcb659..2736558 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,9 +1,13 @@ +defaults: &defaults + working_directory: /v4l2rtspserver + docker: + - image: heroku/heroku:18 + version: 2 jobs: build_x86_64: - working_directory: ~/v4l2rtspserver - docker: - - image: heroku/heroku:16 + <<: *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 @@ -16,9 +20,8 @@ jobs: - distrib build_rpi: - working_directory: ~/v4l2rtspserver - docker: - - image: heroku/heroku:16 + <<: *defaults + steps: - checkout - run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make pkg-config @@ -33,9 +36,8 @@ jobs: - distrib build_mips: - working_directory: ~/v4l2rtspserver - docker: - - image: heroku/heroku:16 + <<: *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 @@ -48,9 +50,8 @@ jobs: - distrib store_artifact: - working_directory: ~/v4l2rtspserver - docker: - - image: heroku/heroku:16 + <<: *defaults + steps: - attach_workspace: at: / @@ -58,9 +59,8 @@ jobs: path: /distrib github_release: - working_directory: ~/v4l2rtspserver - docker: - - image: heroku/heroku:16 + <<: *defaults + steps: - attach_workspace: at: / @@ -71,6 +71,53 @@ jobs: name: "Deploy to Github" command: 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: true + steps: + - checkout + - run: git submodule update --init + - run: + command: | + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-amd64 -f Dockerfile . + sudo docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-amd64 + + # ------------------------------------- + # publish docker arm + # ------------------------------------- + publish_docker_linuxarm32v7: + machine: + docker_layer_caching: true + steps: + - checkout + - run: git submodule update --init + - run: + command: | + sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS + sudo docker build --pull -t $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-arm32v7 -f Dockerfile.rpi . + sudo docker push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-arm32v7 + # ------------------------------------- + # 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 + docker manifest create --amend $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-amd64 $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-arm32v7 + docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-amd64 --os linux --arch amd64 + docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest-arm32v7 --os linux --arch arm --variant v7 + docker manifest push $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:latest -p + workflows: version: 2 @@ -106,3 +153,21 @@ workflows: ignore: /.*/ tags: only: /.*/ + + docker: + jobs: + - publish_docker_linuxamd64: + filters: + tags: + only: /.*/ + - publish_docker_linuxarm32v7: + filters: + tags: + only: /.*/ + - publish_docker_multiarch: + requires: + - publish_docker_linuxamd64 + - publish_docker_linuxarm32v7 + filters: + tags: + only: /.*/ diff --git a/Dockerfile.rpi b/Dockerfile.rpi new file mode 100644 index 0000000..c505856 --- /dev/null +++ b/Dockerfile.rpi @@ -0,0 +1,22 @@ +FROM debian as builder +LABEL maintainer michel.promonet@free.fr + +WORKDIR /v4l2rtspserver +COPY . /v4l2rtspserver + +RUN apt-get update && apt-get install -y --no-install-recommends g++ autoconf automake libtool xz-utils cmake make liblog4cpp5-dev pkg-config git wget \ + && wget -qO- https://releases.linaro.org/components/toolchain/binaries/6.4-2018.05/arm-linux-gnueabihf/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz | tar xJ \ + && export PATH=$(pwd)/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin:$PATH \ + && cmake -DCMAKE_TOOLCHAIN_FILE=raspberry.toolchain . && make install \ + && apt-get clean && rm -rf /var/lib/apt/lists/ + + +FROM balenalib/rpi-raspbian + +WORKDIR /usr/local/share/v4l2rtspserver +COPY --from=builder /usr/local/bin/ /usr/local/bin/ + +EXPOSE 8554 + +ENTRYPOINT [ "/usr/local/bin/v4l2rtspserver" ] +CMD [ "-S -P ${PORT}" ]