diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..21f9703 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,109 @@ +name: Test Build + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + strategy: + fail-fast: false + matrix: + os: + - ubuntu-24.04 + runs-on: ${{ matrix.os }} + steps: + - name: Install cbdinocluster + shell: python + run: | + import os + import platform + import urllib.request + home_bin_path = os.path.expanduser("~/bin") + os.makedirs(home_bin_path, exist_ok=True) + cbdinocluster_filename = "cbdinocluster-windows-amd64.exe" if platform.system() == "Windows" else "cbdinocluster-linux-amd64" + cbdinocluster_url = f"https://github.com/couchbaselabs/cbdinocluster/releases/download/v0.0.46/{cbdinocluster_filename}" + cbdinocluster_path = os.path.join(home_bin_path, 'cbdinocluster') + urllib.request.urlretrieve(cbdinocluster_url, cbdinocluster_path) + if platform.system() != "Windows": + os.chmod(cbdinocluster_path, 0o755) + github_path = os.getenv("GITHUB_PATH") + if github_path: + with open(github_path, "a") as f: + f.write(f"{home_bin_path}\n") + - name: Initialize cbdinocluster + shell: python + run: | + import os + import platform + import subprocess + subprocess.run(['cbdinocluster', '-v', 'init', '--auto', '--disable-aws', '--disable-azure', '--disable-capella', '--disable-k8s']) + - name: Start Couchbase Cluster + shell: python + run: | + import os + import platform + import subprocess + def capture_output(command): + result = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + return result.stdout.strip() + cluster_config = """\ + nodes: + - count: 2 + version: 7.6.1 + services: + - kv + - n1ql + - index + - count: 1 + version: 7.6.1 + services: + - kv + - fts + - cbas + - eventing + docker: + kv-memory: 1600 + """ + with open("cluster.yaml", "w") as f: + f.write(cluster_config) + subprocess.run(['cbdinocluster', '-v', 'allocate', '--def-file', 'cluster.yaml']) + cluster_id = capture_output(['cbdinocluster', '-v', 'allocate', '--def-file', 'cluster.yaml']) + connection_string = capture_output(['cbdinocluster', '-v', 'connstr', cluster_id]) + subprocess.run(['cbdinocluster', '-v', 'buckets', 'add', cluster_id, 'default', '--ram-quota-mb=100', '--flush-enabled=true']) + subprocess.run(['cbdinocluster', '-v', 'buckets', 'load-sample', cluster_id, 'travel-sample']) + github_env = os.getenv("GITHUB_ENV") + if github_env: + with open(github_env, "a") as f: + f.write(f"CLUSTER_ID={cluster_id}\n") + f.write(f"CONNECTION_STRING={connection_string}\n") + - uses: actions/checkout@v2 + with: + submodules: recursive + - name: Build + timeout-minutes: 60 + shell: python + run: | + import os + import subprocess + os.mkdir('build') + print("##[group]CMake Configure") + subprocess.run(['cmake', '-S', '.', '-B', 'build']) + print("##[endgroup]") + print("##[group]CMake Build") + subprocess.run(['cmake', '--build', 'build']) + - name: Run + timeout-minutes: 60 + shell: python + run: | + import os + import subprocess + for root, _, files in os.walk('build'): + for file in files: + filepath = os.path.join(root, file) + if os.access(filepath, os.X_OK) or filepath.endswith('.exe'): + print(f"##[group]{filepath}") + subprocess.run(filepath) + print("##[endgroup]") diff --git a/README.md b/README.md index 198f8af..801d4bc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ ```bash mkdir -p build -cd build -cmake .. -cmake --build . +cmake -S . -B build +cmake --build build ```