WIP commit

这个提交包含在:
Luke Eversfield 2023-07-05 11:57:57 +02:00
父节点 b5af401e74
当前提交 3bf13acfbb
共有 8 个文件被更改,包括 235 次插入57 次删除

10
.env 普通文件
查看文件

@ -0,0 +1,10 @@
# copy this to .env to easily modify local CI ENV variables
# cp env.template .env
# MW_VERSION=1.35
# SMW_VERSION=4.1.1
# AR_VERSION=1.8.2
# PHP_VERSION=7.4
# DB_TYPE=sqlite
# DB_IMAGE="mysql:5.7"

查看文件

@ -16,30 +16,97 @@ jobs:
strategy:
matrix:
include:
- mediawiki_version: 1.35
semantic_mediawiki_version: 4.1.1
# - mediawiki_version: 1.35
# semantic_mediawiki_version: 4.1.1
# approved_revs_version: 1.8.1
# database_type: mysql
# coverage: true
# experimental: false
# - mediawiki_version: 1.35
# semantic_mediawiki_version: 4.1.1
# approved_revs_version: 1.8.1
# database_type: sqlite
# coverage: false
# experimental: false
# - mediawiki_version: 1.38
# semantic_mediawiki_version: dev-master
# approved_revs_version: master
# database_type: sqlite
# coverage: false
# experimental: true
- mediawiki_version: '1.35'
smw_version: '4.1.1'
approved_revs_version: 1.8.1
php_version: 7.4
database_type: mysql
database_image: "mysql:5.7"
coverage: true
experimental: false
- mediawiki_version: 1.35
semantic_mediawiki_version: 4.1.1
- mediawiki_version: '1.35'
smw_version: '4.1.1'
approved_revs_version: 1.8.1
php_version: 7.4
database_type: sqlite
database_image: "mysql:5.7"
coverage: true
experimental: false
- mediawiki_version: '1.35'
smw_version: dev-master
approved_revs_version: master
php_version: 7.4
database_type: mysql
database_image: "mysql:5.7"
coverage: false
experimental: false
- mediawiki_version: 1.38
semantic_mediawiki_version: dev-master
- mediawiki_version: '1.39'
smw_version: dev-master
approved_revs_version: master
database_type: sqlite
php_version: 8.1
database_type: mysql
database_image: "mysql:5.7"
coverage: false
experimental: true
- mediawiki_version: '1.39'
smw_version: dev-master
approved_revs_version: master
php_version: 8.1
database_type: mysql
database_image: "mysql:8"
coverage: false
experimental: true
- mediawiki_version: '1.40'
smw_version: dev-master
approved_revs_version: master
php_version: 8.1
database_type: mysql
database_image: "mysql:8"
coverage: false
experimental: true
- mediawiki_version: '1.40'
smw_version: dev-master
approved_revs_version: master
php_version: 8.1
database_type: mysql
database_image: "mariadb:latest"
coverage: false
experimental: true
- mediawiki_version: '1.40'
smw_version: dev-master
approved_revs_version: master
php_version: 8.1
database_type: postgres
database_image: "postgres:14"
coverage: false
experimental: true
env:
MW_VERSION: ${{ matrix.mediawiki_version }}
SMW_VERSION: ${{ matrix.semantic_mediawiki_version }}
SMW_VERSION: ${{ matrix.smw_version }}
AR_VERSION: ${{ matrix.approved_revs_version }}
PHP_VERSION: ${{ matrix.php_version }}
DB_TYPE: ${{ matrix.database_type }}
DB_IMAGE: ${{ matrix.database_image }}
steps:
- name: Checkout

查看文件

@ -1,11 +1,11 @@
ARG MW_VERSION
FROM gesinn/docker-mediawiki-sqlite:${MW_VERSION}
ARG PHP_VERSION
FROM gesinn/mediawiki-ci:${MW_VERSION}-php${PHP_VERSION}
RUN rm -f /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini && \
sed -i s/80/8080/g /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf && \
# To be able to persist configuration and data via docker volumes
mkdir -p /data/sqlite /data/config /data/log && chown -R www-data. /data && \
rm -f LocalSettings.php && ln -s /data/config/LocalSettings.php
sed -i s/80/8080/g /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
ENV EXTENSION=SemanticExtraSpecialProperties
COPY composer*.json /var/www/html/extensions/$EXTENSION/

147
Makefile
查看文件

