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: <<: *defaults steps: - checkout - run: apt-get update; apt-get install -y --no-install-recommends cmake autoconf automake libtool git make pkg-config - run: git clone --depth 1 https://github.com/raspberrypi/tools.git rpi_tools - run: echo 'export PATH=${CIRCLE_WORKING_DIRECTORY}/rpi_tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH' >> $BASH_ENV - run: cmake -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 store_artifact: <<: *defaults steps: - attach_workspace: at: / - store_artifacts: path: /distrib github_release: <<: *defaults steps: - attach_workspace: at: / - run: curl https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz | tar -C /usr/local -xzf - - run: echo 'export PATH=/usr/local/go/bin:/root/go/bin:$PATH' >> $BASH_ENV - run: go get github.com/tcnksm/ghr - deploy: 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: | export TAG=${CIRCLE_TAG:-lastest} 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: true steps: - checkout - run: git submodule update --init - run: command: | export TAG=${CIRCLE_TAG:-lastest} 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: true 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 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:-lastest} 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 echo "annotate manifest amd64" docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-amd64 --os linux --arch amd64 echo "annotate manifest arm32-v7" docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v7 --os linux --arch arm --variant v7 echo "annotate manifest arm32-v6" docker manifest annotate $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG} $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME:${TAG}-arm32v6 --os linux --arch arm --variant v6 docker 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: filters: tags: only: /.*/ - build_mips: filters: tags: only: /.*/ - store_artifact: requires: - build_x86_64 - build_rpi - build_mips filters: tags: only: /.*/ - github_release: requires: - build_x86_64 - build_rpi - build_mips 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_multiarch: requires: - publish_docker_linuxamd64 - publish_docker_linuxarm32v7 - publish_docker_linuxarm32v6 filters: tags: only: /.*/