Commit Diff


commit - 88333d13eb9930904268b314d195b0e811ef5464
commit + 292164eddb666591c7b5a4fd62f7f58277ec0674
blob - /dev/null
blob + 14d8545c6665632d722805a0ea7bf3bf3626102c (mode 644)
--- /dev/null
+++ .github/workflows/packaging.yml
@@ -0,0 +1,74 @@
+name: packaging
+
+on:
+  push:
+    branches:
+      - 'master'
+      - 'release/**'
+    tags:
+      - '**'
+  pull_request:
+    types: [ opened, reopened, synchronize, labeled ]
+  workflow_dispatch:
+
+concurrency:
+  # Update of a developer branch cancels the previously scheduled workflow
+  # run for this branch. However, the 'master' branch, release branch, and
+  # tag workflow runs are never canceled.
+  #
+  # We use a trick here: define the concurrency group as 'workflow run ID' +
+  # 'workflow run attempt' because it is a unique combination for any run.
+  # So it effectively discards grouping.
+  #
+  # Important: we cannot use `github.sha` as a unique identifier because
+  # pushing a tag may cancel a run that works on a branch push event.
+  group: ${{ (
+    github.ref == 'refs/heads/master' ||
+    startsWith(github.ref, 'refs/heads/release/') ||
+    startsWith(github.ref, 'refs/tags/')) &&
+    format('{0}-{1}', github.run_id, github.run_attempt) ||
+    format('{0}-{1}', github.workflow, github.ref) }}
+  cancel-in-progress: true
+
+jobs:
+  packaging-x86_64:
+    # Run on push to the 'master' and release branches of tarantool/tarantool
+    # or on pull request if the 'full-ci' or 'static-build-ci' label is set.
+    if: github.repository == 'tarantool/tarantool' &&
+        ( github.event_name != 'pull_request' ||
+          contains(github.event.pull_request.labels.*.name, 'full-ci') ||
+          contains(github.event.pull_request.labels.*.name, 'static-build-ci') )
+
+    uses: ./.github/workflows/static_build_pack_test_deploy.yml
+    with:
+      arch: x86_64
+      test-matrix: '{
+        "include": [
+          {"os": "debian-buster"}, {"os": "debian-bullseye"},
+          {"os": "centos-7"}, {"os": "centos-8"},
+          {"os": "fedora-35"}, {"os": "fedora-36"},
+          {"os": "ubuntu-focal"}, {"os": "ubuntu-jammy"}
+        ]
+      }'
+    secrets: inherit
+
+  packaging-aarch64:
+    # Run on push to the 'master' and release branches of tarantool/tarantool
+    # or on pull request if the 'full-ci' or 'static-build-ci' label is set.
+    if: github.repository == 'tarantool/tarantool' &&
+        ( github.event_name != 'pull_request' ||
+          contains(github.event.pull_request.labels.*.name, 'full-ci') ||
+          contains(github.event.pull_request.labels.*.name, 'static-build-ci') )
+
+    uses: ./.github/workflows/static_build_pack_test_deploy.yml
+    with:
+      arch: aarch64
+      test-matrix: '{
+        "include": [
+          {"os": "debian-buster"}, {"os": "debian-bullseye"},
+          {"os": "centos-7"}, {"os": "centos-8"},
+          {"os": "fedora-35"}, {"os": "fedora-36"},
+          {"os": "ubuntu-focal"}, {"os": "ubuntu-jammy"}
+        ]
+      }'
+    secrets: inherit
blob - fc541665be525afddcb28703159108eb461a7690 (mode 644)
blob + /dev/null
--- .github/workflows/static_build_packaging.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-name: static_build_packaging
-
-on:
-  push:
-    branches:
-      - 'master'
-      - 'release/**'
-    tags:
-      - '**'
-  pull_request:
-    types: [ opened, reopened, synchronize, labeled ]
-  workflow_dispatch:
-
-concurrency:
-  # Update of a developer branch cancels the previously scheduled workflow
-  # run for this branch. However, the 'master' branch, release branch, and
-  # tag workflow runs are never canceled.
-  #
-  # We use a trick here: define the concurrency group as 'workflow run ID' +
-  # 'workflow run attempt' because it is a unique combination for any run.
-  # So it effectively discards grouping.
-  #
-  # Important: we cannot use `github.sha` as a unique identifier because
-  # pushing a tag may cancel a run that works on a branch push event.
-  group: ${{ (
-    github.ref == 'refs/heads/master' ||
-    startsWith(github.ref, 'refs/heads/release/') ||
-    startsWith(github.ref, 'refs/tags/')) &&
-    format('{0}-{1}', github.run_id, github.run_attempt) ||
-    format('{0}-{1}', github.workflow, github.ref) }}
-  cancel-in-progress: true
-
-jobs:
-  static_build_packaging:
-    name: 'static_build_packaging (${{ matrix.arch }})'
-
-    # Run on push to the 'master' and release branches of tarantool/tarantool
-    # or on pull request if the 'full-ci' or 'static-build-ci' label is set.
-    if: github.repository == 'tarantool/tarantool' &&
-        ( github.event_name != 'pull_request' ||
-          contains(github.event.pull_request.labels.*.name, 'full-ci') ||
-          contains(github.event.pull_request.labels.*.name, 'static-build-ci') )
-
-    runs-on: ${{ matrix.runner }}
-
-    strategy:
-      fail-fast: false
-      matrix:
-        include:
-          - runner: ubuntu-20.04-self-hosted
-            arch: x86_64
-          - runner: graviton
-            arch: aarch64
-
-    steps:
-      - name: Prepare checkout
-        uses: tarantool/actions/prepare-checkout@master
-      - uses: actions/checkout@v3
-        with:
-          fetch-depth: 0
-          submodules: recursive
-      - uses: ./.github/actions/environment
-      - name: Install deps
-        uses: ./.github/actions/install-deps-debian
-      - name: Build static packages
-        uses: ./.github/actions/pack-and-deploy
-        env:
-          RWS_AUTH: ${{ secrets.RWS_AUTH }}
-      - name: Upload build artifacts
-        if: github.ref == 'refs/heads/master' ||
-            startsWith(github.ref, 'refs/heads/release/') ||
-            startsWith(github.ref, 'refs/tags/')
-        uses: actions/upload-artifact@v3
-        with:
-          name: tarantool-deb-rpm-x86_64-aarch64
-          retention-days: 21
-          path: |
-            build/tarantool*.deb
-            build/tarantool*.rpm
-          if-no-files-found: error
-      - name: Send VK Teams message on failure
-        if: failure()
-        uses: ./.github/actions/report-job-status
-        with:
-          bot-token: ${{ secrets.VKTEAMS_BOT_TOKEN }}
blob - /dev/null
blob + 00b8884d83b91ce2f5cbcf93abc043f25c5dd5e6 (mode 644)
--- /dev/null
+++ .github/workflows/static_build_pack_test_deploy.yml
@@ -0,0 +1,211 @@
+name: static_build_pack_test_deploy
+
+on:
+  workflow_call:
+    inputs:
+      arch:
+        description: Package platform
+        default: x86_64
+        required: false
+        type: string
+      test-matrix:
+        description: JSON matrix for packages testing
+        default: '{"include": [{"os": "ubuntu-focal"}, {"os": "ubuntu-jammy"}]}'
+        required: false
+        type: string
+
+jobs:
+  build:
+    runs-on: [ self-hosted, Linux, '${{ inputs.arch }}', regular ]
+
+    steps:
+      - name: Prepare checkout
+        uses: tarantool/actions/prepare-checkout@master
+
+      - uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+          submodules: recursive
+
+      - uses: ./.github/actions/environment
+
+      - name: Make static build packages
+        run: make -f .pack.mk package-static
+
+      - name: Pack libraries for testing
+        run: >
+          find test/ -name '*.so' | tar -cvzf
+          ${{ github.workspace }}/build/test-libs-${{ inputs.arch }}.tgz -T -
+        working-directory: static-build/tarantool-prefix/src/tarantool-build/
+
+      - name: Upload deb packages
+        uses: actions/upload-artifact@v3
+        with:
+          name: tarantool-deb-${{ inputs.arch }}
+          retention-days: 21
+          path: build/tarantool*.deb
+          if-no-files-found: error
+
+      - name: Upload rpm packages
+        uses: actions/upload-artifact@v3
+        with:
+          name: tarantool-rpm-${{ inputs.arch }}
+          retention-days: 21
+          path: build/tarantool*.rpm
+          if-no-files-found: error
+
+      - name: Upload test libraries
+        uses: actions/upload-artifact@v3
+        with:
+          name: tarantool-test-libs-${{ inputs.arch }}
+          retention-days: 21
+          path: build/test-libs*.tgz
+          if-no-files-found: error
+
+      - name: Send VK Teams message on failure
+        if: failure()
+        uses: ./.github/actions/report-job-status
+        with:
+          bot-token: ${{ secrets.VKTEAMS_BOT_TOKEN }}
+
+  test:
+    runs-on: [ self-hosted, Linux, '${{ inputs.arch }}', regular ]
+
+    needs: build
+
+    strategy:
+      fail-fast: false
+      matrix: ${{ fromJSON(inputs.test-matrix) }}
+
+    container:
+      image: packpack/packpack:${{ matrix.os }}
+      # Mount /dev to the container to be able to mount a disk image inside it
+      # for successful run of the .github/actions/environment action.
+      volumes:
+        - /dev:/dev
+      # Our testing expects that the init process (PID 1) will
+      # reap orphan processes. At least the following test leans
+      # on it: app-tap/gh-4983-tnt-e-assert-false-hangs.test.lua.
+      # Add extra privileges to the container for successful run
+      # of the .github/actions/environment action.
+      options: '--init --privileged'
+
+    steps:
+      - name: Prepare checkout
+        uses: tarantool/actions/prepare-checkout@master
+
+      - uses: actions/checkout@v3
+        with:
+          submodules: recursive
+
+      - name: Set package manager
+        run: |
+          if ${{ startsWith(matrix.os, 'astra') ||
+                 startsWith(matrix.os, 'ubuntu') ||
+                 startsWith(matrix.os, 'debian') }}; then
+            echo "PACKAGE_MANAGER=apt" >> $GITHUB_ENV
+          elif ${{ startsWith(matrix.os, 'centos') ||
+                 startsWith(matrix.os, 'el') ||
+                 startsWith(matrix.os, 'fedora') ||
+                 startsWith(matrix.os, 'redos') }}; then
+            echo "PACKAGE_MANAGER=yum" >> $GITHUB_ENV
+          else
+            echo "Not supported OS provided: ${{ matrix.os }}"
+            exit 1
+          fi
+
+      # Install the 'e2fsprogs' package that contains the 'mkfs' program needed
+      # for the 'environment' action bellow.
+      - name: Install e2fsprogs
+        if: env.PACKAGE_MANAGER != 'apt'
+        run: ${{ env.PACKAGE_MANAGER }} -y install e2fsprogs
+
+      - uses: ./.github/actions/environment
+
+      - name: Download packages
+        uses: actions/download-artifact@v3
+        with:
+          name: tarantool-${{
+            env.PACKAGE_MANAGER == 'apt' && 'deb' || 'rpm' }}-${{ inputs.arch }}
+          path: build
+
+      - name: Download test libraries
+        uses: actions/download-artifact@v3
+        with:
+          name: tarantool-test-libs-${{ inputs.arch }}
+          path: build
+
+      - name: Install packages
+        run: ${{ env.PACKAGE_MANAGER }} -y install ./tarantool*
+        working-directory: build
+
+      - name: Extract test libraries
+        run: tar -xvzf test-libs*.tgz
+        working-directory: build
+
+      - name: Update list of available deb packages
+        if: env.PACKAGE_MANAGER == 'apt'
+        run: apt update
+
+      - name: Install test dependencies
+        run: |
+          ${{ env.PACKAGE_MANAGER }} -y install \
+            python3 \
+            python3-gevent \
+            python3-${{ env.PACKAGE_MANAGER == 'apt' &&  'yaml' || 'pyyaml' }} \
+            tzdata
+
+      - name: Run tests
+        run: |
+          ./test-run.py \
+            --force \
+            --builddir ../build \
+            --executable /usr/bin/tarantool
+        working-directory: test
+
+      - name: Send VK Teams message on failure
+        if: failure()
+        uses: ./.github/actions/report-job-status
+        with:
+          bot-token: ${{ secrets.VKTEAMS_BOT_TOKEN }}
+
+  deploy:
+    if: startsWith(github.ref, 'refs/tags/') &&
+        !endsWith(github.ref, '-entrypoint')
+
+    runs-on: [ self-hosted, Linux, lightweight ]
+
+    needs: test
+
+    steps:
+      - name: Prepare checkout
+        uses: tarantool/actions/prepare-checkout@master
+
+      - uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+      - name: Download deb packages
+        uses: actions/download-artifact@v3
+        with:
+          name: tarantool-deb-${{ inputs.arch }}
+          path: build
+
+      - name: Download rpm packages
+        uses: actions/download-artifact@v3
+        with:
+          name: tarantool-rpm-${{ inputs.arch }}
+          path: build
+
+      - name: Deploy packages
+        run: |
+          case ${{ github.ref }} in
+            refs/tags/*-alpha*|refs/tags/*-beta*|refs/tags/*-rc*)
+              REPO_TYPE=pre-release make -f .pack.mk deploy-static
+              ;;
+            refs/tags/*)
+              REPO_TYPE=release make -f .pack.mk deploy-static
+              ;;
+          esac
+        env:
+          RWS_AUTH: ${{ secrets.RWS_AUTH }}