#1 Update CI roles
Closed a month ago by tagoh. Opened a month ago by tagoh.
rpms/ tagoh/vlgothic-fonts master  into  master

Add CI tests again as submodule
Akira TAGOH • a month ago  
Clean up once
Akira TAGOH • a month ago  
Update CI roles
Akira TAGOH • a month ago  
file added
+3

@@ -0,0 +1,3 @@ 

+ [submodule "tests/roles"]

+ 	path = tests/roles

+ 	url = https://pagure.io/i18n.git

@@ -0,0 +1,25 @@ 

+ - hosts: localhost

+   become: yes

+   tags:

+   - classic

+   roles:

+   - role: custom-test-fonts

+     required_packages:

+     - vlgothic-fonts

+     - vlgothic-p-fonts

+     path_prefix: /usr/share/fonts/vlgothic

+     coverage:

+     - ja

+     families:

+     - lang: ja

+       alias: sans-serif

+       family: VL Gothic

+       package: vlgothic-fonts

+     - lang: ja

+       alias: monospace

+       family: VL Gothic

+       package: vlgothic-fonts

+     - lang: ja

+       alias: sans-serif

+       family: VL PGothic

+       package: vlgothic-p-fonts

file renamed
+ -
@@ -0,0 +1,1 @@ 
+ Subproject commit 0e99bdace8125872c3ac940a0f32af0b06ca9652

@@ -1,7 +0,0 @@ 

- ---

- 

- role_pkgs_req:

-   - fontconfig

-   - fontconfig-devel

-   - pkg-config

-   - rsync

@@ -1,153 +0,0 @@ 

- #! /bin/bash -efu

- 

- debug() {

- 	if [ -n "$DEBUG" ]; then

- 		echo "$*" >&2

- 	fi

- }

- 

- msg_usage() {

- 	cat <<_EOF_

- Run family test.

- 

- Usage:

- $PROG <options>

- 

- Options:

- -h, --help		Display this help and exit

- -v, --verbose		Turn on debug

- -l, --lang=LANG		Test LANG language coverage (default: en)

- -f, --family=FILE	Set a family name supposed to be assigned for alias.

- -g, --alias=STR		Set an alias name. (default: sans-serif)

- -a, --artifactsdir=DIR	Set environment dir to store artifacts

- -k, --package=NAME	Set a package name for fonts.

- _EOF_

- }

- 

- PROG="${PROG:-${0##*/}}"

- DEBUG="${DEBUG:-}"

- OPT_LANG="${OPT_LANG:-en}"

- OPT_FAMILY="${OPT_FAMILY:-}"

- OPT_ARTIFACTS_DIR="${OPT_ARTIFACTS_DIR:-}"

- OPT_ALIAS="${OPT_ALIAS:-sans-serif}"

- OPT_PACKAGE="${OPT_PACKAGE:-}"

- 

- opt=$(getopt -n "$0" --options "hvl:f:t:a:g:k:" --longoptions "help,verbose,lang:,family:,test:,artifactsdir:,alias:,package:" -- "$@")

- eval set -- "$opt"

- while [[ $# -gt 0 ]]; do

- 	case "$1" in

- 	-k|--package)

- 		OPT_PACKAGE="$2"

- 		shift 2

- 		;;

- 	-g|--alias)

- 		OPT_ALIAS="$2"

- 		shift 2

- 		;;

- 	-a|--artifactsdir)

- 		OPT_ARTIFACTS_DIR="$2"

- 		shift 2

- 		;;

- 	-f|--family)

- 		OPT_FAMILY="$2"

- 		shift 2

- 		;;

- 	-l|--lang)

- 		OPT_LANG="$2"

- 		shift 2

- 		;;

- 	-v|--verbose)

- 		DEBUG="-v"

- 		shift

- 		;;

- 	-h|--help)

- 		msg_usage

- 		exit 0

- 		;;

- 	--)

- 		shift

- 		;;

- 	*)

- 		msg_usage

- 		exit 1

- 	esac

- done

- 

- if [ -z "$OPT_ARTIFACTS_DIR" ] || [ -z "$OPT_LANG" ] || [ -z "$OPT_FAMILY" ]; then

- 	echo "Use: $PROG -h for help."

- 	exit 0

- fi

- 

- debug "Alias: $OPT_ALIAS"

- debug "Family: $OPT_FAMILY"

- debug "Lang: $OPT_LANG"

- debug "Artifacts dir: $OPT_ARTIFACTS_DIR"

- debug "Package name: $OPT_PACKAGE"

- STR_TEST_DASHED=$(echo "${OPT_PACKAGE}_${OPT_ALIAS}" | sed -e 's/\//-/g' -e 's/ /-/g')

