Просмотр исходного кода

Maintenance: Add automatic publication of source archives.

Martin Gruner 2 лет назад
Родитель
Сommit
1012f47060
2 измененных файлов с 72 добавлено и 18 удалено
  1. 23 1
      .gitlab/ci/pre.yml
  2. 49 17
      script/build/deploy_archives.sh

+ 23 - 1
.gitlab/ci/pre.yml

@@ -18,7 +18,6 @@
     - yarn --cwd ./.eslint-plugin-zammad install
   after_script: []
 
-# Executed on a dedicated runner.
 'push to github':
   stage: pre
   cache: []
@@ -32,3 +31,26 @@
     - git fetch --unshallow
     - script/build/sync_repo.sh git@github.com:zammad/zammad.git
   after_script: []
+
+'publish source archives':
+  stage: pre
+  tags:
+    - push-to-ftp
+  cache: []
+  rules:
+    - if: $CI_MERGE_REQUEST_ID
+      when: never
+    - if: $CI_COMMIT_TAG
+      when: always
+    - if: '$CI_COMMIT_BRANCH == "stable"'
+      when: always
+    - when: never
+  before_script:
+    - test -d $HOME/.ssh || mkdir $HOME/.ssh
+    - ssh-keyscan ftp.zammad.com >> $HOME/.ssh/known_hosts
+    - eval $(ssh-agent -s)
+    - echo "$FTP_ZAMMAD_COM_SSH_PRIVATE_KEY" | ssh-add -
+    - ssh-add -l
+  script:
+    - script/build/deploy_archives.sh
+  after_script: []

+ 49 - 17
script/build/deploy_archives.sh

@@ -1,29 +1,61 @@
 #!/bin/bash
 
-set -ex
-
-if [ "$CI_BUILD_REF_NAME" != "$CI_BUILD_TAG" ]; then
-  echo 'deploy archives only for tag releases'
-  exit 0
+set -e
+
+TEMPDIR=$(mktemp -d)
+trap 'rm -rf $TEMPDIR' EXIT
+
+# Publish only for commits in 'stable' and for release tags (e.g. 5.4.1).
+if [ "$CI_COMMIT_TAG" ]
+then
+  if [[ "$CI_COMMIT_TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
+  then
+    echo "Tag $CI_COMMIT_TAG found, proceeding with the build."
+  else
+    echo "Commit for an unsupported tag name found, aborting."
+    exit 0  # Can happen, don't throw an error.
+  fi
+else
+  if [ "$CI_COMMIT_BRANCH" == 'stable' ]
+  then
+    echo "Commit for the stable branch found, proceeding with the build."
+  else
+    echo "Push for a branch other than stable found, aborting."
+    exit 1  # Should not happen with correct CI config, raise an error.
+  fi
 fi
 
-# cleanup
-cleanup.sh
+script/build/cleanup.sh
 
 ( find . -type d -name ".git" \
   && find . -name ".gitignore" \
   && find . -name ".gitkeep" \
   && find . -name ".gitmodules" ) | xargs rm -rf
 
-# tar.gz
-tar -czf /tmp/zammad-${CI_BUILD_TAG}.tar.gz .
-
-# tar.bz2
-tar -cjf /tmp/zammad-${CI_BUILD_TAG}.tar.bz2 .
+echo "Building archives..."
+tar -czf "${TEMPDIR}/zammad-latest.tar.gz" . > /dev/null
+tar -cjf "${TEMPDIR}/zammad-latest.tar.bz2" . > /dev/null
+zip -r "${TEMPDIR}/zammad-latest.zip" ./* > /dev/null
 
-# zip
-zip -r /tmp/zammad-${CI_BUILD_TAG}.zip ./*
+if [ "$CI_COMMIT_TAG" ]
+then
+  cp "${TEMPDIR}/zammad-latest.tar.gz" "${TEMPDIR}/zammad-${CI_COMMIT_TAG}.tar.gz"
+  cp "${TEMPDIR}/zammad-latest.tar.bz2" "${TEMPDIR}/zammad-${CI_COMMIT_TAG}.tar.bz2"
+  cp "${TEMPDIR}/zammad-latest.zip" "${TEMPDIR}/zammad-${CI_COMMIT_TAG}.zip"
+fi
 
-# publish
-scp /tmp/zammad-${CI_BUILD_TAG}.tar.* $ARCHIVE_SCP_TARGET
-scp /tmp/zammad-${CI_BUILD_TAG}.zip $ARCHIVE_SCP_TARGET
+echo '#'
+echo "# MD5 sums for the release notes"
+echo "#"
+(cd "$TEMPDIR"; md5sum -- *; echo '#'; ls -lah -- *; echo '#')
+
+#
+# Upload to FTP Server
+#
+if [ -z "$FTP_ZAMMAD_COM_SCP_TARGET" ]
+then
+  echo "Error: the required environment variable FTP_ZAMMAD_COM_SCP_TARGET is missing."
+  exit 1
+fi
+echo "Upload files to ${FTP_ZAMMAD_COM_SCP_TARGET}…"
+scp "$TEMPDIR"/* "$FTP_ZAMMAD_COM_SCP_TARGET"