Skip to content

Commit

Permalink
Merge branch 'master' into PMP-Non_rigid_registration-GF
Browse files Browse the repository at this point in the history
  • Loading branch information
soesau authored Oct 2, 2024
2 parents 028b90e + 2ca0e52 commit 0149af8
Show file tree
Hide file tree
Showing 138 changed files with 3,038 additions and 2,107 deletions.
205 changes: 135 additions & 70 deletions .github/workflows/build_doc.yml
Original file line number Diff line number Diff line change
@@ -1,56 +1,115 @@
name: Documentation
name: Build Documentation

on:
workflow_dispatch:
inputs:
pr_number:
description: 'Pull request number for which the documentation should be built'
type: number
required: true
doc_version:
description: 'Version number of the documentation build'
type: string
required: true
force_build:
description: 'Force the build of the documentation'
type: boolean
required: false
default: false

issue_comment:
types: [created]
types: [created]

env:
author_association: ${{ github.event.comment.author_association }}
comment_body: ${{ github.event.comment.body }}

permissions:
contents: read # to fetch code (actions/checkout)

jobs:
build:
pre_build_checks:
runs-on: ubuntu-latest
name: Trigger the build?
outputs:
trigger_build: ${{ steps.get_doc_version.outputs.result && steps.get_doc_version.outputs.result != '' }}
force_build: ${{ steps.check_comment_body.outputs.force_build }}
pr_number: ${{ steps.get_pr_number.outputs.pr_number }}
doc_version: ${{ steps.get_doc_version.outputs.result }}
steps:
- name: Display inputs
run: |
echo "pr_number=${{ inputs.pr_number || github.event.issue.number }}"
echo "doc_version=${{ inputs.doc_version }}"
echo "force_build=${{ inputs.force_build || startsWith(env.comment_body, '/force-build:') }}"
- name: Check comment body
id: check_comment_body
env:
trigger_build: ${{ inputs && inputs.pr_number || startsWith(env.comment_body, '/build:') || startsWith(env.comment_body, '/force-build:') }}
force_build: ${{ inputs && inputs.force_build || startsWith(env.comment_body, '/force-build:') }}
if: inputs.pr_number || startsWith(env.comment_body, '/build:') || startsWith(env.comment_body, '/force-build:')
run: |
if [ "${trigger_build}" = "false" ]; then
echo "No build requested"
exit 1
fi
echo "force_build=${force_build}" >> $GITHUB_OUTPUT
echo "trigger_build=${trigger_build}" >> $GITHUB_OUTPUT
- name: Check permissions
if: ( steps.check_comment_body.outputs.trigger_build || false ) && (inputs.pr_number || env.author_association == 'OWNER' || env.author_association == 'MEMBER')
run: echo "Authorized"

- name: No permissions
if: ( steps.check_comment_body.outputs.trigger_build || false ) && (! inputs.pr_number && env.author_association != 'OWNER' && env.author_association != 'MEMBER' )
run: |
echo 'ERROR: User ${{ github.actor }} is not allowed to trigger the build of the documentation with /build:* or /force-build:*'
exit 1
- name: Get PR number
if: ( steps.check_comment_body.outputs.trigger_build || false )
id: get_pr_number
env:
pr_number: ${{ inputs.pr_number || github.event.issue.number }}
run: echo "pr_number=$pr_number" >> $GITHUB_OUTPUT

- name: Get doc version
if: ( steps.check_comment_body.outputs.trigger_build || false )
uses: actions/github-script@v7
id: get_doc_version
with:
result-encoding: string
script: |
if ( context.payload.input && context.payload.inputs.doc_version ) {
return context.payload.inputs.doc_version
}
const body = context.payload.comment.body
const re = /\/(force-)?build:(\w+)\s*/;
if(re.test(body)) {
const res = re.exec(body)
return res[2]
}
throw new Error('No version found')
build_doc:
name: |
${{ format('{0}: Build Documentation version "{1}"', github.actor, needs.pre_build_checks.outputs.doc_version) }}
needs: pre_build_checks
permissions:
contents: read # to fetch code (actions/checkout)
pull-requests: write # to create comment