@ -1,36 +1,52 @@
EXTENSION := SemanticExtraSpecialProperties
-include .env
export
# ======== Naming ========
EXTENSION := SemanticExtraSpecialProperties
EXTENSION_FOLDER := /var/www/html/extensions/${EXTENSION}
extension := $(shell echo $(EXTENSION) | tr A-Z a-z})
IMAGE_NAME := $(extension):test-$(MW_VERSION)-$(SMW_VERSION)-$(AR_VERSION)-$(PHP_VERSION)
# ======== CI ENV Variables ========
MW_VERSION ?= 1.35
SMW_VERSION ?= 4.1.1
AR_VERSION ?= 1.8.2
IMAGE_VERSION := $(MW_VERSION)-$(SMW_VERSION)-$(AR_VERSION)
BUILD_ARGS := \
--build-arg MW_VERSION=$(MW_VERSION) \
--build-arg SMW_VERSION=$(SMW_VERSION) \
--build-arg AR_VERSION=$(AR_VERSION)
# -------------------------------------------------------------------
PHP_VERSION ?= 7.4
DB_TYPE ?= sqlite
extension := $(shell echo $(EXTENSION) | tr A-Z a-z})
IMAGE_NAME := $(extension):test-$(IMAGE_VERSION)
EXTENSION_FOLDER := /var/www/html/extensions/${EXTENSION}
DB_IMAGE ?= ""
environment = IMAGE_NAME=$(IMAGE_NAME) \
MW_VERSION=$(MW_VERSION) \
SMW_VERSION=$(SMW_VERSION) \
AR_VERSION=$(AR_VERSION) \
PHP_VERSION=$(PHP_VERSION) \
DB_TYPE=$(DB_TYPE) \
DB_IMAGE=$(DB_IMAGE) \
EXTENSION_FOLDER=$(EXTENSION_FOLDER)
ifneq (,$(wildcard ./docker-compose.override.yml))
COMPOSE_OVERRIDE=-f docker-compose.override.yml
endif
compose = $(environment) docker-compose $(COMPOSE_OVERRIDE) $(COMPOSE_ARGS)
compose-ci = $(environment) docker-compose -f docker-compose.yml -f docker-compose-ci.yml $(COMPOSE_OVERRIDE) $(COMPOSE_ARGS)
compose-dev = $(environment) docker-compose -f docker-compose.yml -f docker-compose-dev.yml $(COMPOSE_OVERRIDE) $(COMPOSE_ARGS)
compose = IMAGE_NAME=$(IMAGE_NAME) EXTENSION_FOLDER=$(EXTENSION_FOLDER) docker-compose $(COMPOSE_ARGS)
compose-run = $(compose) run -T --rm
compose-exec-wiki = $(compose) exec -T wiki
show-current-target = @echo; echo "======= $@ ========"
# ======== CI ========
# ======== Global Targets ========
.PHONY: ci
ci: install
$(show-current-target)
$(compose-exec-wiki) bash -c "cd $(EXTENSION_FOLDER) && composer test"
ci: install composer-test
.PHONY: ci-coverage
ci-coverage: install
$(show-current-target)
$(compose-exec-wiki) bash -c "cd $(EXTENSION_FOLDER) && composer test-coverage"
ci-coverage: install composer-test-coverage
.PHONY: install
install: destroy up .install
@ -45,24 +61,23 @@ down: .init .down
destroy: .init .destroy
.PHONY: bash
bash: .init
$(show-current-target)
$(compose) exec wiki bash -c "cd $(EXTENSION_FOLDER) && bash"
bash: up .bash
.PHONY: show-logs
show-logs: .init
$(show-current-target)
$(compose) logs -f || true
# ======== General Docker-Compose Helper Targets ========
.PHONY: .build
.build:
$(show-current-target)
$(compose) build $(BUILD_ARGS) wiki
$(compose-ci) build wiki
.PHONY: .up
.up:
$(show-current-target)
$(compose) up -d
$(compose-ci) up -d
.PHONY: .install
.install: .wait-for-db
@ -78,28 +93,80 @@ show-logs: .init
.PHONY: .down
.down:
$(show-current-target)
$(compose) down
$(compose-ci) down
.PHONY: .destroy
.destroy:
$(show-current-target)
$(compose) down -v
$(compose-ci) down -v
.PHONY: .bash
.bash: .init
$(show-current-target)
$(compose-exec-wiki) bash -c "cd $(EXTENSION_FOLDER) && bash"
# ======== Test Targets ========
.PHONY: composer-test
composer-test:
$(show-current-target)
$(compose-exec-wiki) bash -c "cd $(EXTENSION_FOLDER) && composer test"
.PHONY: composer-test-coverage
composer-test-coverage:
$(show-current-target)
$(compose-exec-wiki) bash -c "cd $(EXTENSION_FOLDER) && composer test-coverage"
# ======== Dev Targets ========
.PHONY: dev-bash
dev-bash: .init
$(compose-dev) run -it wiki bash -c 'service apache2 start && bash'
.PHONY: run
run:
$(compose-dev) -f docker-compose-dev.yml run -it wiki
# ======== Releasing ========
# VERSION = `node -e 'console.log(require("./extension.json").version)'`
# .PHONY: release
# release: ci git-push gh-login
# gh release create $(VERSION)
# .PHONY: git-push
# git-push:
# git diff --quiet || (echo 'git directory has changes'; exit 1)
# git push
# .PHONY: gh-login
# gh-login: require-GH_API_TOKEN
# gh config set prompt disabled
# @echo $(GH_API_TOKEN) | gh auth login --with-token
# .PHONY: require-GH_API_TOKEN
# require-GH_API_TOKEN:
# ifndef GH_API_TOKEN
# $(error GH_API_TOKEN is not set)
# endif
# ======== Helpers ========
.PHONY: .init
.init:
$(show-current-target)
$(eval COMPOSE_ARGS = --project-name ${extension}-$(DB_TYPE) --profile $(DB_TYPE))
ifeq ($(DB_TYPE), sqlite)
$(eval WIKI_DB_CONFIG = --dbtype=$(DB_TYPE) --dbpath=/tmp/sqlite)
else
$(eval WIKI_DB_CONFIG = --dbtype=$(DB_TYPE) --dbserver=$(DB_TYPE) --installdbuser=root --installdbpass=database)
endif
@echo "COMPOSE_ARGS: $(COMPOSE_ARGS)"
.PHONY: .wait-for-db
.wait-for-db:
$(show-current-target)
ifneq ($(DB_TYPE), sqlite)
$(compose-run) wait-for $(DB_TYPE):3306 -t 120
endif
.PHONY: .init
.init:
$(show-current-target)
ifeq ($(DB_TYPE), mysql)
$(eval COMPOSE_ARGS = --project-name $(extension)-mysql --profile mysql)
$(eval WIKI_DB_CONFIG = --dbtype=mysql --dbserver=mysql --installdbuser=root --installdbpass=database)
else
$(eval COMPOSE_ARGS = --project-name $(extension)-sqlite)
$(eval WIKI_DB_CONFIG = --dbtype=sqlite --dbpath=/data/sqlite)
endif
@echo "COMPOSE_ARGS: $(COMPOSE_ARGS)"
$(compose-run) wait-for $(DB_TYPE):3306 -t 120
else ifeq ($(DB_TYPE), postgres)
$(compose-run) wait-for $(DB_TYPE):5432 -t 120
endif