- debug "Log file: $STR_TEST_DASHED.log"

- 

- clean_exit() {

- 	rc=$?;

- 	trap - SIGINT SIGTERM SIGABRT EXIT

- 	echo "Run test $OPT_ALIAS: done."

- 	for pid in $(ps -o pid --no-headers --ppid $$); do

- 		if [ -n "$(ps -p $pid -o pid=)" ]; then

- 			kill -s HUP $pid

- 		fi

- 	done

- 	local log_file_name="$STR_TEST_DASHED.log"

- 	local log_file_path="$OPT_ARTIFACTS_DIR/$log_file_name"

- 	local status

- 	if [[ $rc -eq 127 ]]; then

- 		status="ERROR"

- 	elif grep -q "RESULT: WARN" "$log_file_path"; then

- 		status="ERROR"

- 	elif grep -q "RESULT: FAIL" "$log_file_path"; then

- 		status="FAIL"

- 	elif grep -q "RESULT: PASS" "$log_file_path"; then

- 		status="PASS"

- 	elif grep -q "FAIL" "$log_file_path"; then

- 		status="FAIL"

- 	elif grep -q "PASS" "$log_file_path"; then

- 		status="PASS"

- 	else

- 		status="ERROR"

- 	fi

- 	echo "$status $OPT_ALIAS" >> "$OPT_ARTIFACTS_DIR/test.log"

- 	mv "$log_file_path" "$OPT_ARTIFACTS_DIR/${status}_${log_file_name}"

- 	local results="$OPT_ARTIFACTS_DIR/results.yml"

- 	local result=$(echo $status | tr '[:upper:]' '[:lower:]')

- 	test -f "$results" || echo 'results:' > "$results"

- 	echo "- {result: $result, test: $OPT_ALIAS}" >> "$results"

- 	exit 0

- }

- trap clean_exit SIGINT SIGTERM SIGABRT EXIT

- 

- cachedir=`pkg-config --variable cachedir fontconfig`

- tmpconfd=`mktemp --tmpdir -d fontsci.XXXXXXXX`

- conf=$(for i in `rpm -ql $OPT_PACKAGE | grep conf.d`; do

- 	echo "<include>$i</include>"

- done)

- cat <<_EOF_> $tmpconfd/fonts.conf

- <fontconfig>

- 	<dir>/usr/share/fonts</dir>

- 	$conf

- 	<cachedir>$cachedir</cachedir>

- </fontconfig>

- _EOF_

- debug "Config: `cat $tmpconfd/fonts.conf`"

- 

- mkdir -p "$OPT_ARTIFACTS_DIR"

- export OUTPUTFILE="$(realpath "$OPT_ARTIFACTS_DIR")/$STR_TEST_DASHED-out.log"

- logfile_stdout="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"

- logfile_stderr="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED-err.log"

- exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)

- 

- debug "Check family assignment"

- res=`FONTCONFIG_FILE=$tmpconfd/fonts.conf fc-match -f "%{family[0]}" :family=$OPT_ALIAS:lang=$OPT_LANG`

- if [ "x$res" = "x$OPT_FAMILY" ]; then

- 	echo "RESULT: PASS: $OPT_FAMILY was assigned to $OPT_ALIAS as expected"

- else

- 	echo "RESULT: FAIL: $OPT_FAMILY wasn't assigned to $OPT_ALIAS (actual result: $res)"

- fi

- rm -rf $tmpconfd

@@ -1,197 +0,0 @@ 

- #! /bin/bash -efu

- 

- debug() {

- 	if [ -n "$DEBUG" ]; then

- 		echo "$*" >&2

- 	fi

- }

- 

- msg_usage() {

- 	cat <<_EOF_

- Run language coverage test.

- 

- Usage:

- $PROG <options>

- 

- Options:

- -h, --help		Display this help and exit

- -v, --verbose		Turn on debug

- -l, --lang=LANG		Test LANG language coverage (default: en)

- -p, --path=PATH		Test fonts on PATH

- -n, --name=NAME		Set NAME to store a log file.

- -a, --artifactsdir=DIR	test environment dir to store artifacts

- -e, --exclude=FILE	Exclude FILE to check.

- -i, --include=FILE	Include File to check.

- _EOF_

- }

- 

- PROG="${PROG:-${0##*/}}"

- DEBUG="${DEBUG:-}"

- OPT_LANG="${OPT_LANG:-en}"

- OPT_PATH="${OPT_PATH:-}"

- OPT_ARTIFACTS_DIR="${OPT_ARTIFACTS_DIR:-}"

- OPT_EXCLUDE=()

- OPT_INCLUDE=()

