Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .distignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
.git
.github
.gitignore
.aider*
.DS_Store
.distignore
.env
exelearning/
vendor/
node_modules/
phpmd-rules.xml
phpmd.xml
Makefile
docker-compose.yml
Dockerfile
composer.json
composer.lock
composer.phar
CLAUDE.md
AGENTS.md
scripts/
mod_exeweb-*.zip
10 changes: 9 additions & 1 deletion .env.dist
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,17 @@ XDEBUG_CONFIG="client_host=host.docker.internal"

EXELEARNING_WEB_SOURCECODE_PATH=
EXELEARNING_WEB_CONTAINER_TAG=latest
EXELEARNING_EDITOR_REPO_URL=https://github.com/exelearning/exelearning.git
EXELEARNING_EDITOR_DEFAULT_BRANCH=main
EXELEARNING_EDITOR_REF=
EXELEARNING_EDITOR_REF_TYPE=auto

# To use a specific Moodle version, set MOODLE_VERSION to git release tag.
# You can find the list of available tags at:
# https://api.github.com/repos/moodle/moodle/tags
MOODLE_VERSION=v5.0.5

# Test user data
TEST_USER_EMAIL=user@exelearning.net
TEST_USER_USERNAME=user
TEST_USER_PASSWORD=1234

95 changes: 95 additions & 0 deletions .github/workflows/check-editor-releases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
name: Check Editor Releases

on:
schedule:
- cron: "0 8 * * *" # Daily at 8:00 UTC
workflow_dispatch:

permissions:
contents: write
actions: write

jobs:
check_and_build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Get latest exelearning release
id: check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Fetch latest release from exelearning/exelearning
LATEST=$(gh api repos/exelearning/exelearning/releases/latest --jq '.tag_name' 2>/dev/null || echo "")
if [ -z "$LATEST" ]; then
echo "No release found"
echo "found=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Latest editor release: $LATEST"
echo "tag=$LATEST" >> $GITHUB_OUTPUT

# Check if we already built this version
MARKER_FILE=".editor-version"
CURRENT=""
if [ -f "$MARKER_FILE" ]; then
CURRENT=$(cat "$MARKER_FILE")
fi
echo "Current built version: $CURRENT"

if [ "$LATEST" = "$CURRENT" ]; then
echo "Already up to date"
echo "found=false" >> $GITHUB_OUTPUT
else
echo "New version available"
echo "found=true" >> $GITHUB_OUTPUT
fi

- name: Setup Bun
if: steps.check.outputs.found == 'true'
uses: oven-sh/setup-bun@v2

- name: Build static editor
if: steps.check.outputs.found == 'true'
env:
EXELEARNING_EDITOR_REPO_URL: https://github.com/exelearning/exelearning.git
EXELEARNING_EDITOR_REF: ${{ steps.check.outputs.tag }}
EXELEARNING_EDITOR_REF_TYPE: tag
run: make build-editor

- name: Compute version
if: steps.check.outputs.found == 'true'
id: version
run: |
TAG="${{ steps.check.outputs.tag }}"
VERSION="${TAG#v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=$TAG" >> $GITHUB_OUTPUT

- name: Create package
if: steps.check.outputs.found == 'true'
run: make package RELEASE=${{ steps.version.outputs.version }}

- name: Update editor version marker
if: steps.check.outputs.found == 'true'
run: |
echo "${{ steps.check.outputs.tag }}" > .editor-version
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add .editor-version
git commit -m "Update editor version to ${{ steps.check.outputs.tag }}"
git push

- name: Create GitHub Release
if: steps.check.outputs.found == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: "${{ steps.version.outputs.tag }}"
body: |
Automated build with eXeLearning editor ${{ steps.version.outputs.tag }}.
files: mod_exeweb-${{ steps.version.outputs.version }}.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44 changes: 44 additions & 0 deletions .github/workflows/pr-playground-preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
name: PR Playground Preview

on:
pull_request:
types: [opened, synchronize, reopened]

concurrency:
group: playground-${{ github.event.pull_request.number }}
cancel-in-progress: true

permissions:
contents: read
pull-requests: write

jobs:
playground-preview:
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 2
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}

- name: Build PR blueprint
env:
PLUGIN_REPO_OWNER: ${{ github.event.pull_request.head.repo.owner.login }}
PLUGIN_REPO_NAME: ${{ github.event.pull_request.head.repo.name }}
PLUGIN_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
run: |
plugin_url="https://github.com/${PLUGIN_REPO_OWNER}/${PLUGIN_REPO_NAME}/archive/refs/heads/${PLUGIN_BRANCH_NAME}.zip"
sed "s|https://github.com/exelearning/mod_exeweb/archive/refs/heads/main.zip|${plugin_url}|" blueprint.json > blueprint.pr.json

- uses: ateeducacion/action-moodle-playground-pr-preview@main
with:
blueprint-file: blueprint.pr.json
mode: append-to-description
github-token: ${{ secrets.GITHUB_TOKEN }}
extra-text: >
⚠️ The embedded eXeLearning editor is not included in this preview.
You can install it from **Modules > eXeLearning Web > Configure**
using the "Download & Install Editor" button.
All other module features (ELPX upload, viewer, preview) work normally.
81 changes: 81 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
name: Release

on:
release:
types: [published]
workflow_dispatch:
inputs:
release_tag:
description: "Release label for package name (e.g. 1.2.3 or 1.2.3-beta)"
required: false
default: ""
editor_repo_url:
description: "Editor source repository URL"
required: false
default: "https://github.com/exelearning/exelearning.git"
editor_ref:
description: "Editor ref value (main, branch name, or tag)"
required: false
default: "main"
editor_ref_type:
description: "Type of editor ref"
required: false
default: "auto"
type: choice
options:
- auto
- branch
- tag

permissions:
contents: write

jobs:
build_and_upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2

- name: Set environment variables
run: |
if [ "${{ github.event_name }}" = "release" ]; then
RAW_TAG="${GITHUB_REF##*/}"
VERSION_TAG="${RAW_TAG#v}"
echo "RELEASE_TAG=${VERSION_TAG}" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REPO_URL=https://github.com/exelearning/exelearning.git" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REF=main" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REF_TYPE=branch" >> $GITHUB_ENV
else
INPUT_RELEASE="${{ github.event.inputs.release_tag }}"
if [ -z "$INPUT_RELEASE" ]; then
INPUT_RELEASE="manual-$(date +%Y%m%d)-${GITHUB_SHA::7}"
fi
echo "RELEASE_TAG=${INPUT_RELEASE}" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REPO_URL=${{ github.event.inputs.editor_repo_url }}" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REF=${{ github.event.inputs.editor_ref }}" >> $GITHUB_ENV
echo "EXELEARNING_EDITOR_REF_TYPE=${{ github.event.inputs.editor_ref_type }}" >> $GITHUB_ENV
fi

- name: Build static editor
run: make build-editor

- name: Create package
run: make package RELEASE=${RELEASE_TAG}

- name: Upload ZIP as workflow artifact
uses: actions/upload-artifact@v4
with:
name: mod_exeweb-${{ env.RELEASE_TAG }}
path: mod_exeweb-${{ env.RELEASE_TAG }}.zip

- name: Upload ZIP to release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: mod_exeweb-${{ env.RELEASE_TAG }}.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,11 @@ phpmd-rules.xml
# Composer ignores
/vendor/
/composer.lock
/composer.phar
/composer.phar

# Built static editor files
dist/static/

# Local editor checkout fetched during build
exelearning/
.omc/
Loading
Loading