Skip to content

feat: Add schedule element button #2793

feat: Add schedule element button

feat: Add schedule element button #2793

Workflow file for this run

name: Build & Test
concurrency:
group: test-${{ github.ref_name }}
cancel-in-progress: ${{ github.ref_name != 'main' }}
on:
push:
branches:
- main
- 8.0-stable
- 7.4-stable
- 7.3-stable
- 7.2-stable
- 7.1-stable
- 7.0-stable
pull_request:
jobs:
check_package_json:
permissions:
contents: read
runs-on: ubuntu-24.04
name: Check package.json
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history
- name: Get changed files
id: changed-package-json
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
BASE_SHA="${{ github.event.pull_request.base.sha }}"
else
BASE_SHA="${{ github.event.before }}"
fi
git diff --name-only "$BASE_SHA" ${{ github.sha }} > changed_files
cat changed_files
if grep -q package.json changed_files; then
echo "any_changed=true" > $GITHUB_OUTPUT
else
echo "any_changed=false" > $GITHUB_OUTPUT
fi
outputs:
package_json_changed: ${{ steps.changed-package-json.outputs.any_changed }}
build_javascript:
permissions:
contents: read
runs-on: ubuntu-24.04
name: Build JS packages
needs: check_package_json
if: needs.check_package_json.outputs.package_json_changed == 'true'
steps:
- uses: actions/checkout@v6
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Restore node_modules cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('package.json', 'bun.lockdb') }}
restore-keys: |
${{ runner.os }}-node-modules
- name: Install dependencies
run: bun install
- name: bun build
run: bun run --bun build
- uses: actions/upload-artifact@v4
with:
name: javascript-bundles
path: vendor/javascript
- uses: actions/upload-artifact@v4
with:
name: bun-lockdb
path: bun.lockdb
RSpec:
permissions:
contents: read
needs: [check_package_json, build_javascript]
if: ${{ always() && (needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped') }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- rails: "7.2"
ruby: "3.2"
database: mariadb
storage: dragonfly
- rails: "7.2"
ruby: "3.3"
database: postgresql
storage: active_storage
- rails: "7.2"
ruby: "3.4"
database: sqlite
storage: dragonfly
- rails: "8.0"
ruby: "3.4"
database: postgresql
storage: active_storage
- rails: "8.0"
ruby: "3.4"
database: mariadb
storage: dragonfly
- rails: "8.0"
ruby: "3.4"
database: sqlite
storage: active_storage
- rails: "8.0"
ruby: "4.0"
database: postgresql
storage: active_storage
experimental: true
- rails: "8.1"
ruby: "3.4"
database: postgresql
storage: active_storage
- rails: "8.1"
ruby: "3.4"
database: mariadb
storage: dragonfly
- rails: "8.1"
ruby: "3.4"
database: sqlite
storage: active_storage
continue-on-error: ${{ matrix.experimental == true }}
env:
DB: ${{ matrix.database }}
DB_USER: alchemy_user
DB_PASSWORD: password
DB_HOST: "127.0.0.1"
DEBIAN_FRONTEND: noninteractive
RAILS_ENV: test
RAILS_VERSION: ${{ matrix.rails }}
ALCHEMY_STORAGE_ADAPTER: ${{ matrix.storage }}
RUBY_YJIT_ENABLE: "1"
services:
postgres:
image: postgres:17
env:
POSTGRES_USER: alchemy_user
POSTGRES_PASSWORD: password
POSTGRES_DB: alchemy_cms_dummy_test
ports: ["5432:5432"]
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
mariadb:
image: mariadb:latest
ports: ["3307:3306"]
env:
MARIADB_USER: alchemy_user
MARIADB_PASSWORD: password
MARIADB_DATABASE: alchemy_cms_dummy_test
MARIADB_ROOT_PASSWORD: password
options: --health-cmd="mariadb-admin ping" --health-interval=10s --health-timeout=5s --health-retries=5
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
rubygems: "latest"
- name: Restore apt cache
id: apt-cache
uses: actions/cache@v4
with:
path: /var/cache/apt/archives
key: ${{ runner.os }}-apt-v2-${{ matrix.database }}-${{ matrix.storage }}
restore-keys: |
${{ runner.os }}-apt-v2-${{ matrix.database }}-
- name: Install Postgres headers
if: matrix.database == 'postgresql'
run: |
sudo apt-get update -qq
sudo apt-get install -qq --fix-missing libpq-dev
- name: Install MariaDB headers
if: matrix.database == 'mariadb'
run: |
sudo apt-get update -qq
sudo apt-get install -qq --fix-missing libmysqlclient-dev
- name: Install libvips
if: matrix.storage == 'active_storage'
run: |
sudo apt-get update -qq
sudo apt-get install -qq --fix-missing libvips
- name: Install ImageMagick
if: matrix.storage == 'dragonfly'
run: |
sudo apt-get update -qq
sudo apt-get install -qq --fix-missing imagemagick
- uses: actions/download-artifact@v4
if: needs.check_package_json.outputs.package_json_changed == 'true'
with:
name: javascript-bundles
path: vendor/javascript
- name: Prepare database
run: |
bundle exec rake alchemy:spec:prepare
- name: Run tests
run: |
bundle exec rspec
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
if: matrix.rails == '8.0' && matrix.ruby == '3.4'
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: AlchemyCMS/alchemy_cms
disable_search: true
files: ./coverage/coverage.xml
- uses: actions/upload-artifact@v4
if: failure()
with:
name: Screenshots-${{ matrix.database }}-${{ matrix.ruby }}-${{ matrix.rails }}
path: |
spec/dummy/tmp/capybara
spec/dummy/tmp/screenshots
PushJavascript:
permissions:
contents: write
runs-on: ubuntu-24.04
needs: [check_package_json, RSpec]
if: github.event_name == 'pull_request' && needs.check_package_json.outputs.package_json_changed == 'true'
steps:
- name: Generate token
id: generate_token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ vars.ALCHEMY_BOT_APP_ID }}
private-key: ${{ secrets.ALCHEMY_BOT_APP_PRIVATE_KEY }}
- uses: actions/checkout@v6
with:
token: ${{ steps.generate_token.outputs.token }}
ref: ${{ github.head_ref }}
# Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
persist-credentials: false
fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.
- uses: actions/download-artifact@v4
with:
name: javascript-bundles
path: vendor/javascript
- uses: actions/download-artifact@v4
with:
name: bun-lockdb
- name: Check git status
id: git-status
run: git diff --quiet vendor/javascript bun.lockdb || echo "changed=true" >> $GITHUB_OUTPUT
- name: git commit
if: steps.git-status.outputs.changed == 'true'
run: |
git config --local user.name 'AlchemyCMS - CI Bot'
git config --local user.email 'alchemy@blish.cloud'
git add vendor/javascript bun.lockdb
git commit -m "Update JS packages" -m "Rebuilt packages after updating dependencies." -m "[skip ci]"
- name: Push changes
if: steps.git-status.outputs.changed == 'true'
uses: ad-m/github-push-action@master
with:
github_token: ${{ steps.generate_token.outputs.token }}
branch: ${{ github.head_ref }}
Vitest:
permissions:
contents: read
runs-on: ubuntu-24.04
needs: [check_package_json, build_javascript]
if: ${{ always() && (needs.build_javascript.result == 'success' || needs.build_javascript.result == 'skipped') }}
env:
NODE_ENV: test
steps:
- uses: actions/checkout@v6
- name: Setup Bun
uses: oven-sh/setup-bun@v2
- uses: actions/download-artifact@v4
if: needs.check_package_json.outputs.package_json_changed == 'true'
with:
name: bun-lockdb
- name: Restore node modules cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('package.json', 'bun.lockdb') }}
restore-keys: |
${{ runner.os }}-bun-
- name: Install dependencies
run: bun install
- name: Run vitest
run: bun run test