- OPT_NAME="${OPT_NAME:-}"

- 

- opt=$(getopt -n "$0" --options "hvl:p:n:a:e:i:" --longoptions "help,verbose,lang:,path:,name:,artifactsdir:,exclude:,include:" -- "$@")

- eval set -- "$opt"

- while [[ $# -gt 0 ]]; do

- 	case "$1" in

- 	-n|--name)

- 		OPT_NAME="$2"

- 		shift 2

- 		;;

- 	-i|--include)

- 		OPT_INCLUDE+=("$2")

- 		shift 2

- 		;;

- 	-e|--exclude)

- 		OPT_EXCLUDE+=("$2")

- 		shift 2

- 		;;

- 	-a|--artifactsdir)

- 		OPT_ARTIFACTS_DIR="$2"

- 		shift 2

- 		;;

- 	-p|--path)

- 		OPT_PATH="$2"

- 		shift 2

- 		;;

- 	-l|--lang)

- 		OPT_LANG="$2"

- 		shift 2

- 		;;

- 	-v|--verbose)

- 		DEBUG="-v"

- 		shift

- 		;;

- 	-h|--help)

- 		msg_usage

- 		exit 0

- 		;;

- 	--)

- 		shift

- 		;;

- 	*)

- 		msg_usage

- 		exit 1

- 	esac

- done

- 

- if [ -z "$OPT_ARTIFACTS_DIR" ] || [ -z "$OPT_LANG" ] || [ -z "$OPT_PATH" ]; then

- 	echo "Use: $PROG -h for help."

- 	exit 0

- fi

- 

- expand_regex() {

- 	local e ret=()

- 	local path="$1"

- 	shift

- 	(cd $path;

- 	for e; do

- 		debug "$e"

- 		set +f

- 		local x=$(find -regextype posix-egrep -regex "./$e" -print|sed -e 's,^\./,,g')

- 		ret+=($x)

- 		set -f

- 		echo ${ret[@]}

- 	done)

- 	echo ${ret[@]}

- }

- 

- OPT_INCLUDE=($(expand_regex $OPT_PATH ${OPT_INCLUDE[@]}))

- OPT_EXCLUDE=($(expand_regex $OPT_PATH ${OPT_EXCLUDE[@]}))

- 

- debug "Path: $OPT_PATH"

- debug "Lang: $OPT_LANG"

- debug "Artifacts dir: $OPT_ARTIFACTS_DIR"

- debug "Exclude: ${OPT_EXCLUDE[@]}"

- debug "Include: ${OPT_INCLUDE[@]}"

- STR_TEST_DASHED=$(echo "${OPT_NAME:-${OPT_LANG}_${OPT_PATH}}" | sed -e 's/\//-/g')

- 

- clean_exit() {

- 	rc=$?;

- 	trap - SIGINT SIGTERM SIGABRT EXIT

- 	echo "Run test $OPT_PATH: done."

- 	for pid in $(ps -o pid --no-headers --ppid $$); do

- 		if [ -n "$(ps -p $pid -o pid=)" ]; then

- 			kill -s HUP $pid

- 		fi

- 	done

- 	local log_file_name="$STR_TEST_DASHED.log"

- 	local log_file_path="$OPT_ARTIFACTS_DIR/$log_file_name"

- 	local status

- 	if [[ $rc -eq 127 ]]; then

- 		status="ERROR"

- 	elif grep -q "RESULT: WARN" "$log_file_path"; then

- 		status="ERROR"

- 	elif grep -q "RESULT: FAIL" "$log_file_path"; then

- 		status="FAIL"

- 	elif grep -q "RESULT: PASS" "$log_file_path"; then

- 		status="PASS"

- 	elif grep -q "FAIL" "$log_file_path"; then

- 		status="FAIL"

- 	elif grep -q "PASS" "$log_file_path"; then

- 		status="PASS"

- 	else

- 		status="ERROR"

- 	fi

- 	echo "$status $OPT_PATH" >> "$OPT_ARTIFACTS_DIR/test.log"

- 	mv "$log_file_path" "$OPT_ARTIFACTS_DIR/${status}_${log_file_name}"

- 	local results="$OPT_ARTIFACTS_DIR/results.yml"

- 	local result=$(echo $status | tr '[:upper:]' '[:lower:]')

- 	test -f "$results" || echo 'results:' > "$results"

- 	echo "- {result: $result, test: $OPT_PATH}" >> "$results"

- 	exit 0

- }

- trap clean_exit SIGINT SIGTERM SIGABRT EXIT

- 

- mkdir -p "$OPT_ARTIFACTS_DIR"

