From e563a193f5c29ffb569c711ad45e7063cb7f82d0 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 16 May 2021 21:53:55 +0200 Subject: [PATCH] Setup PHP release workflow in drone with lftp --- .drone.yml | 197 ++++++++++++++++++ mods/release-list-exclude.txt | 2 + ...ease-list.txt => release-list-include.txt} | 1 + 3 files changed, 200 insertions(+) create mode 100644 mods/release-list-exclude.txt rename mods/{release-list.txt => release-list-include.txt} (93%) diff --git a/.drone.yml b/.drone.yml index b45409a846..18b84b76e1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -325,3 +325,200 @@ volumes: - name: cache host: path: /tmp/drone-cache +--- +kind: pipeline +type: docker +name: continous-deployment + +trigger: + repo: + - friendica/friendica + branch: + - develop + - 20*-rc + event: + - push + +node: + node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca + +steps: + - name: Clone addon + image: alpine/git + commands: + - git clone https://github.com/friendica/friendica-addons ./addon + - cd ./addon + - git checkout $DRONE_REPO_BRANCH + - name: Restore cache + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}' + archive_format: "gzip" + mount: + - '.composer' + volumes: + - name: cache + path: + /tmp/cache + - name: Composer install + image: friendicaci/php7.4:php7.4.18 + commands: + - export COMPOSER_HOME=.composer + - composer validate + - composer install --no-dev --optimize-autoloader + - name: Create artifacts + image: debian + commands: + - apt-get update + - apt-get install bzip2 + - mkdir ./build + - export VERSION="$(cat VERSION)" + - # Create artifact + - export RELEASE="friendica-full-$VERSION" + - export ARTIFACT="$RELEASE.tar.gz" + - tar + --transform "s,^,$RELEASE/," + -X mods/release-list-exclude.txt + -T mods/release-list-include.txt + -cvjf ./build/$ARTIFACT + - # calculate SHA256 checksum + - cd ./build + - sha256sum "$ARTIFACT" > "$ARTIFACT.sha256" + - ls -lh + - # output the sha256 sum for checking + - cat "$ARTIFACT.sha256" + - sha256sum "$ARTIFACT" + - name: Upload artifacts + image: alpine + environment: + LFTP_HOST: + from_secret: sftp_host + LFTP_USER: + from_secret: sftp_user + LFTP_KEY: + from_secret: ssh_key + LFTP_PORT: "22" + LFTP_SOURCE: "build" + LFTP_TARGET: "/http" + commands: + - apk add lftp openssh openssl + - touch drone.key + - chmod 400 drone.key + - echo "$LFTP_KEY" | openssl base64 -A -d > drone.key + - lftp -c " + set net:timeout 5; + set net:max-retries 2; + set net:reconnect-interval-base 5; + set sftp:auto-confirm true; + set sftp:connect-program 'ssh -q -a -x -i drone.key'; + connect sftp://$LFTP_USER:@$LFTP_HOST:$LFTP_PORT; + cd $LFTP_TARGET; + mput $LFTP_SOURCE/*; + " + - rm drone.key + +volumes: + - name: cache + host: + path: /tmp/drone-cache +--- +kind: pipeline +type: docker +name: release-deployment + +trigger: + repo: + - friendica/friendica + branch: + - stable + event: + - tag + +node: + node: releaser # This prevents executing this pipeline at other servers than drone.friendi.ca + +steps: + - name: Clone addon + image: alpine/git + commands: + - git clone https://github.com/friendica/friendica-addons ./addon + - cd ./addon + - git checkout $DRONE_REPO_BRANCH + - name: Restore cache + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: '{{ .Repo.Name }}_php74_{{ arch }}_{{ os }}' + archive_format: "gzip" + mount: + - '.composer' + volumes: + - name: cache + path: + /tmp/cache + - name: Composer install + image: friendicaci/php7.4:php7.4.18 + commands: + - export COMPOSER_HOME=.composer + - composer validate + - composer install --no-dev --optimize-autoloader + - name: Create artifacts + image: debian + commands: + - apt-get update + - apt-get install bzip2 + - mkdir ./build + - export VERSION="$(cat VERSION)" + - mkdir ./build + - export VERSION="$(cat VERSION)" + - # Create artifact + - export RELEASE="friendica-full-$VERSION" + - export ARTIFACT="$RELEASE.tar.gz" + - tar + --transform "s,^,$RELEASE/," + -X mods/release-list-exclude.txt + -T mods/release-list-include.txt + -cvjf ./build/$ARTIFACT + - # calculate SHA256 checksum + - cd ./build + - sha256sum "$ARTIFACT" > "$ARTIFACT.sha256" + - ls -lh + - # output the sha256 sum for checking + - cat "$ARTIFACT.sha256" + - sha256sum "$ARTIFACT" + - name: Upload artifacts + image: alpine + environment: + LFTP_HOST: + from_secret: sftp_host + LFTP_USER: + from_secret: sftp_user + LFTP_KEY: + from_secret: ssh_key + LFTP_PORT: "22" + LFTP_SOURCE: "build" + LFTP_TARGET: "/http" + commands: + - apk add lftp openssh openssl + - touch drone.key + - chmod 400 drone.key + - echo "$LFTP_KEY" | openssl base64 -A -d > drone.key + - lftp -c " + set net:timeout 5; + set net:max-retries 2; + set net:reconnect-interval-base 5; + set sftp:auto-confirm true; + set sftp:connect-program 'ssh -q -a -x -i drone.key'; + connect sftp://$LFTP_USER:@$LFTP_HOST:$LFTP_PORT; + cd $LFTP_TARGET; + mput $LFTP_SOURCE/*; + " + - rm drone.key + +volumes: + - name: cache + host: + path: /tmp/drone-cache diff --git a/mods/release-list-exclude.txt b/mods/release-list-exclude.txt new file mode 100644 index 0000000000..e370e73afc --- /dev/null +++ b/mods/release-list-exclude.txt @@ -0,0 +1,2 @@ +view/lang/*/messages.po +view/smarty3/compiled/* \ No newline at end of file diff --git a/mods/release-list.txt b/mods/release-list-include.txt similarity index 93% rename from mods/release-list.txt rename to mods/release-list-include.txt index dfebc02169..95faa36ed8 100644 --- a/mods/release-list.txt +++ b/mods/release-list-include.txt @@ -1,3 +1,4 @@ +bin/.htaccess bin/auth_ejabberd.php bin/console bin/console.bat