--- kind: pipeline type: docker name: check trigger: event: - cron cron: - weekly-update-check steps: - name: check image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock environment: DRONE_API_TOKEN: from_secret: drone_api_token REGISTRY_PWD: from_secret: registry_pwd commands: - apk add git curl jq - echo "Checking for new server version" # collect info from upstream repository - git clone https://github.com/drone/drone.git - cd drone - LATEST_VERSION=$(git tag --sort v:refname | grep '^v[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}$' | tail -n 1) - git checkout $LATEST_VERSION - COMMIT_HASH=$(git log -n 1 --pretty=%H) # collect info from current image - echo $REGISTRY_PWD | docker login -u drone --password-stdin registry.jfmonty2.com # defaults to 0 if image can't be found - docker pull registry.jfmonty2.com/drone-server:latest || true - IMAGE_COMMIT_HASH=$(docker image inspect -f '{{ .Config.Labels.drone_commit_hash }}' registry.jfmonty2.com/drone-server:latest || echo 0) # compare and trigger build if necessary - | if [[ $COMMIT_HASH != $IMAGE_COMMIT_HASH ]]; then echo 'Updates available, triggering server build.' curl -X POST -H "Authorization: Bearer $DRONE_API_TOKEN" \ https://drone.jfmonty2.com/api/repos/jfmonty2/drone/builds/$DRONE_BUILD_NUMBER/promote?target=server-build else echo 'Server is already up to date.' fi # now check for runner - echo "Checking for new runner version" - RELEASE=$(curl https://api.github.com/repos/drone-runners/drone-runner-exec/releases | jq -r '.[0]') - LATEST_VERSION=$(echo $RELEASE | jq -r '.tag_name') # get version of currently running instance (also defaults to 0 if not found) - docker pull registry.jfmonty2.com/drone-runner-exec:latest || true - CURRENT_VERSION=$(docker image inspect -f '{{ .Config.Labels.drone_runner_version }}' registry.jfmonty2.com/drone-runner-exec:latest || echo 0) # compare and trigger build if necessary - | if [[ $LATEST_VERSION != $CURRENT_VERSION ]]; then echo 'New release available, triggering runner build.' curl -X POST -H "Authorization: Bearer $DRONE_API_TOKEN" \ https://drone.jfmonty2.com/api/repos/jfmonty2/drone/builds/$DRONE_BUILD_NUMBER/promote?target=runner-build else echo 'Runner is already up to date.' fi volumes: - name: docker-socket host: path: /var/run/docker.sock --- kind: pipeline type: docker name: server trigger: event: - promote target: - server-build steps: - name: prepare image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock commands: - echo 'http://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories - apk update - apk add git yq - git clone https://github.com/drone/drone.git - cd drone - LATEST_VERSION=$(git tag --sort v:refname | grep '^v[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}$' | tail -n 1) - git checkout $LATEST_VERSION - printf $(git log -n 1 --pretty=%H) > ../commit_hash # we'll need this for the docker build - GOLANG_IMG=$(yq read .drone.yml 'steps[0].image') - docker pull $GOLANG_IMG - docker tag $GOLANG_IMG drone-builder:latest - docker image rm $GOLANG_IMG - name: compile image: drone-builder:latest pull: never environment: GOARCH: amd64 GOOS: linux commands: - cd drone - > go build -ldflags "-extldflags \"-static\"" -tags nolimit -o release/linux/amd64/drone-server github.com/drone/drone/cmd/drone-server - name: docker-build image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock commands: - cd drone - rm .dockerignore - > docker build -f docker/Dockerfile.server.linux.amd64 -t registry.jfmonty2.com/drone-server:latest --label drone_commit_hash=$(cat ../commit_hash) . - name: deploy image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock environment: REGISTRY_PWD: from_secret: registry_pwd commands: - echo $REGISTRY_PWD | docker login -u drone --password-stdin registry.jfmonty2.com - docker push registry.jfmonty2.com/drone-server:latest volumes: - name: docker-socket host: path: /var/run/docker.sock --- kind: pipeline type: docker name: runner-exec trigger: event: - promote target: - runner-build steps: - name: docker-build image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock commands: # get version number - apk add curl jq - RUNNER_VERSION=$(curl https://api.github.com/repos/drone-runners/drone-runner-exec/releases | jq -r '.[0].tag_name') # get the binary - cd runner-exec - curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_linux_amd64.tar.gz | tar xz - > docker build -t registry.jfmonty2.com/drone-runner-exec:latest --label drone_runner_version=$RUNNER_VERSION . - name: deploy image: docker:latest volumes: - name: docker-socket path: /var/run/docker.sock environment: REGISTRY_PWD: from_secret: registry_pwd commands: - echo $REGISTRY_PWD | docker login -u drone --password-stdin registry.jfmonty2.com - docker push registry.jfmonty2.com/drone-runner-exec:latest volumes: - name: docker-socket host: path: /var/run/docker.sock