- export OUTPUTFILE="$(realpath "$OPT_ARTIFACTS_DIR")/$STR_TEST_DASHED-out.log"

- logfile_stdout="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"

- logfile_stderr="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED-err.log"

- exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)

- 

- contains() {

- 	local e match="$1"

- 	shift

- 	for e; do [[ "$e" == "$match" ]] && return 1; done

- 	return 0

- }

- 

- debug "Check language coverage"

- set +f

- for i in `find $OPT_PATH -regex '.*/*\.\(t1\)?\(ttf\)?\(otf\)?\(ttc\)?\(pcf.*\)?\(pfa\)?'`; do

- set -f

- 	debug "$i"

- 	if test -f $i; then

- 		n=`basename $i`

- 		set +e

- 		contains "$n" "${OPT_EXCLUDE[@]}"

- 		ret=$?

- 		set -e

- 		if [ $ret -eq 1 ]; then

- 			debug "ignoring $i"

- 			continue

- 		fi

- 		if [ ${#OPT_INCLUDE[@]} -ne 0 ]; then

- 			set +e

- 			contains "$n" "${OPT_INCLUDE[@]}"

- 			ret=$?

- 			set -e

- 			if [ $ret -eq 0 ]; then

- 				debug "$i isn't targeted file"

- 				continue

- 			fi

- 		fi

- 		debug "  $i"

- 		res=`fc-validate -l $OPT_LANG $i`

- 		if echo $res | grep -q Missing; then

- 			echo "RESULT: FAIL: $i doesn't satisfy $OPT_LANG language coverage."

- 		else

- 			echo "RESULT: PASS: $i satisfy $OPT_LANG language coverage."

- 		fi

- 	fi

- done

- 

@@ -1,4 +0,0 @@ 

- ---

- 

- dependencies:

-   - role: str-common-init

@@ -1,40 +0,0 @@ 

- ---

- 

- - block:

-   - name: language coverage

-     script: run-lang-coverage-test --lang "{{ item }}" --path "{{ path_prefix }}" --artifactsdir "{{ remote_artifacts }}" {{ "" if coverage.values is not defined or coverage[item].name is not defined else "--name " + coverage[item].name }} {{ "" if coverage.values is not defined or coverage[item].exclude is not defined else '--exclude "' + (coverage[item].exclude | join('" --exclude "')) + '"'}} {{ "" if coverage.values is not defined or coverage[item].include is not defined else '--include "' + (coverage[item].include | join('" --include "')) + '"'}}

-     with_items:

-     - "{{ coverage if coverage.keys is not defined else coverage.keys()|list }}"

-   - name: generic family assignment

-     when: families is defined

-     script: run-family-test --lang {{ item.lang }} --family '{{ item.family }}' --alias {{ item.alias }} --artifactsdir {{ remote_artifacts }} --package {{ package if item.package is not defined else item.package }}

-     with_items:

-     - "{{ families }}"

- 

-   - name: Check the results

-     shell: |

-       log="{{ remote_artifacts }}/test.log"

-       if [ ! -f "$log" ]; then

-           echo ERROR

-           echo "Test results not found." 1>&2

-       elif grep ^ERROR "$log" 1>&2; then

-           echo ERROR

-       elif grep ^FAIL "$log" 1>&2; then

-           echo FAIL

-       elif grep -q ^PASS "$log"; then

-           echo PASS

-       else

-           echo ERROR

-           echo "No test results found." 1>&2

-       fi

-     register: test_results

- 

-   - name: Set role result

-     set_fact:

-       role_result: "{{ test_results.stdout }}"

-       role_message: "{{ test_results.stderr|d('test execution error.') }}"

-       role_result_failed: "{{ test_results.stdout != 'PASS' }}"

-       role_result_msg: "{{ test_results.stderr|d('test execution error.') }}"

- 

-   - include_role:

-       name: str-common-final

file modified
+5 -21

@@ -1,24 +1,8 @@ 

  - hosts: localhost

    tags:

    - classic

-   roles:

-   - role: custom-test-fonts

-     required_packages:

-     - vlgothic-fonts

-     - vlgothic-p-fonts

-     path_prefix: /usr/share/fonts/vlgothic

-     coverage:

-     - ja

-     families:

-     - lang: ja

-       alias: sans-serif

-       family: VL Gothic

-       package: vlgothic-fonts

-     - lang: ja

-       alias: monospace

-       family: VL Gothic

-       package: vlgothic-fonts

-     - lang: ja

-       alias: sans-serif

-       family: VL PGothic

-       package: vlgothic-p-fonts

+   tasks:

+   - block:

+     - shell: git submodule update --init

+ 

+ - import_playbook: fonts_playbook.yml