4
docker-compose-ci.yml 普通文件
查看文件

@ -0,0 +1,4 @@
services:
wiki:
volumes:
- ./coverage:${EXTENSION_FOLDER}/coverage

8
docker-compose-dev.yml 普通文件
查看文件

@ -0,0 +1,8 @@
services:
wiki:
volumes:
- ./:${EXTENSION_FOLDER}
- ${EXTENSION_FOLDER}/vendor/
ports:
- 8080:8080

查看文件

@ -1,17 +1,29 @@
services:
wiki:
build: .
build:
context: .
args:
MW_VERSION: ${MW_VERSION}
SMW_VERSION: ${SMW_VERSION}
AR_VERSION: ${AR_VERSION}
PHP_VERSION: ${PHP_VERSION}
image: ${IMAGE_NAME}
volumes:
- ./coverage:${EXTENSION_FOLDER}/coverage
mysql:
image: mysql:5
image: ${DB_IMAGE:-mysql:5}
environment:
- MYSQL_ROOT_PASSWORD=database
profiles:
- mysql
postgres:
image: ${DB_IMAGE:-postgres:15}
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=database
profiles:
- postgres
wait-for:
image: mintel/docker-wait-for-it
profiles:

10
env.template 普通文件
查看文件

@ -0,0 +1,10 @@
# copy this to .env to easily modify local CI ENV variables
# cp env.template .env
MW_VERSION=1.39
SMW_VERSION=4.1.1
AR_VERSION=1.8.2
PHP_VERSION=8.1
DB_TYPE=mysql
DB_IMAGE="mysql:8"