From 599d2509d799103ba650871959c0ac7727730113 Mon Sep 17 00:00:00 2001 From: Leonid Pliushch Date: Wed, 1 May 2019 19:22:12 +0300 Subject: [PATCH] CI: switch to Cirrus --- .cirrus.yml | 79 +++++++++++++++++++ .gitlab-ci.yml | 92 ----------------------- .travis.yml | 29 ------- scripts/build/ci/determine_git_changes.sh | 14 +++- scripts/package_uploader.sh | 2 +- 5 files changed, 93 insertions(+), 123 deletions(-) create mode 100644 .cirrus.yml delete mode 100644 .gitlab-ci.yml delete mode 100644 .travis.yml diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 000000000..12a0f3139 --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,79 @@ +container: + image: termux/package-builder:latest + cpu: 8 + memory: 16 + +# Build packages. +build_task: + # Run task only if packages were modified. + # Note that similar check is done in 'scripts/build/ci/determine_git_changes.sh'. + only_if: "changesInclude('packages/**')" + + # 2 hours is a maximal timeout for free use. + timeout_in: 120m + + environment: + matrix: + TERMUX_ARCH: aarch64 + TERMUX_ARCH: arm + TERMUX_ARCH: i686 + TERMUX_ARCH: x86_64 + + # Do not use built-in git client provided by Cirrus as it + # causes problems when determining changed files. + clone_script: | + if [[ -z "$CIRRUS_PR" ]]; then + git clone --recursive --branch=$CIRRUS_BRANCH https://x-access-token:${CIRRUS_REPO_CLONE_TOKEN}@github.com/${CIRRUS_REPO_FULL_NAME}.git $CIRRUS_WORKING_DIR + git reset --hard $CIRRUS_CHANGE_IN_REPO + else + git clone --recursive https://x-access-token:${CIRRUS_REPO_CLONE_TOKEN}@github.com/${CIRRUS_REPO_FULL_NAME}.git $CIRRUS_WORKING_DIR + git fetch origin pull/$CIRRUS_PR/head:pull/$CIRRUS_PR + git reset --hard $CIRRUS_CHANGE_IN_REPO + fi + + # Determine changes in repository and build modified packages. + build_script: | + for package in $(./scripts/build/ci/determine_git_changes.sh); do + if [ -n "$CIRRUS_PR" ]; then + # Perform full builds for PR. + ./build-package.sh -a "$TERMUX_ARCH" "$package" + else + ./build-package.sh -I -a "$TERMUX_ARCH" "$package" + fi + done + + # Make built packages available for the next tasks. + share_packages_cache: + folder: "./debs" + fingerprint_script: echo "$CIRRUS_CHANGE_IN_REPO" + + # Also make them downloadable from the UI. + store_packages_artifacts: + path: "./debs/*.deb" + +# Publish packages to Bintray. +publish_task: + only_if: $CIRRUS_BRANCH == 'master' + + timeout_in: 30m + + depends_on: + - build + + environment: + BINTRAY_USERNAME: ENCRYPTED[5f767b4b9d6437b98e81c7a9c510363be8c71458efe17b73692898f5bd2720b359a962677b68930e298febf440bea75b] + BINTRAY_API_KEY: ENCRYPTED[c056d345d7a15f90b818dd9382129c27ce4ce2b802831ec890786414fc214c4203714c353a8fef3a6b9b1b1d68e4685e] + BINTRAY_GPG_SUBJECT: ENCRYPTED[adefd71182b37f4cfe2ef734bb400f5d273c562d45536edce46fd63d260a0c0717df7e73f2bb492afb4f5c0ef6d0460d] + BINTRAY_GPG_PASSPHRASE: ENCRYPTED[854c09c78b3318a30d3c9094b1010dfebd4c71ad9173b64479eaafaa7e941b050afaa936ad635af3709382492828316f] + + # Retrieve built packages. + share_packages_cache: + folder: "./debs" + fingerprint_script: echo "$CIRRUS_CHANGE_IN_REPO" + + # Publish. + upload_to_bintray_script: | + MODIFIED_PACKAGES=$(./scripts/build/ci/determine_git_changes.sh) + if [ -n "$MODIFIED_PACKAGES" ]; then + ./scripts/package_uploader.sh $MODIFIED_PACKAGES + fi diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 0e591c2fa..000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,92 +0,0 @@ -image: termux/package-builder:latest - -stages: - - build - - deploy - -## Common configuration for all build jobs. -## Variables BINTRAY_* should be unset to -## prevent leaking of sensitive information. -.job_template: &build_job - stage: build - except: - - schedules - script: - - unset BINTRAY_USERNAME - - unset BINTRAY_API_KEY - - unset BINTRAY_GPG_SUBJECT - - unset BINTRAY_GPG_PASSPHRASE - - | - for package in $(./scripts/build/ci/determine_git_changes.sh); do - ./build-package.sh -q -I -a "$TERMUX_ARCH" "$package" || exit 1 - done - retry: - max: 2 - when: - - runner_system_failure - - unknown_failure - artifacts: - when: always - paths: - - debs - -## Building packages for AArch64. -build-aarch64: - <<: *build_job - variables: - TERMUX_ARCH: aarch64 - -## Building packages for ARM. -build-arm: - <<: *build_job - variables: - TERMUX_ARCH: arm - -## Building packages for i686. -build-i686: - <<: *build_job - variables: - TERMUX_ARCH: i686 - -## Building packages for x86_64. -build-x86_64: - <<: *build_job - variables: - TERMUX_ARCH: x86_64 - -## Submit build packages to repository. -upload-packages: - stage: deploy - only: - - master@termux-mirror/termux-packages - except: - - schedules - script: - - MODIFIED_PACKAGES=$(./scripts/build/ci/determine_git_changes.sh) - - | - if [ -n "$MODIFIED_PACKAGES" ]; then - ./scripts/package_uploader.sh $MODIFIED_PACKAGES - else - exit 0 - fi - retry: - max: 2 - when: - - runner_system_failure - - unknown_failure - -## Remove old versions from the APT repository. -repository-cleanup: - stage: deploy - only: - - schedules - script: - - | - if [ -n "$SCHEDULED_REPOSITORY_CLEANUP" ]; then - ./scripts/package_uploader.sh --cleanup $(cd ./packages; echo *) - fi - retry: - max: 2 - when: - - runner_system_failure - - unknown_failure diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 2b7e88088..000000000 --- a/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -language: generic - -## Force usage of "Ubuntu Xenial" as on older versions -## program "realpath" is not working for some reason. -os: linux -dist: xenial -services: docker -sudo: required - -## Split per-architecture builds into separate jobs. -env: - matrix: - - TERMUX_ARCH=aarch64 - - TERMUX_ARCH=arm - - TERMUX_ARCH=i686 - - TERMUX_ARCH=x86_64 - -## Build modified packages. -## Variables BINTRAY_* should be unset to -## prevent leaking of sensitive information. -script: - - unset BINTRAY_USERNAME - - unset BINTRAY_API_KEY - - unset BINTRAY_GPG_SUBJECT - - unset BINTRAY_GPG_PASSPHRASE - - | - for package in $(./scripts/build/ci/determine_git_changes.sh); do - ./scripts/run-docker.sh ./build-package.sh -q -a "$TERMUX_ARCH" "$package" || exit 1 - done diff --git a/scripts/build/ci/determine_git_changes.sh b/scripts/build/ci/determine_git_changes.sh index 6e9ab7f7e..5cfa32880 100755 --- a/scripts/build/ci/determine_git_changes.sh +++ b/scripts/build/ci/determine_git_changes.sh @@ -1,7 +1,7 @@ #!/bin/bash ## ## Script for detecting modified packages. -## Designed for use with Travis or Gitlab CI. +## Designed for use with Cirrus, Gitlab or Travis CI. ## ## Leonid Plyushch (C) 2019 ## @@ -42,6 +42,18 @@ elif [ -n "$CI_COMMIT_SHA" ]; then else UPDATED_FILES=$(git diff-tree --no-commit-id --name-only -r "${CI_COMMIT_BEFORE_SHA}..${CI_COMMIT_SHA}" 2>/dev/null | grep -P "packages/") fi +elif [ -n "$CIRRUS_CI" ]; then + # We are on Cirrus CI. + if [ -z "$CIRRUS_PR" ]; then + if [ -z "$CIRRUS_LAST_GREEN_CHANGE" ]; then + UPDATED_FILES=$(git diff-tree --no-commit-id --name-only -r "$CIRRUS_CHANGE_IN_REPO" 2>/dev/null | grep -P "packages/") + else + UPDATED_FILES=$(git diff-tree --no-commit-id --name-only -r "${CIRRUS_LAST_GREEN_CHANGE}..${CIRRUS_CHANGE_IN_REPO}" 2>/dev/null | grep -P "packages/") + fi + else + # Pull requests are handled in a bit different way. + UPDATED_FILES=$(git diff-tree --no-commit-id --name-only -r "${CIRRUS_BASE_SHA}..${CIRRUS_CHANGE_IN_REPO}" 2>/dev/null | grep -P "packages/") + fi else # Something wrong. echo "[!] Cannot determine git commit range." >&2 diff --git a/scripts/package_uploader.sh b/scripts/package_uploader.sh index 15b580538..9c632b680 100755 --- a/scripts/package_uploader.sh +++ b/scripts/package_uploader.sh @@ -619,7 +619,7 @@ show_usage() { msg msg "==========================================================" msg - msg "Primarily indended to be used by Gitlab CI for automatic" + msg "Primarily indended to be used by CI systems for automatic" msg "package uploads but it can be used for manual uploads too." msg msg "Before using this script, check that you have all"