diff --git a/.github/workflows/check_version.yaml b/.github/workflows/ci.yaml similarity index 54% rename from .github/workflows/check_version.yaml rename to .github/workflows/ci.yaml index 9a3a1ee..d36b846 100644 --- a/.github/workflows/check_version.yaml +++ b/.github/workflows/ci.yaml @@ -1,16 +1,34 @@ -name: Check Version +# Copyright 2024 Canonical Ltd. +# See LICENSE file for licensing details. +name: Tests + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: - workflow_dispatch: pull_request: jobs: + lint: + name: Lint + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install tox + run: pipx install tox + - name: Run linters + run: tox run -e lint + check-version: + name: Check version runs-on: ubuntu-22.04 timeout-minutes: 15 steps: - - name: 'Foresight: Collect workflow telemetry' - uses: runforesight/foresight-workflow-kit-action@v1 - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - name: Install yq run: sudo snap install yq - name: Compare versions @@ -27,3 +45,7 @@ jobs: echo "SNAP version: $SNAP_VERSION" exit 1 fi + + build: + name: Build rock + uses: canonical/data-platform-workflows/.github/workflows/build_rock.yaml@v17 diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml deleted file mode 100644 index ac40a4f..0000000 --- a/.github/workflows/integration.yaml +++ /dev/null @@ -1,41 +0,0 @@ -name: Operator Tests - -on: - pull_request: - workflow_call: - workflow_dispatch: - -jobs: - build: - uses: ./.github/workflows/build.yaml - integration: - runs-on: ubuntu-latest - needs: build - strategy: - matrix: - env: - - integration-charm - - integration-database-relation - - integration-osm-mysql - - integration-replication - - integration-self-healing - - integration-tls - - integration-backups - fail-fast: false - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Setup operator environment - uses: charmed-kubernetes/actions-operator@main - with: - provider: microk8s - # This is needed until - # https://bugs.launchpad.net/juju/+bug/1977582 is fixed - bootstrap-options: "--agent-version 2.9.29" - - uses: actions/download-artifact@v3 - with: - name: charmed-mysql-rock - - name: Install tox - run: python3 -m pip install tox - - name: Integration Tests - run: sg microk8s -c "tox -e ${{ matrix.env }}" diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml deleted file mode 100644 index 449ffe6..0000000 --- a/.github/workflows/lint.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: Lint -on: - pull_request: - workflow_call: - workflow_dispatch: - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Install tox - run: python3 -m pip install tox - - name: YAML Lint - run: tox -e lint diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..5a6d943 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,63 @@ +# Copyright 2024 Canonical Ltd. +# See LICENSE file for licensing details. +name: Release to GHCR + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 8.0-22.04 + workflow_dispatch: + +jobs: + build: + name: Build rock + uses: canonical/data-platform-workflows/.github/workflows/build_rock.yaml@v17 + + release: + name: Release rock + needs: + - build + uses: canonical/data-platform-workflows/.github/workflows/release_rock.yaml@v17 + with: + artifact-prefix: ${{ needs.build.outputs.artifact-prefix }} + permissions: + packages: write # Needed to publish to GitHub Container Registry + contents: write # Needed to create GitHub release + + sbom: + name: Generate Software Bill of Materials + needs: + - build + # Run after release so that rock cannot be (maliciously) modified between build & release + - release + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Install Syft + run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin + - name: Download rock package(s) + uses: actions/download-artifact@v4 + with: + pattern: ${{ needs.build.outputs.artifact-prefix }}-* + merge-multiple: true + - name: Generate SBOM(s) + shell: python + run: | + import pathlib + import subprocess + + for rock_file in pathlib.Path(".").glob("*.rock"): + subprocess.run( + ["syft", rock_file.name, "--output", f"spdx-json={rock_file.name}.spdx.json"], + check=True, + ) + - name: Upload SBOM(s) + uses: actions/upload-artifact@v4 + with: + name: sbom-${{ needs.build.outputs.artifact-prefix }} + path: '*.spdx.json' + if-no-files-found: error diff --git a/.github/workflows/sync_issue_to_jira.yaml b/.github/workflows/sync_issue_to_jira.yaml index 2c1a4f6..3401a3a 100644 --- a/.github/workflows/sync_issue_to_jira.yaml +++ b/.github/workflows/sync_issue_to_jira.yaml @@ -9,7 +9,7 @@ on: jobs: sync: name: Sync GitHub issue to Jira - uses: canonical/data-platform-workflows/.github/workflows/sync_issue_to_jira.yaml@v2 + uses: canonical/data-platform-workflows/.github/workflows/sync_issue_to_jira.yaml@v17 with: jira-base-url: https://warthogs.atlassian.net jira-project-key: DPE diff --git a/README.md b/README.md index 326b98c..5538739 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # MySQL Server ROCK +[![Release to GHCR](https://github.com/canonical/charmed-mysql-rock/actions/workflows/release.yaml/badge.svg)](https://github.com/canonical/charmed-mysql-rock/actions/workflows/release.yaml) + This repository contains the packaging metadata for creating a ROCK of MySQL built from the official ubuntu MySQL package from the Ubuntu repository and further installs mysql-shell. For more information on ROCKs, visit the [rockcraft Github](https://github.com/canonical/rockcraft). Built for use in the [MySQL k8s charm](https://github.com/canonical/mysql-k8s-operator). diff --git a/rockcraft.yaml b/rockcraft.yaml index 5750eb0..9a64d43 100644 --- a/rockcraft.yaml +++ b/rockcraft.yaml @@ -1,15 +1,16 @@ -name: charmed-mysql # the name of your ROCK -base: ubuntu@22.04 # the base environment for this ROCK -version: '8.0.34' # just for humans. Semantic versioning is recommended -summary: Charmed MySQL ROCK OCI # 79 char long summary +name: charmed-mysql +base: ubuntu@22.04 +version: '8.0.37' +summary: Charmed MySQL ROCK OCI description: | MySQL built from the official MySQL package from the MySQL repository and installs mysql-shell. For more information on ROCKs, visit the https://github.com/canonical/rockcraft. -license: Apache-2.0 # your application's SPDX license -platforms: # The platforms this ROCK should be built on and run on +license: Apache-2.0 +platforms: amd64: + arm64: parts: charmed-mysql: @@ -32,30 +33,6 @@ parts: - python3-yaml stage-snaps: - charmed-mysql/8.0/edge - override-stage: | - LIB_DIR=$CRAFT_STAGE/usr/lib/x86_64-linux-gnu - craftctl default - mkdir -p $CRAFT_STAGE/var/lib/mysql - ln -sf $LIB_DIR/libnuma.so.1 \ - /usr/lib/x86_64-linux-gnu/libnuma.so.1 - ln -sf $LIB_DIR/libaio.so.1 \ - /usr/lib/x86_64-linux-gnu/libaio.so.1 - ln -sf $LIB_DIR/libicuuc.so.70 \ - /usr/lib/x86_64-linux-gnu/libicuuc.so.70 - ln -sf $LIB_DIR/libicui18n.so.70 \ - /usr/lib/x86_64-linux-gnu/libicui18n.so.70 - ln -sf $LIB_DIR/libevent_core-2.1.so.7 \ - /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.7 - ln -sf $LIB_DIR/libevent_pthreads-2.1.so.7 \ - /usr/lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.7 - ln -sf $LIB_DIR/libprotobuf-lite.so.23 \ - /usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.23 - ln -sf $LIB_DIR/libicudata.so.70 \ - /usr/lib/x86_64-linux-gnu/libicudata.so.70 - rm -rf /var/lib/mysql/ - mysqld --initialize - cp -r /var/lib/mysql $CRAFT_STAGE/var/lib - chown 584788:584788 $CRAFT_STAGE/var/lib/mysql override-prime: | craftctl default mv -f $CRAFT_PRIME/etc/mysql/mysql.cnf $CRAFT_PRIME/etc/mysql/my.cnf diff --git a/tox.ini b/tox.ini index e3c9218..372ff4f 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,7 @@ [tox] requires = tox>=4 -env_list = lint, integration - -[testenv] -setenv = - repo=https://github.com/canonical/mysql-k8s-operator.git - base-name=ghcr.io/canonical/charmed-mysql +env_list = lint [testenv:lint] description = run linters @@ -15,87 +10,3 @@ deps = yamllint commands = yamllint --no-warnings rockcraft.yaml - -[testenv:integration-charm] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-charm - -[testenv:integration-database-relation] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-database-relation - -[testenv:integration-osm-mysql] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-osm-mysql - -[testenv:integration-replication] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-replication - -[testenv:integration-self-healing] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-self-healing - -[testenv:integration-tls] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-tls - -[testenv:integration-backups] -description = run operator integration tests -skip_install = true -allowlist_externals = - tox - bash -commands = - bash -ec 'if ! [ -f charmed-mysql_*_amd64.rock ]; then rockcraft pack; fi' {posargs} - bash -ec 'microk8s ctr image import charmed-mysql_*_amd64.rock --base-name {env:base-name}' - bash -ec 'if ! [ -d operator ]; then git clone {env:repo} operator; fi' {posargs} - tox --workdir operator -c operator -e integration-backups