├── .gitignore ├── Dockerfile ├── Jenkinsfile ├── bla.html ├── captain.yml ├── core ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── jotschi │ │ └── test │ │ └── DemoRunner.java │ └── test │ └── java │ └── com │ └── gentics │ └── tests │ ├── AbstractTest.java │ ├── BlaIntegrationTest.java │ ├── NonAbstractTest.java │ ├── Simple10Test.java │ ├── Simple11Test.java │ ├── Simple12Test.java │ ├── Simple13Test.java │ ├── Simple14Test.java │ ├── Simple15Test.java │ ├── Simple16Test.java │ ├── Simple17Test.java │ ├── Simple18Test.java │ ├── Simple19Test.java │ ├── Simple1Test.java │ ├── Simple20Test.java │ ├── Simple21Test.java │ ├── Simple22Test.java │ ├── Simple23Test.java │ ├── Simple24Test.java │ ├── Simple2Test.java │ ├── Simple3Test.java │ ├── Simple4Test.java │ ├── Simple5Test.java │ ├── Simple6Test.java │ ├── Simple7Test.java │ ├── Simple8Test.java │ ├── Simple9Test.java │ └── SimpleTest.java ├── pom.xml ├── src └── main │ └── changelog │ ├── 7b1f1e4e-1dcf-11e6-b6ba-3e1d05defe79.bugfix.adoc │ └── 8b1f1e4e-1dcf-11e6-b6ba-3e1d05defe78.bugfix.adoc └── template.html /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | .classpath 3 | .project 4 | .settings 5 | commit 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM java:openjdk-8-jre 2 | 3 | RUN apt-get update --quiet --quiet \ 4 | && apt-get install --quiet --quiet --no-install-recommends lsof \ 5 | && rm -rf /var/lib/apt/lists/* 6 | 7 | EXPOSE 8080 7474 8 | 9 | ADD ./core/target/maven*jar /test/release-test.jar 10 | WORKDIR /test 11 | 12 | RUN mkdir /data 13 | RUN ln -s /data /test/data 14 | VOLUME /data 15 | 16 | CMD [ "java", "-jar" , "release-test.jar" ] 17 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | 2 | properties([ 3 | parameters([ 4 | booleanParam(name: 'skipTests', defaultValue: false, description: "Whether to skip the unit tests"), 5 | booleanParam(name: 'skipDocker', defaultValue: false, description: "Whether to skip the docker build.") 6 | ]) 7 | ]) 8 | 9 | node("jenkins-slave") { 10 | 11 | stage("Checkout") { 12 | checkout scm 13 | stash includes: '**', name: 'project' 14 | } 15 | 16 | stage("Set Version") { 17 | def originalV = version(); 18 | def major = originalV[1]; 19 | def minor = originalV[2]; 20 | def patch = Integer.parseInt(originalV[3]) + 1; 21 | def v = "${major}.${minor}.${patch}" 22 | if (v) { 23 | echo "Building version ${v}" 24 | } 25 | sh "mvn -B versions:set -DgenerateBackupPoms=false -DnewVersion=${v}" 26 | sh 'git add .' 27 | sh "git commit -m 'Raise version'" 28 | sh "git tag v${v}" 29 | } 30 | 31 | stage("Test") { 32 | if (Boolean.valueOf(params.skipTests)) { 33 | echo "Skipped" 34 | } else { 35 | def splits = splitTests parallelism: [$class: 'CountDrivenParallelism', size: 10], generateInclusions: true 36 | def branches = [:] 37 | for (int i = 0; i < splits.size(); i++) { 38 | def current = i 39 | def split = splits[i] 40 | branches["split${i}"] = { 41 | node("jenkins-slave") { 42 | echo "Preparing slave environment for chunk ${current}" 43 | unstash 'project' 44 | writeFile file: (split.includes ? 'inclusions.txt' : 'exclusions.txt'), text: split.list.join("\n") 45 | writeFile file: (split.includes ? 'exclusions.txt' : 'inclusions.txt'), text: '' 46 | try { 47 | sh "mvn -B clean test -Dmaven.test.failure.ignore" 48 | } finally { 49 | step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/*.xml']) 50 | } 51 | } 52 | } 53 | } 54 | parallel branches 55 | } 56 | } 57 | 58 | stage("Release Build") { 59 | sshagent(['git']) { 60 | sh "mvn -B -DskipTests clean deploy" 61 | sh "git push origin " + env.BRANCH_NAME 62 | sh "git push origin v${v}" 63 | } 64 | } 65 | 66 | stage("Docker Build") { 67 | if (Boolean.valueOf(params.skipDocker)) { 68 | echo "Skipped" 69 | } else { 70 | sh "captain build" 71 | sh "captain push" 72 | } 73 | } 74 | } 75 | 76 | def version() { 77 | def matcher = readFile('pom.xml') =~ '(\\d*)\\.(\\d*)\\.(\\d*)(-SNAPSHOT)*' 78 | matcher ? matcher[0] : null 79 | } 80 | -------------------------------------------------------------------------------- /bla.html: -------------------------------------------------------------------------------- 1 |

Changelog

2 | -------------------------------------------------------------------------------- /captain.yml: -------------------------------------------------------------------------------- 1 | release-test: 2 | build: Dockerfile 3 | image: registry.office/release-test 4 | pre: 5 | - echo "Preparing release-test" 6 | post: 7 | - echo "Finished release-test" 8 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /core/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | maven-release-workflow-core 6 | jar 7 | 8 | 9 | com.gentics.test 10 | maven-release-workflow-test 11 | 1.0.3 12 | 13 | 14 | 15 | 16 | junit 17 | junit 18 | 4.12 19 | test 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | exclusions 29 | 30 | 31 | ../exclusions.txt 32 | 33 | 34 | 35 | 36 | 37 | maven-surefire-plugin 38 | 39 | ../exclusions.txt 40 | 41 | 42 | 43 | 44 | 45 | 46 | 48 | inclusions 49 | 50 | 51 | ../inclusions.txt 52 | 53 | 54 | 55 | 56 | 57 | maven-surefire-plugin 58 | 59 | ../inclusions.txt 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | org.apache.maven.plugins 71 | maven-shade-plugin 72 | 2.3 73 | 74 | 75 | 76 | package 77 | 78 | shade 79 | 80 | 81 | 82 | 83 | *:* 84 | 85 | META-INF/*.SF 86 | META-INF/*.DSA 87 | META-INF/*.RSA 88 | 89 | 90 | 91 | 92 | 94 | de.jotschi.test.DemoRunner 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | org.apache.maven.plugins 103 | maven-surefire-plugin 104 | 2.14 105 | 106 | ${surefire.forkcount} 107 | false 108 | 109 | 1 110 | 1 111 | 2 112 | true 113 | false 114 | 1800 115 | ${JAVA_1_8_HOME}/bin/java 116 | 118 | 119 | **/*AbstractTest.java 120 | **/*Abstract*Test.java 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /core/src/main/java/de/jotschi/test/DemoRunner.java: -------------------------------------------------------------------------------- 1 | package de.jotschi.test; 2 | 3 | public class DemoRunner { 4 | 5 | public static void main(String[] args) throws InterruptedException { 6 | System.out.println("Starting..."); 7 | Thread.sleep(5000); 8 | System.out.println("Done"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/AbstractTest.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.util.Scanner; 6 | 7 | import org.junit.Test; 8 | 9 | public abstract class AbstractTest { 10 | 11 | @Test 12 | public void testHostInfo() throws IOException, InterruptedException { 13 | String OS = System.getProperty("os.name").toLowerCase(); 14 | 15 | if (OS.indexOf("win") >= 0) { 16 | System.out.println("Windows computer name throguh env:\"" + System.getenv("COMPUTERNAME") + "\""); 17 | System.out.println("Windows computer name through exec:\"" + execReadToString("hostname") + "\""); 18 | } else { 19 | if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0) { 20 | System.out.println("Linux computer name throguh env:\"" + System.getenv("HOSTNAME") + "\""); 21 | System.out.println("Linux computer name through exec:\"" + execReadToString("hostname") + "\""); 22 | System.out.println("Linux computer name through /etc/hostname:\"" + execReadToString("cat /etc/hostname") + "\""); 23 | } 24 | } 25 | Thread.sleep(10000); 26 | 27 | } 28 | 29 | @Test 30 | public void testName1() throws Exception { 31 | Thread.sleep(10000); 32 | } 33 | 34 | @Test 35 | public void testName2() throws Exception { 36 | Thread.sleep(10000); 37 | } 38 | 39 | @Test 40 | public void testName3() throws Exception { 41 | Thread.sleep(10000); 42 | } 43 | 44 | public static String execReadToString(String execCommand) throws IOException { 45 | Process proc = Runtime.getRuntime().exec(execCommand); 46 | try (InputStream stream = proc.getInputStream()) { 47 | try (Scanner s = new Scanner(stream).useDelimiter("\\A")) { 48 | return s.hasNext() ? s.next() : ""; 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/BlaIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class BlaIntegrationTest { 6 | @Test 7 | public void testName() throws Exception { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/NonAbstractTest.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import static org.junit.Assert.*; 4 | 5 | import org.junit.Test; 6 | 7 | public class NonAbstractTest { 8 | 9 | @Test 10 | public void testName() throws Exception { 11 | fail("This test should not even run!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple10Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple10Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple11Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple11Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple12Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple12Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple13Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple13Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple14Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple14Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple15Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple15Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple16Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple16Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple17Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple17Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple18Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple18Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple19Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple19Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple1Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple1Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple20Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple20Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple21Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple21Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple22Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple22Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple23Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple23Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple24Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple24Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple2Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple2Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple3Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple3Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple4Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple4Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple5Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple5Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple6Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple6Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple7Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple7Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple8Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple8Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/Simple9Test.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import org.junit.Test; 4 | 5 | public class Simple9Test extends AbstractTest { 6 | 7 | @Test 8 | public void testOk() throws Exception { 9 | 10 | } 11 | 12 | @Test 13 | public void testFailing() throws Exception { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/gentics/tests/SimpleTest.java: -------------------------------------------------------------------------------- 1 | package com.gentics.tests; 2 | 3 | import static org.junit.Assert.fail; 4 | 5 | import org.junit.Test; 6 | 7 | public class SimpleTest extends AbstractTest { 8 | 9 | @Test 10 | public void testOk() throws Exception { 11 | 12 | } 13 | 14 | @Test 15 | public void testFailing() throws Exception { 16 | fail("Dummy failure message"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | com.gentics.test 4 | maven-release-workflow-test 5 | 1.0.3 6 | pom 7 | 8 | 9 | core 10 | 11 | 12 | 13 | 8 14 | 15 | 16 | 17 | 18 | 19 | org.codehaus.mojo 20 | versions-maven-plugin 21 | 2.1 22 | 23 | 24 | org.codehaus.mojo 25 | exec-maven-plugin 26 | 1.5.0 27 | false 28 | 29 | 30 | changelog-generation 31 | 32 | exec 33 | 34 | package 35 | 36 | 37 | 38 | changelog2html 39 | 40 | -t 41 | ${project.basedir}/template.html 42 | -o 43 | ${project.basedir}/target/changelog.html 44 | ${project.basedir}/src/main/changelog 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | org.apache.maven.plugins 53 | maven-compiler-plugin 54 | 2.3.2 55 | 56 | 1.8 57 | 1.8 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | lan.releases 67 | Gentics Internal Public Repository Stage 68 | http://artifactory.office/repository/lan.releases 69 | 70 | 71 | lan.snapshots 72 | Gentics Public Snapshots Repository 73 | http://artifactory.office/repository/lan.snapshots 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /src/main/changelog/7b1f1e4e-1dcf-11e6-b6ba-3e1d05defe79.bugfix.adoc: -------------------------------------------------------------------------------- 1 | Fixed issue in file bla bla 2 | 3 | > Block quotes are 4 | > written like so. 5 | > 6 | > They can span multiple paragraphs, 7 | > if you like. 8 | -------------------------------------------------------------------------------- /src/main/changelog/8b1f1e4e-1dcf-11e6-b6ba-3e1d05defe78.bugfix.adoc: -------------------------------------------------------------------------------- 1 | Fixed issue in file bla bla 2 | 3 | > Block quotes are 4 | > written like so. 5 | > 6 | > They can span multiple paragraphs, 7 | > if you like. 8 | -------------------------------------------------------------------------------- /template.html: -------------------------------------------------------------------------------- 1 |

{{ pagename|title }}

2 | --------------------------------------------------------------------------------