├── src ├── DelphiCI.dpr ├── MyClass │ └── myClass.pas ├── View │ ├── main.dfm │ └── main.pas ├── Test │ ├── TestmyClass.pas │ ├── DelphiCITests.dpr │ └── DelphiCITests.dproj ├── ProjectGroup1.groupproj └── DelphiCI.dproj ├── .gitignore ├── sonar-project.properties ├── .gitlab-ci.yml └── README.md /src/DelphiCI.dpr: -------------------------------------------------------------------------------- 1 | program DelphiCI; 2 | 3 | uses 4 | Vcl.Forms, 5 | main in 'View\main.pas' {Form1}, 6 | myClass in 'MyClass\myClass.pas'; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.MainFormOnTaskbar := True; 13 | Application.CreateForm(TForm1, Form1); 14 | Application.Run; 15 | end. 16 | -------------------------------------------------------------------------------- /src/MyClass/myClass.pas: -------------------------------------------------------------------------------- 1 | unit myClass; 2 | 3 | interface 4 | 5 | type 6 | TMyClass = class 7 | class function ShowSuccessfullMessage: String; 8 | end; 9 | 10 | implementation 11 | 12 | { MyClass } 13 | 14 | 15 | 16 | class function TMyClass.ShowSuccessfullMessage: String; 17 | begin 18 | Result := 'Hello from awesome stack - Gitlab-CI and Dockered-Delphi compilation'; 19 | end; 20 | 21 | end. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | modules/ 2 | dist/ 3 | static/ 4 | **/Win32/ 5 | **/Win64/ 6 | **/Linux64/ 7 | **/__history/ 8 | **/__recovery/ 9 | src/*.~* 10 | *.res 11 | *.exe 12 | *.dll 13 | *.bpl 14 | *.bpi 15 | *.dcp 16 | *.so 17 | *.apk 18 | *.drc 19 | *.map 20 | *.dres 21 | *.rsm 22 | *.tds 23 | *.dcu 24 | *.lib 25 | *.a 26 | *.o 27 | *.ocx 28 | *.local 29 | *.identcache 30 | *.projdata 31 | *.tvsconfig 32 | *.dsk 33 | *.dcu 34 | *.exe 35 | *.so 36 | *.~* 37 | *.a 38 | *.stat 39 | unittest/configuration.ini 40 | -------------------------------------------------------------------------------- /src/View/main.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 0 3 | Top = 0 4 | Caption = 'Form1' 5 | ClientHeight = 299 6 | ClientWidth = 635 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object Button1: TButton 17 | Left = 8 18 | Top = 16 19 | Width = 75 20 | Height = 25 21 | Caption = 'Button1' 22 | TabOrder = 0 23 | OnClick = Button1Click 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /src/Test/TestmyClass.pas: -------------------------------------------------------------------------------- 1 | unit TestmyClass; 2 | 3 | interface 4 | 5 | uses 6 | DUnitX.TestFramework; 7 | 8 | type 9 | 10 | [TestFixture] 11 | TMyTestObject = class(TObject) 12 | public 13 | [Test] 14 | procedure ShowSuccessfullMessage; 15 | end; 16 | 17 | implementation 18 | 19 | uses 20 | myClass; 21 | 22 | 23 | 24 | procedure TMyTestObject.ShowSuccessfullMessage; 25 | begin 26 | Assert.IsTrue(TMyClass.ShowSuccessfullMessage = 'Hello from awesome stack - Gitlab-CI and Dockered-Delphi compilation'); 27 | end; 28 | 29 | initialization 30 | 31 | TDUnitX.RegisterTestFixture(TMyTestObject); 32 | 33 | end. 34 | -------------------------------------------------------------------------------- /src/View/main.pas: -------------------------------------------------------------------------------- 1 | unit main; 2 | 3 | interface 4 | 5 | uses 6 | Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | Button1: TButton; 12 | procedure Button1Click(Sender: TObject); 13 | private 14 | 15 | public 16 | { Public declarations } 17 | end; 18 | 19 | var 20 | Form1: TForm1; 21 | 22 | implementation 23 | 24 | {$R *.dfm} 25 | 26 | 27 | uses 28 | myClass; 29 | 30 | 31 | 32 | procedure TForm1.Button1Click(Sender: TObject); 33 | begin 34 | ShowMessage(TMyClass.ShowSuccessfullMessage); 35 | end; 36 | 37 | end. 38 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # Required metadata 2 | sonar.host.url=http://10.0.75.1:9000 3 | sonar.projectKey=org.codehaus.sonar:simple-delphi-project 4 | sonar.projectName=DelphiCI 5 | sonar.projectVersion=1.0 6 | 7 | sonar.projectBaseDir=src/ 8 | sonar.sources=MyClass/. 9 | 10 | # Language, needed for SonarQube < 4.2 11 | sonar.language=delph 12 | 13 | # Desabilita validação de versopnamento git/svn 14 | sonar.scm.disabled=True 15 | 16 | # The build-wrapper output dir 17 | # sonar.cfamily.build-wrapper-output=/path/to/build-wrapper/output/dir 18 | 19 | # Optional comma-separated list of additional libraries folders (such as /usr/include) 20 | #sonar.cfamily.library.directories= 21 | 22 | # Optional specific predefined macros 23 | # sonar.cfamily.predefinedMacros=#define MY_MACRO(a) ((a)+1),#define DEBUG 24 | 25 | # Encoding of the source files 26 | sonar.sourceEncoding=UTF-8 27 | -------------------------------------------------------------------------------- /src/ProjectGroup1.groupproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {2017E574-4367-4D93-951C-6AF1B11694E2} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/Test/DelphiCITests.dpr: -------------------------------------------------------------------------------- 1 | program DelphiCITests; 2 | 3 | {$IFNDEF TESTINSIGHT} 4 | {$APPTYPE CONSOLE} 5 | {$ENDIF}{$STRONGLINKTYPES ON} 6 | 7 | 8 | uses 9 | System.SysUtils, 10 | {$IFDEF TESTINSIGHT} 11 | TestInsight.DUnitX, 12 | {$ENDIF } 13 | DUnitX.Loggers.Console, 14 | DUnitX.Loggers.Xml.NUnit, 15 | DUnitX.TestFramework, 16 | TestmyClass in 'TestmyClass.pas', 17 | myClass in '..\MyClass\myClass.pas'; 18 | 19 | var 20 | runner: ITestRunner; 21 | results: IRunResults; 22 | logger: ITestLogger; 23 | nunitLogger: ITestLogger; 24 | 25 | 26 | 27 | begin 28 | {$IFDEF TESTINSIGHT} 29 | TestInsight.DUnitX.RunRegisteredTests; 30 | exit; 31 | {$ENDIF} 32 | try 33 | ReportMemoryLeaksOnShutdown := True; 34 | // Check command line options, will exit if invalid 35 | TDUnitX.CheckCommandLine; 36 | // Create the test runner 37 | runner := TDUnitX.CreateRunner; 38 | // Tell the runner to use RTTI to find Fixtures 39 | runner.UseRTTI := True; 40 | // tell the runner how we will log things 41 | // Log to the console window 42 | logger := TDUnitXConsoleLogger.Create(True); 43 | runner.AddLogger(logger); 44 | // Generate an NUnit compatible XML File 45 | nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile); 46 | runner.AddLogger(nunitLogger); 47 | runner.FailsOnNoAsserts := False; // When true, Assertions must be made during tests; 48 | 49 | // Run tests 50 | results := runner.Execute; 51 | if not results.AllPassed then 52 | System.ExitCode := EXIT_ERRORS; 53 | 54 | {$IFNDEF CI} 55 | // We don't want this happening when running under CI. 56 | if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then 57 | begin 58 | System.Write('Done.. press key to quit.'); 59 | System.Readln; 60 | end; 61 | {$ENDIF} 62 | except 63 | on E: Exception do 64 | System.Writeln(E.ClassName, ': ', E.Message); 65 | end; 66 | 67 | end. 68 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | before_script: 2 | - $env:BDS="C:\Program Files (x86)\Embarcadero\Studio\17.0" 3 | - $env:BDSINCLUDE="C:\Program Files (x86)\Embarcadero\Studio\17.0\Include" 4 | - $env:BDSCOMMONDIR="C:\Users\Public\Documents\Embarcadero\Studio" 5 | - $env:FrameworkDir="C:\Windows\Microsoft.NET\Framework\v3.5" 6 | - $env:FrameworkVersion="" 7 | - $env:PATH=$env:FrameworkDir;"$env:BDS\bin";$env:PATH 8 | - $env:LANGDIR="EN" 9 | - $env:PLATFORM="" 10 | - $env:PlatformSDK="" 11 | 12 | stages: 13 | - test 14 | - analyze 15 | - build 16 | - deploy 17 | 18 | 19 | test: 20 | stage: test 21 | 22 | variables: 23 | ArtifactPath: 'src\Test\' 24 | ArtifactName: 'DelphiCITests' 25 | 26 | script: 27 | - echo building test project... 28 | - C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe /m /nologo $env:ArtifactPath$env:ArtifactName.dproj /target:Build /p:DCC_BuildAllUnits=true /p:"Config=Release" /p:"Platform=Win32" 29 | #- Invoke-Item .\$env:ArtifactPath$env:ArtifactName.exe 30 | - echo running tests... 31 | - .\src\Test\DelphiCITests.exe 32 | # Coverage report > dunitx-results.xml 33 | 34 | 35 | analyze: 36 | stage: analyze 37 | 38 | variables: 39 | SonarScanner: 'C:\Docker\sonar-scanner-3.2\bin\sonar-scanner.bat' 40 | 41 | script: 42 | - echo analizing code... 43 | - C:\Docker\sonar-scanner-3.2\bin\sonar-scanner.bat 44 | 45 | 46 | build: 47 | stage: build 48 | 49 | variables: 50 | ArtifactPath: 'src\' 51 | ArtifactName: 'DelphiCI' 52 | 53 | script: 54 | - echo building project... 55 | - C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe /m /nologo $env:ArtifactPath$env:ArtifactName.dproj /target:Build /p:DCC_BuildAllUnits=true /p:"Config=Release" /p:"Platform=Win32" 56 | 57 | artifacts: 58 | name: "$env:CI_PROJECT_NAME-$env:CI_JOB_ID" 59 | paths: 60 | - bin\\"$env:ArtifactName".exe 61 | when: always 62 | expire_in: 2 week 63 | 64 | 65 | deploy: 66 | stage: deploy 67 | 68 | variables: 69 | ArtifactName: 'DelphiCI' 70 | 71 | dependencies: 72 | - build 73 | 74 | script: 75 | - echo deploying project... 76 | - Compress-Archive bin\\"$env:ArtifactName".exe bin\\"$env:ArtifactName".zip 77 | - $password = ConvertTo-SecureString -AsPlainText -Force -String 'AP7dyPrVGx4M2Aq9GaTc8tFqqTT' 78 | - $cred = New-Object Management.Automation.PSCredential ('admin', $password) 79 | - $ARTIFACT_SHA1_CHECKSUM=$(Get-FileHash -Algorithm SHA1 bin\\"$env:ArtifactName".zip).Hash 80 | - $HEADERS = @{"X-Checksum-SHA1"=$ARTIFACT_SHA1_CHECKSUM;}; 81 | - Invoke-RestMethod -Uri http://10.0.75.1:9700/artifactory/generic-local/build/$env:CI_PROJECT_NAME/$env:CI_JOB_ID/$env:ArtifactName.zip -InFile $env:ArtifactName.zip -Method PUT -Credential $cred 82 | 83 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![GitlabCI](https://gitlab.com/charoleizer/delphi-gitlab-ci-sample/badges/master/pipeline.svg?style=svg)](https://gitlab.com/charoleizer/delphi-gitlab-ci-sample/pipelines) 2 | 3 | 4 | # Gitlab-CI with Docker-Windows for Delphi Projects 5 | 6 | Pipelines: https://gitlab.com/charoleizer/delphi-gitlab-ci-sample/pipelines 7 | 8 | # Stack 9 | - Windows 10 v1089 as Host; 10 | - Delphi CE; 11 | - .NET Framework v3.5; 12 | - Docker Desktop 2.1.0.0 ; 13 | - Gitlab-Runner with Docker-Windows executor and .NET 3.5 image; 14 | - Sonarqube 5.6.7 ; 15 | - Sonar-Scanner 3.2 ; 16 | - JFrog Artifactory OSS; 17 | - Portainer; 18 | 19 | # Docker Images 20 | - .NET Framework: mcr.microsoft.com/dotnet/framework/runtime:3.5 (Windows) 21 | - Sonarqube with Delphi Plugin: charoleizer/sonarqube-delphi-5.6.7-alpine 22 | - JFrog Artifactory OSS: docker.bintray.io/jfrog/artifactory-oss 23 | - Portainer: portainer/portainer (Optional) 24 | 25 | # Flow 26 | - Download gitlab runner for Windows, register, install and start as service. [[?]](https://docs.gitlab.com/runner/install/windows.html); 27 | - It will create 2 Runners container, one for cache and another for build 28 | - Switch to Windows Containers on Docker Desktop. 29 | - Pull the .NET Framework image. This image will be used to create a container from Build Runner. [[?]](https://hub.docker.com/_/microsoft-dotnet-framework-runtime); 30 | - Bind the Delphi ./bin directory (C:\Program Files (x86)\Embarcadero\Studio\17.0\bin) with Build Runner Container. 31 | - Download Sonar-Scanner 3.2 and bind the scanner path with Build Runner Container. [[?]](https://github.com/SonarSource/sonar-scanner-cli/releases/tag/3.2.0.1227) 32 | - Switch to Linux Containers on Docker Desktop. 33 | - Create a Linux-Container with Sonarqube. This container use [SandroLuck's](https://github.com/SandroLuck/SonarDelphi) Plugin. [[?]](https://hub.docker.com/r/charoleizer/sonarqube-delphi-5.6.7-alpine) 34 | - Sonar Scanner need a property file to analyse the code. [[?]](https://github.com/charoleizer/delphi-gitlab-ci-sample/blob/master/sonar-project.properties) 35 | - Create a Linux-Container with Artifactory OSS. [[?]](https://jfrog.com/open-source/) 36 | - Switch to Windows Containers on Docker Desktop. 37 | 38 | # .gitlab-ci.yml 39 | - To know more about this file, [read it](https://docs.gitlab.com/ee/ci/quick_start/). 40 | - Take a look at the full [.gitlab-ci.yml](https://github.com/charoleizer/delphi-gitlab-ci-sample/blob/master/.gitlab-ci.yml) file 41 | 42 | #### Specificaly for this Delphi example, we will use this file to do 4 steps(stages): 43 | 44 | #### *test:* 45 | - Build the test project with MSBuild; 46 | - Run the Test binary output; 47 | - Save the result file for future coverage; 48 | 49 | #### *analyze:* 50 | - Run the sonar-scanner using sonar-project.properties configurations; 51 | 52 | #### *build* 53 | - Build the project with MSBuild; 54 | - Deploy the artifact temporarily; 55 | 56 | #### *deploy* 57 | - Take the build stage artifact, and compress it; 58 | - Set JFrog Artifactory OSS variables; 59 | - Upload the artifact by Artifactory rest API; 60 | 61 | # Curiosities 62 | 63 | #### *Why gitlab?* 64 | - Because Gitlab-CE and Gitlab-CI are free self-hosted tools. Maybe [Github Actions](https://github.com/features/actions) can change it. Waiting for Self-Hosted option. 65 | 66 | #### *Why is this project in github?* 67 | - Because github is the most famous repository and has a larger community 68 | 69 | #### *Why not create an image with Delphi?* 70 | - Because of Embarcadero's license 71 | -------------------------------------------------------------------------------- /src/Test/DelphiCITests.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {7A2D9948-1CB8-4824-ABE7-31D0124E3274} 4 | 18.1 5 | None 6 | True 7 | Release 8 | Win32 9 | 1 10 | Console 11 | DelphiCITests.dpr 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Base 34 | true 35 | 36 | 37 | true 38 | Cfg_1 39 | true 40 | true 41 | 42 | 43 | true 44 | Base 45 | true 46 | 47 | 48 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 49 | $(BDS)\Source\DUnit\src;$(DCC_UnitSearchPath) 50 | 1046 51 | DelphiCITests 52 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 53 | CONSOLE_TESTRUNNER;$(DCC_Define) 54 | . 55 | false 56 | false 57 | false 58 | false 59 | false 60 | 61 | 62 | DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;dbxcds;soapserver;FireDACODBCDriver;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage) 63 | 64 | 65 | 1033 66 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 67 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 68 | DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;frxe23;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;DbxDevartPostgreSQLDriver230;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;Intraweb;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;frxDB23;RESTBackendComponents;TeeUI;VCLRESTComponents;vclribbon;dbxcds;VclSmp;soapserver;adortl;FireDACODBCDriver;frxTee23;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;frx23;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage) 69 | 70 | 71 | DBXSqliteDriver;bindcompdbx;IndyIPCommon;RESTComponents;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;Intraweb;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;inetdb;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;TeeUI;VCLRESTComponents;vclribbon;dbxcds;VclSmp;soapserver;adortl;FireDACODBCDriver;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage) 72 | 73 | 74 | DEBUG;$(DCC_Define) 75 | true 76 | false 77 | true 78 | true 79 | true 80 | 81 | 82 | 1033 83 | None 84 | false 85 | 86 | 87 | false 88 | RELEASE;$(DCC_Define) 89 | 0 90 | 0 91 | 92 | 93 | 94 | MainSource 95 | 96 | 97 | 98 | 99 | Cfg_2 100 | Base 101 | 102 | 103 | Base 104 | 105 | 106 | Cfg_1 107 | Base 108 | 109 | 110 | 111 | Delphi.Personality.12 112 | Application 113 | 114 | 115 | 116 | DelphiCITests.dpr 117 | 118 | 119 | Microsoft Office XP Sample Automation Server Wrapper Components 120 | 121 | 122 | 123 | 124 | 125 | DelphiCITests.exe 126 | true 127 | 128 | 129 | 130 | 131 | true 132 | 133 | 134 | 135 | 136 | true 137 | 138 | 139 | 140 | 141 | true 142 | 143 | 144 | 145 | 146 | 1 147 | 148 | 149 | 1 150 | 151 | 152 | 153 | 154 | Contents\Resources 155 | 1 156 | 157 | 158 | 159 | 160 | classes 161 | 1 162 | 163 | 164 | 165 | 166 | Contents\MacOS 167 | 0 168 | 169 | 170 | 1 171 | 172 | 173 | Contents\MacOS 174 | 1 175 | 176 | 177 | 178 | 179 | 1 180 | 181 | 182 | 1 183 | 184 | 185 | 1 186 | 187 | 188 | 189 | 190 | res\drawable-xxhdpi 191 | 1 192 | 193 | 194 | 195 | 196 | library\lib\mips 197 | 1 198 | 199 | 200 | 201 | 202 | 0 203 | 204 | 205 | 1 206 | 207 | 208 | Contents\MacOS 209 | 1 210 | 211 | 212 | 1 213 | 214 | 215 | library\lib\armeabi-v7a 216 | 1 217 | 218 | 219 | 1 220 | 221 | 222 | 223 | 224 | 0 225 | 226 | 227 | Contents\MacOS 228 | 1 229 | .framework 230 | 231 | 232 | 233 | 234 | 1 235 | 236 | 237 | 1 238 | 239 | 240 | 1 241 | 242 | 243 | 244 | 245 | 1 246 | 247 | 248 | 1 249 | 250 | 251 | 1 252 | 253 | 254 | 255 | 256 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 257 | 1 258 | 259 | 260 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 261 | 1 262 | 263 | 264 | 265 | 266 | library\lib\x86 267 | 1 268 | 269 | 270 | 271 | 272 | 1 273 | 274 | 275 | 1 276 | 277 | 278 | 1 279 | 280 | 281 | 282 | 283 | 1 284 | 285 | 286 | 1 287 | 288 | 289 | 1 290 | 291 | 292 | 293 | 294 | library\lib\armeabi 295 | 1 296 | 297 | 298 | 299 | 300 | 0 301 | 302 | 303 | 1 304 | 305 | 306 | Contents\MacOS 307 | 1 308 | 309 | 310 | 311 | 312 | 1 313 | 314 | 315 | 1 316 | 317 | 318 | 1 319 | 320 | 321 | 322 | 323 | res\drawable-normal 324 | 1 325 | 326 | 327 | 328 | 329 | res\drawable-xhdpi 330 | 1 331 | 332 | 333 | 334 | 335 | res\drawable-large 336 | 1 337 | 338 | 339 | 340 | 341 | 1 342 | 343 | 344 | 1 345 | 346 | 347 | 1 348 | 349 | 350 | 351 | 352 | ../ 353 | 1 354 | 355 | 356 | ../ 357 | 1 358 | 359 | 360 | 361 | 362 | res\drawable-hdpi 363 | 1 364 | 365 | 366 | 367 | 368 | library\lib\armeabi-v7a 369 | 1 370 | 371 | 372 | 373 | 374 | Contents 375 | 1 376 | 377 | 378 | 379 | 380 | ../ 381 | 1 382 | 383 | 384 | 385 | 386 | 1 387 | 388 | 389 | 1 390 | 391 | 392 | 1 393 | 394 | 395 | 396 | 397 | res\values 398 | 1 399 | 400 | 401 | 402 | 403 | res\drawable-small 404 | 1 405 | 406 | 407 | 408 | 409 | res\drawable 410 | 1 411 | 412 | 413 | 414 | 415 | 1 416 | 417 | 418 | 1 419 | 420 | 421 | 1 422 | 423 | 424 | 425 | 426 | 1 427 | 428 | 429 | 430 | 431 | res\drawable 432 | 1 433 | 434 | 435 | 436 | 437 | 0 438 | 439 | 440 | 0 441 | 442 | 443 | Contents\Resources\StartUp\ 444 | 0 445 | 446 | 447 | 0 448 | 449 | 450 | 0 451 | 452 | 453 | 0 454 | 455 | 456 | 457 | 458 | library\lib\armeabi-v7a 459 | 1 460 | 461 | 462 | 463 | 464 | 0 465 | .bpl 466 | 467 | 468 | 1 469 | .dylib 470 | 471 | 472 | Contents\MacOS 473 | 1 474 | .dylib 475 | 476 | 477 | 1 478 | .dylib 479 | 480 | 481 | 1 482 | .dylib 483 | 484 | 485 | 486 | 487 | res\drawable-mdpi 488 | 1 489 | 490 | 491 | 492 | 493 | res\drawable-xlarge 494 | 1 495 | 496 | 497 | 498 | 499 | res\drawable-ldpi 500 | 1 501 | 502 | 503 | 504 | 505 | 0 506 | .dll;.bpl 507 | 508 | 509 | 1 510 | .dylib 511 | 512 | 513 | Contents\MacOS 514 | 1 515 | .dylib 516 | 517 | 518 | 1 519 | .dylib 520 | 521 | 522 | 1 523 | .dylib 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | False 536 | True 537 | False 538 | 539 | 540 | DUnit / Delphi Win32 541 | Console 542 | C:\Users\s202\Desktop\Workspace\dsv-delphi\delphi-ci-test2\src\DelphiCI.dproj 543 | 544 | 545 | 546 | 12 547 | 548 | 549 | 550 | 551 | 552 | -------------------------------------------------------------------------------- /src/DelphiCI.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {7A18D716-F644-4593-B1B0-3C5757D864CC} 4 | 18.1 5 | VCL 6 | DelphiCI.dpr 7 | True 8 | Release 9 | Win32 10 | 1 11 | Application 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Cfg_1 34 | true 35 | true 36 | 37 | 38 | true 39 | Base 40 | true 41 | 42 | 43 | true 44 | Cfg_2 45 | true 46 | true 47 | 48 | 49 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 50 | 1046 51 | DelphiCI 52 | $(BDS)\bin\delphi_PROJECTICON.ico 53 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 54 | ..\bin 55 | false 56 | false 57 | false 58 | false 59 | false 60 | 61 | 62 | true 63 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 64 | 1033 65 | DBXSqliteDriver;fmxase;RESTComponents;DBXInterBaseDriver;dxCoreRS23;vclactnband;dxPSdxLCLnkRS23;dxADOServerModeRS23;dxPSLnksRS23;frxe23;vclFireDAC;dxmdsRS23;cxDataRS23;svnui;DataSnapFireDAC;FireDACADSDriver;tethering;dxPSCoreRS23;dxSkinscxPCPainterRS23;dxDBXServerModeRS23;dxPScxGridLnkRS23;DatasnapConnectorsFreePascal;vcltouch;vcldb;bindcompfmx;svn;dxPScxCommonRS23;Intraweb;inetdb;FmxTeeUI;frxDBX23;dxServerModeRS23;FireDACIBDriver;cxLibraryRS23;fmx;fmxdae;cxPivotGridChartRS23;vclib;acntDX10;cxPageControlRS23;dxGDIPlusRS23;fsDB23;office2K;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;FireDACCommon;dxLayoutControlRS23;DataSnapConnectors;cxVerticalGridRS23;RESTBackendComponents;VCLRESTComponents;soapserver;frxTee23;cxGridRS23;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACMySQLDriver;FireDACCommonDriver;dxPScxPCProdRS23;DataSnapClient;fsADO23;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;dxPScxExtCommonRS23;IndySystem;dxSkinsCoreRS23;dxThemeRS23;dsnapcon;madExcept_;FireDACMSAccDriver;fmxFireDAC;vclimg;madBasic_;TeeDB;FireDAC;frxADO23;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;cxEditorsRS23;FireDACASADriver;fs23;FMXTee;soaprtl;DbxCommonDriver;ibxpress;cxPivotGridOLAPRS23;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;soapmidas;fmxobj;vclwinx;ibxbindings;rtl;madDisAsm_;DbxClientDriver;CustomIPTransport;vcldsnap;bindcomp;DigitalPersona;cxPivotGridRS23;appanalytics;dxPScxVGridLnkRS23;IndyIPClient;dxPScxTLLnkRS23;frxDB23;bindcompvcl;dxPScxPivotGridLnkRS23;TeeUI;vclribbon;dbxcds;VclSmp;adortl;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;acntDX10_R;dxComnRS23;DataSnapProviderClient;dsnapxml;dbrtl;cxExportRS23;IndyProtocols;frx23;inetdbxpress;DataSnapServerMidas;$(DCC_UsePackage) 66 | $(BDS)\bin\default_app.manifest 67 | 68 | 69 | DBXSqliteDriver;fmxase;RESTComponents;DBXInterBaseDriver;dxCoreRS23;vclactnband;dxPSdxLCLnkRS23;dxADOServerModeRS23;dxPSLnksRS23;vclFireDAC;dxmdsRS23;cxDataRS23;DataSnapFireDAC;FireDACADSDriver;tethering;dxPSCoreRS23;dxSkinscxPCPainterRS23;dxDBXServerModeRS23;dxPScxGridLnkRS23;DatasnapConnectorsFreePascal;vcltouch;vcldb;bindcompfmx;dxPScxCommonRS23;Intraweb;inetdb;FmxTeeUI;dxServerModeRS23;FireDACIBDriver;cxLibraryRS23;fmx;fmxdae;cxPivotGridChartRS23;vclib;cxPageControlRS23;dxGDIPlusRS23;office2K;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;FireDACCommon;dxLayoutControlRS23;DataSnapConnectors;cxVerticalGridRS23;RESTBackendComponents;VCLRESTComponents;soapserver;cxGridRS23;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACMySQLDriver;FireDACCommonDriver;dxPScxPCProdRS23;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;dxPScxExtCommonRS23;IndySystem;dxSkinsCoreRS23;dxThemeRS23;dsnapcon;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;cxEditorsRS23;FireDACASADriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;cxPivotGridOLAPRS23;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;soapmidas;fmxobj;vclwinx;ibxbindings;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;bindcomp;DigitalPersona;cxPivotGridRS23;appanalytics;dxPScxVGridLnkRS23;IndyIPClient;dxPScxTLLnkRS23;bindcompvcl;dxPScxPivotGridLnkRS23;TeeUI;vclribbon;dbxcds;VclSmp;adortl;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;dxComnRS23;DataSnapProviderClient;dsnapxml;dbrtl;cxExportRS23;IndyProtocols;inetdbxpress;DataSnapServerMidas;$(DCC_UsePackage) 70 | 71 | 72 | DEBUG;$(DCC_Define) 73 | true 74 | false 75 | true 76 | true 77 | true 78 | 79 | 80 | true 81 | 1033 82 | true 83 | true 84 | false 85 | 86 | 87 | false 88 | RELEASE;$(DCC_Define) 89 | 0 90 | 0 91 | 92 | 93 | true 94 | 1033 95 | true 96 | true 97 | 98 | 99 | 100 | MainSource 101 | 102 | 103 |
Form1
104 |
105 | 106 | 107 | Cfg_2 108 | Base 109 | 110 | 111 | Base 112 | 113 | 114 | Cfg_1 115 | Base 116 | 117 |
118 | 119 | Delphi.Personality.12 120 | Application 121 | 122 | 123 | 124 | DelphiCI.dpr 125 | 126 | 127 | Microsoft Office XP Sample Automation Server Wrapper Components 128 | 129 | 130 | 131 | 132 | 133 | DelphiCI.exe 134 | true 135 | 136 | 137 | 138 | 139 | DelphiCI.exe 140 | true 141 | 142 | 143 | 144 | 145 | 0 146 | .dll;.bpl 147 | 148 | 149 | 1 150 | .dylib 151 | 152 | 153 | Contents\MacOS 154 | 1 155 | .dylib 156 | 157 | 158 | 1 159 | .dylib 160 | 161 | 162 | 1 163 | .dylib 164 | 165 | 166 | 167 | 168 | Contents\Resources 169 | 1 170 | 171 | 172 | 173 | 174 | classes 175 | 1 176 | 177 | 178 | 179 | 180 | Contents\MacOS 181 | 0 182 | 183 | 184 | 1 185 | 186 | 187 | Contents\MacOS 188 | 1 189 | 190 | 191 | 192 | 193 | 1 194 | 195 | 196 | 1 197 | 198 | 199 | 1 200 | 201 | 202 | 203 | 204 | res\drawable-xxhdpi 205 | 1 206 | 207 | 208 | 209 | 210 | library\lib\mips 211 | 1 212 | 213 | 214 | 215 | 216 | 0 217 | 218 | 219 | 1 220 | 221 | 222 | Contents\MacOS 223 | 1 224 | 225 | 226 | 1 227 | 228 | 229 | library\lib\armeabi-v7a 230 | 1 231 | 232 | 233 | 1 234 | 235 | 236 | 237 | 238 | 0 239 | 240 | 241 | Contents\MacOS 242 | 1 243 | .framework 244 | 245 | 246 | 247 | 248 | 1 249 | 250 | 251 | 1 252 | 253 | 254 | 1 255 | 256 | 257 | 258 | 259 | 1 260 | 261 | 262 | 1 263 | 264 | 265 | 1 266 | 267 | 268 | 269 | 270 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 271 | 1 272 | 273 | 274 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 275 | 1 276 | 277 | 278 | 279 | 280 | library\lib\x86 281 | 1 282 | 283 | 284 | 285 | 286 | 1 287 | 288 | 289 | 1 290 | 291 | 292 | 1 293 | 294 | 295 | 296 | 297 | 1 298 | 299 | 300 | 1 301 | 302 | 303 | 1 304 | 305 | 306 | 307 | 308 | library\lib\armeabi 309 | 1 310 | 311 | 312 | 313 | 314 | 0 315 | 316 | 317 | 1 318 | 319 | 320 | Contents\MacOS 321 | 1 322 | 323 | 324 | 325 | 326 | 1 327 | 328 | 329 | 1 330 | 331 | 332 | 1 333 | 334 | 335 | 336 | 337 | res\drawable-normal 338 | 1 339 | 340 | 341 | 342 | 343 | res\drawable-xhdpi 344 | 1 345 | 346 | 347 | 348 | 349 | res\drawable-large 350 | 1 351 | 352 | 353 | 354 | 355 | 1 356 | 357 | 358 | 1 359 | 360 | 361 | 1 362 | 363 | 364 | 365 | 366 | ../ 367 | 1 368 | 369 | 370 | ../ 371 | 1 372 | 373 | 374 | 375 | 376 | res\drawable-hdpi 377 | 1 378 | 379 | 380 | 381 | 382 | library\lib\armeabi-v7a 383 | 1 384 | 385 | 386 | 387 | 388 | Contents 389 | 1 390 | 391 | 392 | 393 | 394 | ../ 395 | 1 396 | 397 | 398 | 399 | 400 | 1 401 | 402 | 403 | 1 404 | 405 | 406 | 1 407 | 408 | 409 | 410 | 411 | res\values 412 | 1 413 | 414 | 415 | 416 | 417 | res\drawable-small 418 | 1 419 | 420 | 421 | 422 | 423 | res\drawable 424 | 1 425 | 426 | 427 | 428 | 429 | 1 430 | 431 | 432 | 1 433 | 434 | 435 | 1 436 | 437 | 438 | 439 | 440 | 1 441 | 442 | 443 | 444 | 445 | res\drawable 446 | 1 447 | 448 | 449 | 450 | 451 | 0 452 | 453 | 454 | 0 455 | 456 | 457 | Contents\Resources\StartUp\ 458 | 0 459 | 460 | 461 | 0 462 | 463 | 464 | 0 465 | 466 | 467 | 0 468 | 469 | 470 | 471 | 472 | library\lib\armeabi-v7a 473 | 1 474 | 475 | 476 | 477 | 478 | 0 479 | .bpl 480 | 481 | 482 | 1 483 | .dylib 484 | 485 | 486 | Contents\MacOS 487 | 1 488 | .dylib 489 | 490 | 491 | 1 492 | .dylib 493 | 494 | 495 | 1 496 | .dylib 497 | 498 | 499 | 500 | 501 | res\drawable-mdpi 502 | 1 503 | 504 | 505 | 506 | 507 | res\drawable-xlarge 508 | 1 509 | 510 | 511 | 512 | 513 | res\drawable-ldpi 514 | 1 515 | 516 | 517 | 518 | 519 | 1 520 | 521 | 522 | 1 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | True 535 | False 536 | 537 | 538 | C:\Users\s202\Desktop\Workspace\dsv-delphi\delphi-ci-test2\src\Test\DelphiCITests.dproj 539 | 540 | 541 | 12 542 | 543 | 544 | 545 | 546 |
547 | --------------------------------------------------------------------------------