runs-on: ubuntu-latest
env:
force_build: ${{ needs.pre_build_checks.outputs.force_build }}
pr_number: ${{ needs.pre_build_checks.outputs.pr_number }}
doc_version: ${{ needs.pre_build_checks.outputs.doc_version }}
if: ${{ fromJSON(needs.pre_build_checks.outputs.trigger_build || false) }}
steps:
- uses: actions/github-script@v7
id: get_round
with:
result-encoding: string
script: |
const asso = context.payload.comment.author_association
if(asso == 'OWNER' || asso == 'MEMBER') {
const body = context.payload.comment.body
if(body.includes("build:")) {
const re = /\/(force-)?build:(\w+)\s*/;
if(re.test(body)){
const res = re.exec(body)
if(body.includes("force-")) {
return res[2]+":yes"
}
else{
return res[2]+":no"
}
}
}
}
return 'stop'
- uses: actions/github-script@v7
if: steps.get_round.outputs.result != 'stop'
id: get_pr_number
with:
result-encoding: string
script: |
//get pullrequest url
const pr_number = context.payload.issue.number
return pr_number

- name: Emoji-comment
if: github.event_name == 'issue_comment'
continue-on-error: true
uses: actions/github-script@v7
if: steps.get_round.outputs.result != 'stop'
with:
script: |
github.rest.reactions.createForIssueComment({
Expand All @@ -62,17 +121,23 @@ jobs:
- uses: actions/checkout@v4
name: "checkout branch"
if: steps.get_round.outputs.result != 'stop'
with:
repository: ${{ github.repository }}
ref: refs/pull/${{ steps.get_pr_number.outputs.result }}/merge
fetch-depth: 2
repository: ${{ github.repository }}
ref: refs/pull/${{ env.pr_number }}/head
fetch-depth: 0

- name: install dependencies
if: steps.get_round.outputs.result != 'stop'
- name: Install dependencies
run: |
set -x
sudo apt-get update && sudo apt-get install -y graphviz ssh bibtex2html
# Install Github CLI `gh`
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y))
sudo mkdir -p -m 755 /etc/apt/keyrings
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt-get update && sudo apt-get install -y gh cmake graphviz ssh bibtex2html
sudo pip install lxml
sudo pip install pyquery
wget --no-verbose -O doxygen_exe https://cgal.geometryfactory.com/~cgaltest/doxygen_1_9_6_patched/doxygen
Expand All @@ -81,69 +146,69 @@ jobs:
git config --global user.email "[email protected]"
git config --global user.name "cgaltest"
- name: configure all
if: steps.get_round.outputs.result != 'stop'
- name: CMake configuration of Documentation/doc
run: |
set -ex
mkdir -p build_doc && cd build_doc && cmake ../Documentation/doc
- name: Build and Upload Doc
- name: Build and upload Doc
id: build_and_run
if: steps.get_round.outputs.result != 'stop'
env:
GH_TOKEN: ${{ github.token }}
run: |
set -ex
PR_NUMBER=${{ steps.get_pr_number.outputs.result }}
TMP_ROUND=${{ steps.get_round.outputs.result }}
ROUND=$(echo $TMP_ROUND | cut -d ":" -f 1)
force=$(echo $TMP_ROUND | cut -d ":" -f 2)
wget --no-verbose cgal.github.io -O tmp.html
if ! egrep -q "\/$PR_NUMBER\/$ROUND" tmp.html || [ "$force" = "yes" ]; then
PR_NUMBER=$pr_number
ROUND=$doc_version
force=$force_build
wget --no-verbose cgal.github.io -O index.html
if ! egrep -qF "/$PR_NUMBER/$ROUND" index.html || [ "$force" = "yes" ]; then
#list impacted packages
LIST_OF_PKGS=$(git diff --name-only HEAD^1 HEAD |cut -s -d/ -f1 |sort -u | xargs -I {} echo {} && ls -d {}/package_info 2>/dev/null |cut -d/ -f1 |egrep -v Installation||true)
LIST_OF_PKGS=$(git diff --name-only origin/master...HEAD |cut -s -d/ -f1 |sort -u | xargs -I {} echo {} && ls -d {}/package_info 2>/dev/null |cut -d/ -f1 |egrep -v Installation||true)
if [ "$LIST_OF_PKGS" = "" ]; then
echo "DoxygenError=No package affected." >> $GITHUB_OUTPUT
exit 1
fi
for p in $LIST_OF_PKGS; do
if [ -f $p/doc/$p/dependencies ]; then
LIST_OF_PKGS="$LIST_OF_PKGS $(cat $p/doc/$p/dependencies)"
fi
done
LIST_OF_PKGS=$(echo $LIST_OF_PKGS | tr ' ' '\n' | sort -u)
cd build_doc && make -j$(nproc) doc
make -j$(nproc) doc_with_postprocessing 2>tmp.log
if [ -s tmp.log ]; then
content=`cat ./tmp.log`
make -j$(nproc) doc_with_postprocessing 2>build.log
if [ -s build.log ]; then
delimiter="$(openssl rand -hex 8)"
echo "DoxygenError<<${delimiter}" >> "${GITHUB_OUTPUT}"
cat tmp.log >> "${GITHUB_OUTPUT}"
cat build.log >> "${GITHUB_OUTPUT}"
echo "${delimiter}" >> "${GITHUB_OUTPUT}"
exit 1
fi
cd ..
git clone https://CGAL:${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}@github.com/CGAL/cgal.github.io.git
mkdir -p cgal.github.io/${PR_NUMBER}/$ROUND
rm cgal.github.io/${PR_NUMBER}/$ROUND/* -rf
for f in $LIST_OF_PKGS
for f in $LIST_OF_PKGS Manual
do
if [ -d ./build_doc/doc_output/$f ]; then
cp -r ./build_doc/doc_output/$f ./cgal.github.io/${PR_NUMBER}/$ROUND
fi
done
cp -r ./build_doc/doc_output/Manual ./cgal.github.io/${PR_NUMBER}/$ROUND
cd ./cgal.github.io
egrep -v " ${PR_NUMBER}\." index.html > tmp.html || true
echo "<li><a href=https://cgal.github.io/${PR_NUMBER}/$ROUND/Manual/index.html>Manual for PR ${PR_NUMBER} ($ROUND).</a></li>" >> ./tmp.html
mv tmp.html index.html
git add ${PR_NUMBER}/$ROUND index.html && git commit -q --amend -m "base commit" && git push -q -f -u origin master
echo "<li><a href=https://cgal.github.io/${PR_NUMBER}/$ROUND/Manual/index.html>Manual for PR ${PR_NUMBER} ($ROUND).</a></li>" >> ./index.html
./cleanup.bash
git add ${PR_NUMBER}/$ROUND index.html && git commit -q --amend -m "sole commit" && git push -q -f -u origin master
else
echo "DoxygenError=This round already exists. Overwrite it with /force-build." >> $GITHUB_OUTPUT
exit 1
fi
- name: Post address
uses: actions/github-script@v7
if: ${{ success() && steps.get_round.outputs.result != 'stop' }}
if: ${{ success() }}
with:
script: |
const tmp_round = "${{ steps.get_round.outputs.result }}";
const id = tmp_round.indexOf(":");
const round = tmp_round.substring(0,id);
const address = "The documentation is built. It will be available, after a few minutes, here: https://cgal.github.io/${{ steps.get_pr_number.outputs.result }}/"+round+"/Manual/index.html"
const round = "${{ env.doc_version }}"
const address = "The documentation is built. It will be available, after a few minutes, here: https://cgal.github.io/${{ env.pr_number }}/"+round+"/Manual/index.html"
github.rest.issues.createComment({
owner: "CGAL",
repo: "cgal",
Expand All @@ -155,7 +220,7 @@ jobs:
env:
ERRORMSG: ${{steps.build_and_run.outputs.DoxygenError}}
uses: actions/github-script@v7
if: ${{ failure() && steps.get_round.outputs.result != 'stop' }}
if: ${{ failure() }}
with:
script: |
const error = process.env.ERRORMSG
Expand Down
16 changes: 11 additions & 5 deletions .github/workflows/delete_doc.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
name: Documentation Removal

on:
workflow_dispatch:
inputs:
PR_NUMBER:
description: 'Pull request number for which the documentation should be removed'
type: number
required: true
pull_request_target:
types: [closed, removed, workflow_dispatch]
types: [closed]
permissions:
contents: read

jobs:
build:

delete_doc:
permissions:
contents: write # for Git to git push
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: delete directory
- name: delete directory ${{ github.event.inputs.PR_NUMBER || github.event.pull_request.number }}/ in cgal.github.io
env:
PR_NUMBER: ${{ github.event.inputs.PR_NUMBER || github.event.pull_request.number }}
run: |
set -x
git config --global user.email "[email protected]"
git config --global user.name "cgaltest"
git clone https://CGAL:${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}@github.com/CGAL/cgal.github.io.git
PR_NUMBER=$(python -c "import json; import os; y = json.load(open(os.environ['GITHUB_EVENT_PATH'])); print(y[\"number\"])")
cd cgal.github.io/
egrep -v " ${PR_NUMBER}\." index.html > tmp.html || true
if [ -n "$(diff -q ./index.html ./tmp.html)" ]; then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ void test_algebraic_structure_intern(
//commutative
assert(a+b+c==c+b+a);
assert(a*b*c==c*b*a);
//distributiv
//distributive
assert((a-b)*c==a*c-b*c);
assert((a+b)*c==a*c+b*c);
//binom
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,10 @@ void CurveInputMethod::beginInput_()

static inline void clearPainterPath(QPainterPath& ppath)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0))
ppath.clear();
#else
ppath = {};
#endif
}


void CurveInputMethod::reset()
{
this->resetInput();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,7 @@ void GridGraphicsItem::setSpacing(int spacing_)
static inline qreal
horizontalAdvance(const QFontMetrics& fm, const QString& text)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
return fm.horizontalAdvance(text);
#else
return fm.boundingRect(text).width();
#endif
}

void GridGraphicsItem::paint(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Input is based on the curves and points indexes from intersect.pt
# intersect.xcv. The first two numbers are the numbers of the input curves
# to be intersected. After that there is the number of intesections and
# to be intersected. After that there is the number of intersections and
# 2-3 numbers representing each intersection. Meaning, the input is of the form:
# intersect <id of 1st x-curve> <id of 2nd x-curve> \
# <expected number of intersections> [<type of intersection> \
Expand Down
4 changes: 2 additions & 2 deletions BGL/examples/BGL_OpenMesh/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ find_package(CGAL REQUIRED)

find_package(OpenMesh)
if(OpenMesh_FOUND)
include(UseOpenMesh)
include(CGAL_OpenMesh_support)
create_single_source_cgal_program("TriMesh.cpp")
target_link_libraries(TriMesh PRIVATE ${OPENMESH_LIBRARIES})
target_link_libraries(TriMesh PRIVATE CGAL::OpenMesh_support)
else()
message("NOTICE: This project requires OpenMesh and will not be compiled.")
endif()
4 changes: 2 additions & 2 deletions BGL/examples/BGL_polyhedron_3/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ create_single_source_cgal_program("copy_polyhedron.cpp")

find_package(OpenMesh QUIET)
if(OpenMesh_FOUND)
target_link_libraries(copy_polyhedron PRIVATE ${OPENMESH_LIBRARIES})
target_compile_definitions(copy_polyhedron PRIVATE -DCGAL_USE_OPENMESH)
include(CGAL_OpenMesh_support)
target_link_libraries(copy_polyhedron PRIVATE CGAL::OpenMesh_support)
else()
message(STATUS "NOTICE: The example 'copy_polyhedron' will not use OpenMesh.")
endif()
Expand Down
Loading

0 comments on commit 0149af8

Please sign in to comment.