Skip to content

📦 Pack and publish 5a3a72c65ceb33284d40523b191f49522eb41085 #5011

📦 Pack and publish 5a3a72c65ceb33284d40523b191f49522eb41085

📦 Pack and publish 5a3a72c65ceb33284d40523b191f49522eb41085 #5011

Workflow file for this run

name: 📦 Pack and publish
run-name: 📦 Pack and publish ${{ github.sha }}
#on: workflow_call
on:
workflow_run:
workflows: [ 🔬 Test ]
types: [ completed ]
branches: [ master ]
pull_request:
branches: [ master ]
types: [opened, synchronize, reopened, labeled, unlabeled]
paths-ignore:
- 'manual/**'
- 'cmake/GetGALERA.cmake'
- 'galera_packaging/**'
push:
branches:
- manticore-*
paths-ignore:
- 'manual/**'
- 'cmake/GetGALERA.cmake'
- 'galera_packaging/**'
tags:
- 'release*'
- 'pack_publish'
# cancels the previous workflow run when a new one appears in the same branch (e.g. master or a PR's branch)
concurrency:
group: pack_${{ github.ref }}
cancel-in-progress: true
jobs:
check_branch:
name: Check branch existence
runs-on: ubuntu-22.04
outputs:
columnar_locator: ${{ steps.set_locator.outputs.columnar_locator }}
steps:
- name: Check if branch exists in manticoresoftware/manticoresearch
id: check_branch
if: github.ref_name != 'master'
run: |
# Extract the actual branch name for pull requests
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
BRANCH_NAME="${{ github.event.pull_request.head.ref }}"
else
BRANCH_NAME="${{ github.ref_name }}"
fi
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://api.github.com/repos/manticoresoftware/columnar/branches/$BRANCH_NAME)
if [ "$HTTP_STATUS" -eq "200" ]; then
echo "branch_exists=true" >> $GITHUB_OUTPUT
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
else
echo "branch_exists=false" >> $GITHUB_OUTPUT
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
fi
- name: Set Columnar Locator
id: set_locator
run: |
if [[ "${{ github.ref_name }}" != "master" && "${{ steps.check_branch.outputs.branch_exists }}" == "true" ]]; then
echo "columnar_locator=GIT_REPOSITORY https://github.com/manticoresoftware/columnar.git GIT_TAG ${{ steps.check_branch.outputs.branch_name }}" >> $GITHUB_OUTPUT
else
echo "columnar_locator=" >> $GITHUB_OUTPUT
fi
pack:
name: OK to pack?
runs-on: ubuntu-22.04
outputs:
version: ${{ steps.semver-tagger.outputs.version }}
version_full: ${{ steps.semver-tagger.outputs.version_full }}
version_rpm: ${{ steps.semver-tagger.outputs.version_rpm }}
version_deb: ${{ steps.semver-tagger.outputs.version_deb }}
target: ${{ steps.semver-tagger.outputs.target }}
should_continue: ${{ steps.check-should-continue.outputs.should_continue }}
if: |
(
github.event_name == 'pull_request'
&&
(
contains(
github.event.pull_request.labels.*.name, 'pack'
)
||
contains(
github.event.pull_request.labels.*.name, 'publish'
)
)
)
||
(
github.event_name == 'workflow_run'
&&
github.event.workflow_run.conclusion == 'success'
&&
github.ref == 'refs/heads/master'
)
||
(
github.event_name == 'push'
&&
(
startsWith(
github.ref, 'refs/heads/manticore-'
)
||
contains(
github.ref, 'refs/tags/pack_publish'
)
)
)
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Update version
id: semver-tagger
uses: manticoresoftware/semver-tagger-action@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
conventional_commits_authors: [email protected]
ignore_patterns: '\.md$|^test/|^manual/|\.clt|\.github|\.patterns|\.yml|\.gitignore'
- name: Check if we should continue packing
id: check-should-continue
run: |
# Continue if version was updated, if we have the "pack" label on PR, or if target is "release"
if [[ "${{ steps.semver-tagger.outputs.version_updated }}" == "true" ]]; then
echo "Continuing because version was updated"
echo "should_continue=true" >> $GITHUB_OUTPUT
elif [[ "${{ steps.semver-tagger.outputs.target }}" == "release" ]]; then
echo "Continuing because target is release"
echo "should_continue=true" >> $GITHUB_OUTPUT
elif [[ "${{ github.event_name }}" == "pull_request" && "${{ contains(github.event.pull_request.labels.*.name, 'pack') }}" == "true" ]]; then
echo "Continuing because PR has 'pack' label"
echo "should_continue=true" >> $GITHUB_OUTPUT
elif [[ "${{ contains(github.ref, 'refs/tags/pack_publish') }}" == "true" ]]; then
echo "Continuing because commit has 'pack_publish' tag"
echo "should_continue=true" >> $GITHUB_OUTPUT
else
echo "Skipping packing because version wasn't updated, target is not release, and there's no 'pack' label or tag"
echo "should_continue=false" >> $GITHUB_OUTPUT
fi
- run: |
echo "# Packing and publishing all for commit ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "* Commit URL: [${{ github.sha }}](/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY
echo "* Initiated by: [@${{ github.actor }}](https://github.com/${{ github.actor }})" >> $GITHUB_STEP_SUMMARY
echo "* Ref: ${{ github.ref_type }} \"${{ github.ref_name }}\"" >> $GITHUB_STEP_SUMMARY
echo "* Attempt: ${{ github.run_attempt }}" >> $GITHUB_STEP_SUMMARY
echo "* Version updated: ${{ steps.semver-tagger.outputs.version_updated }}" >> $GITHUB_STEP_SUMMARY
echo "* Should continue packing: ${{ steps.check-should-continue.outputs.should_continue }}" >> $GITHUB_STEP_SUMMARY
# debug_info:
# name: Debug GitHub Event Info
# runs-on: ubuntu-22.04
# steps:
# - name: Print GitHub Event Info
# run: |
# echo "GitHub Event Name: ${{ github.event_name }}"
# echo "GitHub Ref: ${{ github.ref }}"
# echo "GitHub Ref Type: ${{ github.ref_type }}"
# echo "GitHub Ref Name: ${{ github.ref_name }}"
# echo "GitHub Actor: ${{ github.actor }}"
# echo "GitHub Repository: ${{ github.repository }}"
# echo "GitHub SHA: ${{ github.sha }}"
# echo "GitHub Run Number: ${{ github.run_number }}"
# echo "GitHub Run Attempt: ${{ github.run_attempt }}"
# echo "GitHub Workflow: ${{ github.workflow }}"
# echo "GitHub Event JSON:"
# echo '${{ toJSON(github.event) }}'
# Job to check dependencies using check_deps_in_repos.sh
# Runs on every PR, workflow_run, or push event matching the conditions
check_deps:
needs: pack
if: needs.pack.outputs.should_continue == 'true'
name: Check deps test
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Run dependency check script
run: |
bash dist/check_deps_in_repos.sh --target ${{ needs.pack.outputs.target }}
pack_debian_ubuntu:
name: Debian/Ubuntu packages
uses: ./.github/workflows/build_template.yml
needs: [pack, check_branch, check_deps]
if: needs.pack.outputs.should_continue == 'true'
strategy:
fail-fast: false
matrix:
DISTR: [bionic, focal, jammy, buster, bullseye, bookworm]
arch: [x86_64, aarch64]
with:
COLUMNAR_LOCATOR: ${{ needs.check_branch.outputs.columnar_locator }}
DISTR: ${{ matrix.DISTR }}
arch: ${{ matrix.arch }}
cmake_command: |
mkdir build
cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/dist/build_dockers/cross/linux.cmake
cmake --build . --target package
cache_key: pack_${{ matrix.DISTR }}_${{ matrix.arch }}
artifact_list: "build/manticore*deb"
version: ${{ needs.pack.outputs.version }}
build_tag: ${{ needs.pack.outputs.target == 'dev' && 'dev' || '' }}
pack_rhel:
name: RHEL packages
uses: ./.github/workflows/build_template.yml
needs: [pack, check_branch, check_deps]
if: needs.pack.outputs.should_continue == 'true'
strategy:
fail-fast: false
matrix:
DISTR: [rhel7, rhel8, rhel9]
arch: [x86_64, aarch64]
with:
COLUMNAR_LOCATOR: ${{ needs.check_branch.outputs.columnar_locator }}
DISTR: ${{ matrix.DISTR }}
arch: ${{ matrix.arch }}
boost_url_key: boost_rhel_feb17
cmake_command: |
ln -s $(pwd) /builds_manticoresearch_dev_usr_src_debug_manticore_component_src_0
cd /builds_manticoresearch_dev_usr_src_debug_manticore_component_src_0
mkdir build
cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/dist/build_dockers/cross/linux.cmake
cmake --build . --target package
cache_key: pack_${{ matrix.DISTR }}_${{ matrix.arch }}
artifact_list: "build/manticore*rpm"
version: ${{ needs.pack.outputs.version }}
build_tag: ${{ needs.pack.outputs.target == 'dev' && 'dev' || '' }}
pack_macos:
name: MacOS packages
uses: ./.github/workflows/build_template.yml
needs: [pack, check_branch, check_deps]
if: needs.pack.outputs.should_continue == 'true'
strategy:
fail-fast: false
matrix:
DISTR: [macos]
arch: [x86_64, arm64]
with:
COLUMNAR_LOCATOR: ${{ needs.check_branch.outputs.columnar_locator }}
DISTR: ${{ matrix.DISTR }}
arch: ${{ matrix.arch }}
HOMEBREW_PREFIX: /opt/homebrew
cmake_command: |
mkdir build
cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/dist/build_dockers/cross/osx.cmake
cmake --build . --target package
cache_key: pack_${{ matrix.DISTR }}_${{ matrix.arch }}
artifact_list: "build/manticore*tar.gz"
version: ${{ needs.pack.outputs.version }}
build_tag: ${{ needs.pack.outputs.target == 'dev' && 'dev' || '' }}
pack_windows:
name: Windows x64 package
uses: ./.github/workflows/build_template.yml
needs: [pack, check_branch, check_deps]
if: needs.pack.outputs.should_continue == 'true'
with:
COLUMNAR_LOCATOR: ${{ needs.check_branch.outputs.columnar_locator }}
DISTR: windows
arch: x64
sysroot_url_key: roots_mysql83_jan17
boost_url_key: boost_80
cmake_command: |
mkdir build
cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/dist/build_dockers/cross/windows.cmake
cmake --build . --target package
cache_key: pack_windows_x64
artifact_list: "build/manticore*exe build/manticore*zip"
version: ${{ needs.pack.outputs.version }}
build_tag: ${{ needs.pack.outputs.target == 'dev' && 'dev' || '' }}
build_nsis:
name: Making Windows NSIS installer
needs: [pack_windows, pack]
if: needs.pack.outputs.should_continue == 'true'
runs-on: ubuntu-22.04
container:
image: manticoresearch/build_nsis:1.0.0
env:
CI_COMMIT_SHA: ${{ github.sha }}
steps:
- name: Checkout repository # We have to checkout to access .github/workflows/ in further steps
uses: actions/checkout@v3
- name: Patch version
run: |
sed -i "s/0\.0\.0/${{ needs.pack.outputs.version }}/g" src/sphinxversion.h.in
- name: Initialization
# without adding the safe.directory the script fails to do git show ...
run: git config --global --add safe.directory /__w/manticoresearch/manticoresearch
- name: Make installer
# TODO: remove the hardcoded paths /builds/ below
run: |
mkdir -p /builds/manticoresearch/dev/build/
/bin/bash dist/build_dockers/nsis/nsis_src_parser.sh ${{ needs.pack.outputs.target }}
shell: bash
- run: mv /builds/manticoresearch/dev/build build
- name: Upload artifact
uses: manticoresoftware/upload_artifact_with_retries@main
with:
name: win_installer
path: build/manticore-*.exe
# virtual job to simplify the CI
# This job depends on all the package preparation jobs that have to pass before we can start publishing packages
publish:
name: OK to publish?
runs-on: ubuntu-22.04
needs: [pack_debian_ubuntu, pack_rhel, pack_macos, build_nsis]
if: |
(github.repository == 'manticoresoftware/manticoresearch')
&& (
(github.event_name == 'pull_request' && (contains(github.event.pull_request.labels.*.name, 'publish')))
|| (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
|| (github.event_name == 'push' && startsWith(github.ref, 'refs/heads/manticore-'))
|| (github.event_name == 'push' && contains(github.ref, 'refs/tags/pack_publish'))
)
steps:
- run: echo "Ready to publish"
publish_debian_ubuntu:
needs: [publish, pack]
strategy:
fail-fast: true
matrix:
DISTR: [bionic, focal, jammy, buster, bullseye, bookworm]
arch: [x86_64, aarch64]
runs-on: ubuntu-22.04
name: ${{ matrix.DISTR }} ${{ matrix.arch }} publishing
steps:
- uses: manticoresoftware/publish_to_repo@main
with:
ssh_key: ${{ secrets.REPO_SSH_KEY }}
distr: ${{ matrix.DISTR }}
arch: ${{ matrix.arch }}
artifact: build_${{ matrix.DISTR }}_RelWithDebInfo_${{ matrix.arch }}
type: deb
delimiter: "-"
target: ${{ needs.pack.outputs.target }}
publish_rhel:
needs: [publish, pack]
strategy:
fail-fast: true
matrix:
DISTR: [7, 8, 9]
arch: [x86_64, aarch64]
runs-on: ubuntu-22.04
name: RHEL ${{ matrix.DISTR }} ${{ matrix.arch }} publishing
steps:
- uses: manticoresoftware/publish_to_repo@main
with:
ssh_key: ${{ secrets.REPO_SSH_KEY }}
distr: ${{ matrix.DISTR }}
arch: ${{ matrix.arch }}
artifact: build_rhel${{ matrix.DISTR }}_RelWithDebInfo_${{ matrix.arch }}
type: rpm
delimiter: "_"
target: ${{ needs.pack.outputs.target }}
publish_macos:
name: Publishing MacOS
needs: [publish, pack]
strategy:
fail-fast: true
matrix:
arch: [x86_64, arm64]
runs-on: ubuntu-22.04
steps:
- uses: manticoresoftware/publish_to_repo@main
with:
ssh_key: ${{ secrets.REPO_SSH_KEY }}
distr: macos
arch: ${{ matrix.arch }}
artifact: build_macos_RelWithDebInfo_${{ matrix.arch }}
type: arc
delimiter: "-"
target: ${{ needs.pack.outputs.target }}
publish_windows:
name: Publishing Windows packages to repo.manticoresearch.com
needs: [publish, pack]
runs-on: ubuntu-22.04
steps:
- uses: manticoresoftware/publish_to_repo@main
with:
ssh_key: ${{ secrets.REPO_SSH_KEY }}
distr: windows
arch: x64
artifact: build_windows_RelWithDebInfo_x64
type: arc
delimiter: "-"
target: ${{ needs.pack.outputs.target }}
publish_nsis:
name: Publishing Windows NSIS installer
needs: [publish_windows, publish, pack]
runs-on: ubuntu-22.04
steps:
- uses: manticoresoftware/publish_to_repo@main
with:
ssh_key: ${{ secrets.REPO_SSH_KEY }}
distr:
arch:
artifact: win_installer
type: arc
delimiter: "-"
target: ${{ needs.pack.outputs.target }}
build_docker:
name: Building and pushing docker
needs: [publish_debian_ubuntu, pack]
runs-on: ubuntu-22.04
env:
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
GHCR_USER: ${{ secrets.GHCR_USER }}
GHCR_PASSWORD: ${{ secrets.GHCR_PASSWORD }}
steps:
- name: Checkout repository # We have to checkout to access .github/workflows/ in further steps
uses: actions/checkout@v3
- name: Patch version
run: |
sed -i "s/0\.0\.0/${{ needs.pack.outputs.version }}/g" src/sphinxversion.h.in
- name: Calculate short commit hash
id: sha
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:qemu-v7.0.0-28
- name: Building docker
run: CI_COMMIT_SHORT_SHA=${{ steps.sha.outputs.sha_short }} /bin/bash dist/dockerhub_deploy.sh
clt_rhel_dev_installation:
name: Testing RHEL dev packages installation
needs: publish_rhel
strategy:
fail-fast: false
matrix:
image: [ "almalinux:8", "almalinux:9", "oraclelinux:9", "amazonlinux:latest" ]
runs-on: ubuntu-22.04
steps:
- uses: manticoresoftware/[email protected]
with:
image: ${{ matrix.image }}
test_prefix: test/clt-tests/installation/rhel-dev-
run_args: -e TELEMETRY=0
clt_deb_dev_installation:
name: Testing DEB dev packages installation
needs: publish_debian_ubuntu
strategy:
fail-fast: false
matrix:
image: [ "ubuntu:bionic", "ubuntu:focal", "ubuntu:jammy", "debian:buster", "debian:bullseye", "debian:bookworm" ]
runs-on: ubuntu-22.04
steps:
- uses: manticoresoftware/[email protected]
with:
image: ${{ matrix.image }}
test_prefix: test/clt-tests/installation/deb-dev-
run_args: -e TELEMETRY=0