[Backport 3.10]Update parameter/constant op handling for performance … #726
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# (C) Copyright IBM 2023, 2024. | |
# | |
# This code is part of Qiskit. | |
# | |
# This code is licensed under the Apache License, Version 2.0 with LLVM | |
# Exceptions. You may obtain a copy of this license in the LICENSE.txt | |
# file in the root directory of this source tree. | |
# | |
# Any modifications or derivative works of this code must retain this | |
# copyright notice, and modified files need to carry a notice indicating | |
# that they have been altered from the originals. | |
name: Build | |
on: [push, pull_request] | |
jobs: | |
Build: | |
runs-on: ubuntu-latest | |
env: | |
CONAN_USER_HOME: ${{ github.workspace }} | |
steps: | |
- name: free-up-space | |
run: | | |
df -h | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf /opt/ghc | |
sudo rm -rf "/usr/local/share/boost" | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
df -h | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10.9' | |
- name: Install pip packages | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements-dev.txt | |
- name: Export QSSC_VERSION from Git version tag | |
run: | | |
version=`python -c "from setuptools_scm import get_version; print(get_version())"` | |
echo "QSSC_VERSION=$version" >> $GITHUB_ENV | |
- name: Prepare Conan | |
run: | | |
conan profile new default --detect || true | |
conan profile update settings.compiler.libcxx=libstdc++11 default | |
# Add QASM, LLVM, and clang tools recipes to Conan cache. | |
./conan_deps.sh | |
conan lock create conanfile.py -pr:h default -pr:b default --build=outdated | |
- name: Load Conan cache | |
id: cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: .conan | |
key: conan-${{ runner.os }} | |
restore-keys: conan-${{ runner.os }}-${{ hashFiles('conan.lock') }} | |
- name: Create build dir | |
run: mkdir build | |
# Check if all conan packages are within the cache. If not | |
# we will need to build packages (and if on main flush the cache) | |
- name : Check Conan dependencies are cached | |
id: check_conan_cache | |
working-directory: build | |
run: | | |
conan info .. -pr:h default -pr:b default --build=outdated --json build_requires.json | |
build_requires=$(cat build_requires.json) | |
if [[ "$build_requires" == *"[]"* ]]; | |
then | |
all_in_cache=true | |
else | |
all_in_cache=false | |
fi | |
echo "all_in_cache=$all_in_cache" >> $GITHUB_OUTPUT | |
echo "Conan build requires: $build_requires" | |
echo "Conan cache is complete: $all_in_cache" | |
# If we have a cache miss on 'main', clear the cache. | |
# A dependency was updated, so we need to drop the old one | |
# to prevent unbounded cache growth over time. | |
- name : Clear Conan cache | |
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && steps.check_conan_cache.outputs.all_in_cache != 'true' | |
run: | | |
rm -rf ./.conan | |
# Re-add conan deps after flushing the conan cache before building packages. | |
conan profile new default --detect || true | |
conan profile update settings.compiler.libcxx=libstdc++11 default | |
./conan_deps.sh | |
conan lock create conanfile.py -pr:h default -pr:b default --build=outdated | |
- name: Conan install | |
id: conan_install | |
working-directory: build | |
run: | | |
export CONAN_LLVM_GIT_CACHE="${{ runner.temp }}/llvm-project" | |
conan install .. --build=outdated -pr:h default -pr:b default | |
- name: Build | |
id: build | |
working-directory: build | |
run: | | |
conan build .. | |
- name: Test | |
id: test | |
working-directory: build | |
run: conan build .. --test | |
# On 'main' branch, always save the cache if Conan install succeeded. | |
# Note: we only update the cache from 'main' to avoid "cache thrashing", which would result in the 'main' | |
# cache getting LRU-evicted for every PR, since a single run uses most of the 10GB repo limit. | |
- uses: actions/cache/save@v3 | |
if: always() && (github.event_name == 'push' && github.ref == 'refs/heads/main' && steps.conan_install.outcome == 'success' && steps.check_conan_cache.outputs.all_in_cache != 'true') | |
with: | |
path: .conan | |
key: conan-${{ runner.os }}-${{ hashFiles('conan.lock') }} |