├── .github └── workflows │ └── docker-image.yml ├── .gitignore ├── BUILDBOT.md ├── Build-All.ps1 ├── Publish-All.ps1 ├── README.md ├── UPDATING.md ├── base ├── Dockerfile.1809 ├── Dockerfile.2022 ├── Dockerfile.aws ├── Dockerfile.windows-1809 ├── Dockerfile.windows-2022 ├── Dockerfile.windows-aws └── manifest.tmpl ├── buildbot-worker ├── BuildbotWorker │ ├── Run-BuildbotWorker.ps1 │ ├── buildbot.py │ ├── buildbot.tac.tmpl │ └── info │ │ ├── admin.tmpl │ │ └── host.tmpl ├── Dockerfile └── manifest.tmpl ├── msbuild-2022 ├── Dockerfile └── manifest.tmpl ├── renovate.json ├── scm ├── Dockerfile └── manifest.tmpl ├── scripts ├── Dockerfile └── manifest.tmpl └── tools ├── Dockerfile ├── diffutils └── bin │ ├── cmp.exe │ ├── diff.exe │ ├── diff3.exe │ ├── libiconv2.dll │ ├── libintl3.dll │ └── sdiff.exe ├── gperf └── bin │ └── gperf.exe ├── manifest.tmpl └── msys2 └── usr └── bin ├── cmp.exe ├── make.exe ├── msys-2.0.dll ├── msys-atomic-1.dll ├── msys-charset-1.dll ├── msys-gcc_s-seh-1.dll ├── msys-gfortran-5.dll ├── msys-gomp-1.dll ├── msys-iconv-2.dll ├── msys-intl-8.dll ├── msys-quadmath-0.dll ├── msys-stdc++-6.dll └── patch.exe /.github/workflows/docker-image.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | strategy: 12 | fail-fast: false 13 | matrix: 14 | include: 15 | - tag: 2022 16 | os: windows-2022 17 | - tag: windows-2022 18 | os: windows-2022 19 | - tag: 1809 20 | os: windows-2019 21 | runs-on: ${{ matrix.os }} 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | # Build Docker images 26 | - name: Build webkitdev/base 27 | run: docker build --tag webkitdev/base:${{ matrix.tag }} --file base/Dockerfile.${{ matrix.tag }} base 28 | - name: Build webkitdev/scripts 29 | run: docker build --tag webkitdev/scripts:${{ matrix.tag }} --build-arg IMAGE_TAG=${{ matrix.tag }} scripts 30 | - name: Build webkitdev/scm 31 | run: docker build --tag webkitdev/scm:${{ matrix.tag }} --build-arg IMAGE_TAG=${{ matrix.tag }} scm 32 | - name: Build webkitdev/tools 33 | run: docker build --tag webkitdev/tools:${{ matrix.tag }} --build-arg IMAGE_TAG=${{ matrix.tag }} tools 34 | - name: Build webkitdev/msbuild-2022 35 | run: docker build --tag webkitdev/msbuild-2022:${{ matrix.tag }} --build-arg IMAGE_TAG=${{ matrix.tag }} msbuild-2022 36 | - name: Build webkitdev/buildbot-worker 37 | run: docker build --tag webkitdev/buildbot-worker:${{ matrix.tag }} --build-arg IMAGE_TAG=${{ matrix.tag }} buildbot-worker 38 | 39 | # Publish Docker images 40 | - name: Dockerhub login 41 | if: github.ref_name == github.event.repository.default_branch 42 | uses: docker/login-action@v3 43 | with: 44 | username: ${{ secrets.DOCKERHUB_USERNAME }} 45 | password: ${{ secrets.DOCKERHUB_TOKEN }} 46 | - name: Publish webkitdev/base 47 | if: github.ref_name == github.event.repository.default_branch 48 | run: docker push webkitdev/base:${{ matrix.tag }} 49 | - name: Publish webkitdev/scripts 50 | if: github.ref_name == github.event.repository.default_branch 51 | run: docker push webkitdev/scripts:${{ matrix.tag }} 52 | - name: Publish webkitdev/scm 53 | if: github.ref_name == github.event.repository.default_branch 54 | run: docker push webkitdev/scm:${{ matrix.tag }} 55 | - name: Publish webkitdev/tools 56 | if: github.ref_name == github.event.repository.default_branch 57 | run: docker push webkitdev/tools:${{ matrix.tag }} 58 | - name: Publish webkitdev/msbuild-2022 59 | if: github.ref_name == github.event.repository.default_branch 60 | run: docker push webkitdev/msbuild-2022:${{ matrix.tag }} 61 | - name: Publish webkitdev/buildbot-worker 62 | if: github.ref_name == github.event.repository.default_branch 63 | run: docker push webkitdev/buildbot-worker:${{ matrix.tag }} 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # drone exec files 2 | .env 3 | .secrets 4 | -------------------------------------------------------------------------------- /BUILDBOT.md: -------------------------------------------------------------------------------- 1 | # Connecting a WebKit Buildbot 2 | The `docker-webkit-dev` project contains Docker images for running Buildbot 3 | workers that connect to WebKit infrastructure. The Windows WebKit port builds 4 | happen within Docker containers running the `webkitdev/buildbot-worker` image. 5 | 6 | > [!IMPORTANT] 7 | > To connect to WebKit infrastructure credentials are required. 8 | > Contact the infrastructure team on [Slack](https://webkit.slack.com) by 9 | > dropping a message in the `#dev` channel for assistance in connecting new 10 | > bots. 11 | 12 | ## Getting the image 13 | The `webkitdev/buildbot-worker` image is built and pushed to 14 | [Docker Hub](https://hub.docker.com/r/webkitdev/buildbot-worker). The following 15 | tags are supported. For the latest information on Windows container version 16 | compatibility see the 17 | [documentation](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility) 18 | 19 | | Tag Name | Automated | Description | 20 | |---|:---:|---| 21 | | 2022 | :white_check_mark: | A Windows 2022 server container | 22 | | windows-2022 | :x: | A Windows container, used for Layout Tests | 23 | | 1809 | :x: | A Windows 2019 server container | 24 | 25 | Visit [Docker Hub](https://hub.docker.com/r/webkitdev/buildbot-worker/tags) to 26 | see when the last build happened for the image's tags. 27 | 28 | ## Configuring the Buildbot worker 29 | The `webkitdev/buildbot-worker` image uses environment variables for 30 | configuration. When invoking `docker run` environment variables are specified on 31 | the command line individually or through a file. See the 32 | [documentation](https://docs.docker.com/engine/reference/commandline/container_run/#env) 33 | for more details. 34 | 35 | | Environment Variable | Required | Description | 36 | |---|:---:|---| 37 | | BUILD_HOST_NAME | :white_check_mark: | Host of the buildbot instance, either `build.webkit.org`, for repository commits, or `ews-build.webkit.org` for pull requests | 38 | | BUILD_HOST_PORT | :x: | Port of the buildbot instance, defaults to 17000 | 39 | | BUILD_WORKER_NAME | :white_check_mark: | Name for the worker, provided by infrastructure team | 40 | | BUILD_WORKER_PASSWORD | :white_check_mark: | Password for the worker, provided by infrastructure team | 41 | | BUILD_WORKER_KEEPALIVE | :x: | Time in seconds that messages should be sent by the worker to the server, defaults to 240 | 42 | | ADMIN_NAME | :x:| Contact name for the admin of the worker | 43 | | ADMIN_EMAIL | :x: | Contact e-mail address for the admin of the worker | 44 | | HOST_DESCRIPTION |:x: | A description of the host running the worker | 45 | | COMPILER | :white_check_mark: | Needs to be set to `Clang` since the alternative, `cl`, is no longer able to build WebKit | 46 | 47 | The preferred method of setup uses an environment file. An example file to fill 48 | out with all the options present looks like this. Save the text file locally 49 | with the name corresponding to worker name; for this example `build.env` is 50 | used. 51 | 52 | ```txt 53 | ADMIN_EMAIL= 54 | ADMIN_NAME= 55 | BUILD_HOST_NAME= 56 | BUILD_WORKER_NAME= 57 | BUILD_WORKER_PASSWORD= 58 | HOST_DESCRIPTION= 59 | COMPILER=Clang 60 | ``` 61 | 62 | ## Running the Buildbot worker 63 | On a Windows Server 2022 machine run the following in a powershell session. On 64 | Windows Server 2022 the Docker container runs in process isolation mode which 65 | gives it access to all the resources of the host. 66 | 67 | > [!NOTE] 68 | > Replace `` with the value from the above [table](#getting-the-image) 69 | > based on the type of worker being created. 70 | 71 | ```powershell 72 | docker run --name build --env-file build.env --detach --restart always --storage-opt size=80G webkitdev/buildbot-worker: 73 | ``` 74 | 75 | > [!IMPORTANT] 76 | > The worker will fail to start if not given enough resources to perform a 77 | > build. This limitation arises because, by default, the Windows container 78 | > allocates only two processors, which is inadequate for running a build. The 79 | > minimum requirements are 4 CPUs with 12GB of memory and 30GB of storage. 80 | > However its best to give as many CPUs as possible with each assigned at least 81 | > 2GB of memory and 80GB of storage. 82 | 83 | On a Windows 11 machine run the following in a powershell session. On Windows 11 84 | the Docker container runs in Hyper-V isolation mode so the amount of resources 85 | need to be specified with `cpu-count` and `memory`. Replace `X` with the number 86 | of processors to use and `Y` with the amount of memory in GBs to reserve for the 87 | container. 88 | 89 | ```powershell 90 | docker run --name build --env-file build.env --detach --restart always --storage-opt size=80G --cpu-count X --memory Yg webkitdev/buildbot-worker: 91 | ``` 92 | 93 | To see if the container is running invoke the following in a powershell session. 94 | If everything is configured the output will look like this. Check the Buildbot 95 | instance and the worker should be present in its listing. 96 | 97 | ```powershell 98 | docker logs build 99 | 100 | Buildbot information 101 | Name: 102 | Admin: 103 | Description: 104 | Host system 105 | Processors: 1 106 | Logical processors: 16 107 | Total Physical Memory: 24.50gb 108 | \\60A8A235F96C\root\cimv2:Win32_LogicalDisk.DeviceID="C:" 109 | Disk information C: 110 | Total Disk Space: 126.87gb 111 | Available Disk Space: 126.74gb 112 | Initializing Visual Studio environment 113 | ********************************************************************** 114 | ** Visual Studio 2022 Developer Command Prompt v17.8.5 115 | ** Copyright (c) 2022 Microsoft Corporation 116 | ********************************************************************** 117 | [vcvarsall.bat] Environment initialized for: 'x64' 118 | Found compiler at C:\LLVM\bin\clang-cl.exe 119 | Initializing buildbot configuration 120 | Looking in C:\BW\Scripts for additional startup scripts 121 | 0 scripts found 122 | Starting buildbot 123 | buildbot-worker start 124 | ``` 125 | 126 | ## Debugging 127 | To check on what is going on inside the container and diagnose an issue open a 128 | command prompt on the machine running the Docker container and enter the 129 | following command to get an interactive Powershell prompt within it. 130 | 131 | ```powershell 132 | docker exec -it build powershell 133 | ``` 134 | 135 | An administrator Powershell instance is now running in the specified container, 136 | `build`, providing full access to it. 137 | 138 | An example administrative task would be looking at the Buildbot logs within the 139 | container to diagnose a connection issue. To do that run the following command. 140 | 141 | ```powershell 142 | PS C:\BW> Get-Content .\twistd.log 143 | ``` 144 | 145 | Whenever the task is over just use `exit` to terminate the session. As long as 146 | the container is running it can be re-entered using `docker exec`. Use it 147 | liberally to diagnose issues with the build. 148 | -------------------------------------------------------------------------------- /Build-All.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [Parameter(Mandatory)] 3 | [ValidateSet('1809','2022','aws','windows-1809','windows-aws','windows-2022')] 4 | [string]$tag 5 | ) 6 | 7 | $ErrorActionPreference = 'Stop'; 8 | 9 | function Build-WebKitDockerImage { 10 | param( 11 | [Parameter(Mandatory)] 12 | [string]$image, 13 | [Parameter(Mandatory)] 14 | [string]$tag 15 | ) 16 | 17 | $path = Join-Path $PSScriptRoot $image; 18 | if ($image -eq 'base') { 19 | $file = Join-Path $path ('Dockerfile.{0}' -f $tag); 20 | $buildArgs = ''; 21 | } else { 22 | $file = Join-Path $path 'Dockerfile'; 23 | $buildArgs = ('--build-arg IMAGE_TAG={0}' -f $tag); 24 | } 25 | 26 | $cmd = 'docker build -t webkitdev/{0}:{1} {2} -f {3} -m 2GB {4}' -f $image,$tag,$buildArgs,$file,$path; 27 | 28 | Write-Host ('Starting build at {0}' -f (Get-Date)) 29 | Write-Host $cmd; 30 | Invoke-Expression $cmd; 31 | 32 | if ($LASTEXITCODE -ne 0) { 33 | Write-Error "docker build failed" 34 | } 35 | } 36 | 37 | Build-WebKitDockerImage -Image base -Tag $tag; 38 | Build-WebKitDockerImage -Image scripts -Tag $tag; 39 | Build-WebKitDockerImage -Image scm -Tag $tag; 40 | Build-WebKitDockerImage -Image tools -Tag $tag; 41 | Build-WebKitDockerImage -Image msbuild-2022 -Tag $tag; 42 | Build-WebKitDockerImage -Image buildbot-worker -Tag $tag; 43 | -------------------------------------------------------------------------------- /Publish-All.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [Parameter(Mandatory)] 3 | [ValidateSet('1809','2022','aws','windows-1809','windows-aws','windows-2022')] 4 | [string]$tag 5 | ) 6 | 7 | $ErrorActionPreference = 'Stop'; 8 | 9 | function Publish-WebKitDockerImage { 10 | param( 11 | [Parameter(Mandatory)] 12 | [string]$image, 13 | [Parameter(Mandatory)] 14 | [string]$tag 15 | ) 16 | 17 | $cmd = 'docker push webkitdev/{0}:{1}' -f $image,$tag; 18 | 19 | Write-Host $cmd; 20 | Invoke-Expression $cmd; 21 | 22 | if ($LASTEXITCODE -ne 0) { 23 | Write-Error "docker push failed" 24 | } 25 | } 26 | 27 | Publish-WebKitDockerImage -Image base -Tag $tag; 28 | Publish-WebKitDockerImage -Image scripts -Tag $tag; 29 | Publish-WebKitDockerImage -Image scm -Tag $tag; 30 | Publish-WebKitDockerImage -Image tools -Tag $tag; 31 | Publish-WebKitDockerImage -Image msbuild-2022 -Tag $tag; 32 | Publish-WebKitDockerImage -Image buildbot-worker -Tag $tag; 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-webkit-dev 2 | Docker images for local WebKit development and CI/CD on Windows. 3 | 4 | [![Docker Image CI](https://github.com/WebKitForWindows/docker-webkit-dev/actions/workflows/docker-image.yml/badge.svg)](https://github.com/WebKitForWindows/docker-webkit-dev/actions/workflows/docker-image.yml) 5 | 6 | ## Host Setup 7 | Using the `webkitdev` Docker images requires a Windows host, ideally Windows 11 8 | or Windows Server 2022 but Windows 10 and Windows Server 2019 can also be used, 9 | with [Docker](https://www.docker.com/) installed and targeting Windows 10 | containers. For new installs follow the latest documentation to setup 11 | [Windows for containers](https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment). 12 | 13 | ## Images 14 | The `webkitdev` Docker images include the required software to build WebKit on 15 | Windows. Docker images can descend from each other, following a single 16 | inheritance model like in Object-Oriented Programming (OOP). The images in the 17 | table below are organized by purpose and include all components of the previous 18 | image. In practice users will likely only ever need the `msbuild-2022` one for 19 | local builds or `buildbot-worker` for [running CI/CD](BUILDBOT.md) within the 20 | WebKit infrastructure. 21 | 22 | | Image | Description | 23 | |---|---| 24 | | [base](https://hub.docker.com/r/webkitdev/base) | The base image (depends on the tag) | 25 | | [scripts](https://hub.docker.com/r/webkitdev/scripts) | Powershell modules to install the software needed | 26 | | [scm](https://hub.docker.com/r/webkitdev/scm) | Contains the Source Control Management (SCM) used for WebKit, e.g. git | 27 | | [tools](https://hub.docker.com/r/webkitdev/tools) | Contains build tools for WebKit, e.g. python, cmake, etc. | 28 | | [msbuild-2022](https://hub.docker.com/r/webkitdev/msbuild-2022) | Contains Visual Studio Build Tools and LLVM | 29 | | [buildbot-worker](https://hub.docker.com/r/webkitdev/buildbot-worker) | Contains Buildbot and scripts to connect to WebKit CI/CD infrastructure | 30 | 31 | Docker images support tagging. For Windows images the tag references the version 32 | of the container base image, Windows Server 2022 and Windows Server 2019. 33 | Compatibility depends on what the host OS is. In general Windows 11 needs to 34 | target 2022 tags and Windows 10 needs to target 2019 tags. For the latest 35 | information on Windows container version compatibility see the 36 | [documentation](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility). 37 | 38 | | Tag | Automated | Win 11 | Win 10 | Description | 39 | |---|:---:|:---:|:---:|---| 40 | | 2022 | :white_check_mark: | :white_check_mark: | :x: | A Windows 2022 server container | 41 | | windows-2022 | :x: | :white_check_mark: | :x: | A Windows container, used for Layout Tests | 42 | | 1809 | :x: | :white_check_mark: | :white_check_mark: | A Windows 2019 server container | 43 | | windows-1809 | :x: | :white_check_mark: | :white_check_mark: | A Windows container, used for Layout Tests | 44 | 45 | The `windows-` have a larger base image containing more Windows OS 46 | components making them ideal for testing WebKit. The other tags use Windows 47 | Server Core and are suitable for building WebKit. 48 | 49 | ### Building locally 50 | > [!IMPORTANT] 51 | > Windows 11 and Windows Server 2022 users should pull the images directly from 52 | > DockerHub rather than building locally. The only exception is when 53 | > [updating the images](UPDATING.md). 54 | 55 | Run the `Build-All.ps1` PowerShell script to build the images. It expects a 56 | single argument `-Tag` which specifies the tag to build. Use the :point_up: 57 | table to determine what value to use. 58 | 59 | After the script completes run `docker images` and verify the images are present 60 | and tagged. The created time should be within the time frame the script was 61 | executing in. 62 | 63 | ## Building the Windows WebKit port 64 | With the `webkitdev/msbuild-2022` image everything is there to do a build of 65 | the Windows WebKit port. Start out by doing a local checkout of the 66 | [WebKit repository](https://github.com/WebKit/WebKit). The `docker run` command 67 | needs to be populated with the following fields. 68 | 69 | | Field | Description | 70 | |---|---| 71 | | tag | The tag to use | 72 | | cpu-count | The number of CPUs to dedicate to the container (optional on a Windows Server host) | 73 | | [memory](https://docs.docker.com/reference/cli/docker/container/run/#memory) | The memory limit for the container (optional on a Windows Server host) | 74 | | [volume](https://docs.docker.com/reference/cli/docker/container/run/#volume) | A local path containing the WebKit checkout, use `/` over `\` | 75 | 76 | ```powershell 77 | docker run --name build --rm -it ` 78 | --cpu-count= --memory= ` 79 | --volume :C:/webkit ` 80 | webkitdev/msbuild-2022: powershell 81 | ``` 82 | 83 | As an example a Windows 11 host having 8 logical cores and 32GB of memory 84 | containing a checkout of WebKit at `C:\GitHub\webkit` would run the container 85 | like this :point_down:. 86 | 87 | ```powershell 88 | docker run --name build --rm -it ` 89 | --cpu-count=6 --memory=16g ` 90 | --volume C:/GitHub/webkit:C:/webkit ` 91 | webkitdev/msbuild-2022:2022 powershell 92 | ``` 93 | 94 | Once the command is run it will place you into a Powershell session. From there 95 | execute the following to build the Windows WebKit port. 96 | 97 | ```powershell 98 | Select-VSEnvironment 99 | $env:CC = 'clang-cl.exe' 100 | $env:CXX = 'clang-cl.exe' 101 | cd C:\webkit 102 | perl Tools\Scripts\build-webkit 103 | ``` 104 | 105 | > [!NOTE] 106 | > Building in a container in Hyper-V isolation, the default for Windows 11 and 107 | > 10, will take longer than a local build. Building in a container in process 108 | > mode, the default for Windows Server 2022 and 2019, will build in a similar 109 | > time as a local build. 110 | > 111 | > Ideally dedicate a large amount of resources when running in Hyper-V to reduce 112 | > build time. 113 | 114 | After completion the artifacts end up in the `WebKitBuild` directory within the 115 | checkout. The Buildbots for the Windows WebKit port use these Docker containers 116 | so they should build WebKit without issue. However if there any problems with 117 | the images feel free to open an issue. 118 | -------------------------------------------------------------------------------- /UPDATING.md: -------------------------------------------------------------------------------- 1 | # Updating Images 2 | As new versions of the software housed in the Docker images are released the 3 | versions used should be updated. This document describes the process for doing 4 | that. 5 | 6 | > [!NOTE] 7 | > This document assumes experience 8 | > [building the images locally](https://github.com/WebKitForWindows/docker-webkit-dev?tab=readme-ov-file#building-locally). 9 | > If unfamiliar please attempt to build the images as is before attempting to 10 | > modify them. 11 | 12 | ## Finding new versions 13 | Software versions in Dockerfiles are manually determined. Check the software's 14 | site for updates using the :point_down: table. 15 | 16 | | Software | Download Link | 17 | |---|:---:| 18 | | git | https://github.com/git-for-windows/git/releases | 19 | | perl | https://strawberryperl.com/releases.html | 20 | | python | https://www.python.org/downloads | 21 | | pip | https://pypi.org/project/pip | 22 | | pywin32 | https://pypi.org/project/pywin32 | 23 | | ruby | https://rubyinstaller.org/downloads | 24 | | webrick | https://github.com/ruby/webrick/releases | 25 | | cmake | https://cmake.org/download | 26 | | ninja | https://ninja-build.org | 27 | | nuget | https://www.nuget.org/downloads | 28 | | llvm | https://github.com/llvm/llvm-project/releases | 29 | 30 | Every software in the Dockerfile has a corresponding `_VERSION` environment 31 | variable. Update this variable to install the newer version. 32 | 33 | Installing the software is done through the 34 | [WebKitDev PowerShell module](https://www.powershellgallery.com/packages/WebKitDev). 35 | If the download fails open an 36 | [issue](https://github.com/WebKitForWindows/powershell-webkit-dev/issues) there. 37 | 38 | > [!Warning] 39 | > The WebKitDev module expands a filename pattern for the installer. Any changes 40 | > to the naming scheme will cause download failures. The module may be replaced 41 | > by [Chocolatey](https://chocolatey.org) in the future. 42 | 43 | ## Building 44 | Use the `Build-All.ps1` PowerShell script to build the images. Again it expects 45 | a single argument `-Tag` which specifies the tag to build. 46 | 47 | ```powershell 48 | ./Build-All -tag 2022 49 | ``` 50 | 51 | Executing the script will create all the `webkitdev` images. Most of `RUN` 52 | commands in the Dockerfiles, minus those installing Visual Studio and the 53 | Windows SDK, will complete in short order. However, the entire build process may 54 | require a significant amount of time to complete. 55 | 56 | > [!Warning] 57 | > Sometimes an updated installer will fail to run within the container. If an 58 | > installer is taking an abnormal amount of time to complete stop the build, 59 | > hit `CTRL-C`, and revert the change for that version. If the script gets past 60 | > that `RUN` command then pin the version by leaving a comment in the 61 | > Dockerfile. 62 | > 63 | > Conversely if a new version appears after pinning try to update the version in 64 | > case the installation issue is resolved. 65 | 66 | After the script completes run `docker images` and verify the images are present 67 | and tagged. The created time should be within the time frame of the build. 68 | 69 | ## Verification 70 | The best way to verify the new images is to run a [buildbot](BUILDBOT.md) 71 | locally. If that's not possible the `webkitdev/msbuild-2022` image can be used 72 | to make a build. Follow the instructions on 73 | [building the Windows WebKit port](https://github.com/WebKitForWindows/docker-webkit-dev?tab=readme-ov-file#building-the-windows-webkit-port). 74 | 75 | If the Buildbot instance runs successfully or the build completes within the 76 | updated image it is ready to land. 77 | 78 | ## Creating the PR 79 | With the changes tested locally its time to open a PR. Create a branch 80 | `tools-YYYY-MM-DD`, where `YYYY-MM-DD` corresponds with the current date. The 81 | first line of the commit message should be `Update tools`. From there write the 82 | software and the new version. A commit that follows these rules looks like :point_down:. 83 | 84 | ```text 85 | Update tools 86 | 87 | pip -> 24.1.1 88 | cmake -> 3.30.0 89 | llvm -> 18.1.8 90 | ``` 91 | 92 | Push the branch and open a PR on the repository. The CI will attempt to build 93 | the changes and if they pass the PR is ready to merge. 94 | -------------------------------------------------------------------------------- /base/Dockerfile.1809: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019@sha256:d94584a4b73fbc40b1860a099540f033addf844e3b2befaadf5354e115280223 2 | -------------------------------------------------------------------------------- /base/Dockerfile.2022: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022@sha256:2ceebeeb08b828c3ed61449939894857ee5b20e78dfbb56a8926222994ad7ac1 2 | -------------------------------------------------------------------------------- /base/Dockerfile.aws: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019@sha256:578d07650a3dfe8db5b988f26aa0c23180a248bcb7f5e1ab1d7ba7713b73ad43 2 | -------------------------------------------------------------------------------- /base/Dockerfile.windows-1809: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/windows:1809@sha256:0cb64ef7b1272f1f52ee45aff49bd8208259922278ee8f1810a00fa50014ca7a 2 | 3 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 4 | 5 | RUN Set-ExecutionPolicy -ExecutionPolicy RemoteSigned; 6 | -------------------------------------------------------------------------------- /base/Dockerfile.windows-2022: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/windows/server:ltsc2022@sha256:3ae82fb55b32b69f4a4127389ca72b012344fc9714cc0c71aa01e29f3a4f4e4c 2 | 3 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 4 | 5 | RUN Set-ExecutionPolicy -ExecutionPolicy RemoteSigned; 6 | -------------------------------------------------------------------------------- /base/Dockerfile.windows-aws: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/windows:1809@sha256:bf5f60839adcb5cfd775243bb86069deb88083217c656c456d90fbb685369aa5 2 | 3 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 4 | 5 | RUN Set-ExecutionPolicy -ExecutionPolicy RemoteSigned; 6 | 7 | -------------------------------------------------------------------------------- /base/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/base:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/base:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/base:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 2022 21 | -------------------------------------------------------------------------------- /buildbot-worker/BuildbotWorker/Run-BuildbotWorker.ps1: -------------------------------------------------------------------------------- 1 | #Requires -Modules WebKitDev 2 | 3 | $ErrorActionPreference = 'Stop'; 4 | 5 | # Verify that a build host name is present 6 | if (-not (Test-Path Env:BUILD_HOST_NAME)) { 7 | Write-Error ('WebKit buildbots require a name for the host to connect to. 8 | For local development set the BUILD_HOST_NAME environment variable using 9 | docker run -e BUILD_HOST_NAME=') 10 | } 11 | 12 | # Verify that a build worker name is present 13 | if (-not (Test-Path Env:BUILD_WORKER_NAME)) { 14 | Write-Error ('WebKit buildbots require a name for the worker to connect. 15 | For local development set the BUILD_WORKER_NAME environment variable using 16 | docker run -e BUILD_WORKER_NAME='); 17 | } 18 | 19 | # Verify that a password is present 20 | if (-not (Test-Path Env:BUILD_WORKER_PASSWORD)) { 21 | if (-not (Test-Path Env:BUILD_WORKER_PASSWORD_FILE)) { 22 | Write-Error ('WebKit buildbots require a password to connect. 23 | For local development set the BUILD_WORKER_PASSWORD environment variable using 24 | docker run -e BUILD_WORKER_PASSWORD= 25 | While in production use docker secrets and set the location of the file using the BUILD_WORKER_PASSWORD_FILE environment variable'); 26 | } 27 | 28 | Write-Host ('Loading password from {0}',$env:BUILD_WORKER_PASSWORD_FILE); 29 | $Env:BUILD_WORKER_PASSWORD = Get-Content -Path $env:BUILD_WORKER_PASSWORD_FILE; 30 | } 31 | 32 | # Output information 33 | Write-Host 'Buildbot information'; 34 | Write-Host ('Name: {0}' -f $env:BUILD_WORKER_NAME); 35 | Write-Host ('Admin: {0} <{1}>' -f $env:ADMIN_NAME,$env:ADMIN_EMAIL); 36 | Write-Host ('Description: {0}' -f $env:HOST_DESCRIPTION); 37 | Write-Host ('Keep-alive: {0}' -f $env:BUILD_WORKER_KEEPALIVE); 38 | 39 | # Print the host information 40 | $cs = Get-WmiObject -Class Win32_ComputerSystem; 41 | Write-Host ('Host system'); 42 | Write-Host ('Processors: {0}' -f $cs.NumberOfProcessors); 43 | Write-Host ('Logical processors: {0}' -f $cs.NumberOfLogicalProcessors); 44 | Write-Host ('Total Physical Memory: {0:f2}gb' -f ($cs.TotalPhysicalMemory / 1Gb)); 45 | 46 | $ld = Get-WmiObject -Class Win32_LogicalDisk; 47 | Write-Host $ld; 48 | Write-Host ('Disk information {0}' -f ($ld.DeviceID)); 49 | Write-Host ('Total Disk Space: {0:f2}gb' -f ($ld.Size / 1Gb)); 50 | Write-Host ('Available Disk Space: {0:f2}gb' -f ($ld.FreeSpace / 1Gb)); 51 | 52 | # Sanity check the configuration to make sure it is setup properly 53 | $minProcessors = 4; 54 | 55 | if ($cs.NumberOfLogicalProcessors -lt $minProcessors) { 56 | Write-Error ('WebKit builds need to have at least {0} processors available. 57 | Make sure the number of processors is specified when starting the container 58 | docker run --cpu-count={0}' -f $minProcessors); 59 | } 60 | 61 | $minPhysicalMemory = 12; 62 | 63 | if ($cs.TotalPhysicalMemory -lt ($minPhysicalMemory * 1Gb)) { 64 | Write-Error ('WebKit builds need to have at least {0}Gbs of memory available. 65 | Make sure the amount of memory is specified when starting the container 66 | docker run --memory={0}g' -f $minPhysicalMemory); 67 | } 68 | 69 | $minDiskSpace = 30; 70 | 71 | if ($ld.Size -lt ($minDiskSpace * 1Gb)) { 72 | Write-Error ('WebKit builds need to have at least {0}Gbs of disk space available. 73 | Make sure the amount of disk space is set in the storage-opts setting of the daemon 74 | "storage-opts": [ "size={0}GB" ]' -f $minDiskSpace); 75 | } 76 | 77 | # Initialize the Visual Studio environment 78 | Write-Host 'Initializing Visual Studio environment'; 79 | Initialize-VSEnvironment -Architecture 'amd64' -Path (Get-VSBuildTools2022VCVarsAllPath); 80 | 81 | if ($env:COMPILER -eq 'Clang') { 82 | $compilerExe = 'clang-cl.exe'; 83 | } else { 84 | $compilerExe = 'cl.exe'; 85 | } 86 | 87 | $compilerPath = (Get-Command $compilerExe).Path; 88 | 89 | Write-Host ('Found compiler at {0}' -f $compilerPath); 90 | Initialize-NinjaEnvironment -Cc $compilerPath -CXX $compilerPath; 91 | 92 | # Create the configuration 93 | # 94 | # Remove the password environment variable after configuration 95 | # as buildbot will print the entire environment and leak the 96 | # information. 97 | Write-Host 'Initializing buildbot configuration'; 98 | python3 buildbot.py; 99 | 100 | Remove-Item Env:BUILD_WORKER_PASSWORD; 101 | 102 | # Add NuGet vcpkg feeds 103 | # 104 | # Remove the token environment variable after configuration 105 | # as buildbot will print the entire environment and leak the 106 | # information. 107 | if (Test-Path Env:GH_PACKAGES_FEED) { 108 | if (-not (Test-Path Env:GH_PACKAGES_USERNAME)) { 109 | Write-Error ('WebKit buildbots require a username to connect to a vcpkg feed. 110 | For local development set the GH_PACKAGES_USERNAME environment variable using 111 | docker run -e GH_PACKAGES_USERNAME='); 112 | } 113 | if (Test-Path Env:GH_PACKAGES_TOKEN) { 114 | $ghToken = $Env:GH_PACKAGES_TOKEN; 115 | Remove-Item Env:GH_PACKAGES_TOKEN; 116 | } elseif (Test-Path Env:GH_PACKAGES_TOKEN_FILE) { 117 | Write-Host ('Loading token from {0}',$env:GH_PACKAGES_TOKEN_FILE); 118 | $ghToken = Get-Content -Path $env:GH_PACKAGES_TOKEN_FILE; 119 | } else { 120 | Write-Error ('WebKit buildbots require a token to connect to a vcpkg feed 121 | For local development set the GH_PACKAGES_TOKEN environment variable using 122 | docker run -e GH_PACKAGES_TOKEN= 123 | While in production use docker secrets and set the location of the file using the GH_PACKAGES_TOKEN_FILE environment variable'); 124 | } 125 | 126 | if (Test-Path Env:GH_PACKAGES_CACHE_TYPE) { 127 | $ghCacheType = $env:GH_PACKAGES_CACHE_TYPE; 128 | } else { 129 | $ghCacheType = 'readwrite'; 130 | } 131 | 132 | nuget sources add ` 133 | -Source $env:GH_PACKAGES_FEED ` 134 | -Name GitHubPackages ` 135 | -Username $env:GH_PACKAGES_USERNAME ` 136 | -Password $ghToken; 137 | 138 | nuget setapikey $ghToken -Source $env:GH_PACKAGES_FEED; 139 | 140 | Write-Host ('Vcpkg configured to use {0} as a cache with {1} access' -f $env:GH_PACKAGES_FEED,$ghCacheType); 141 | $env:VCPKG_BINARY_SOURCES = ('clear;nuget,{0},{1}' -f $env:GH_PACKAGES_FEED,$ghCacheType); 142 | } else { 143 | Write-Warning ('WebKit buildbot is not using a cache for vcpkg'); 144 | } 145 | 146 | # Run any additional startup scripts 147 | $scriptPath = Join-Path $PSScriptRoot 'Scripts'; 148 | 149 | Write-Host ('Looking in {0} for additional startup scripts' -f $scriptPath); 150 | 151 | $scripts = @(); 152 | 153 | if (Test-Path $scriptPath) { 154 | $scripts = Get-ChildItem -Path $scriptPath -Filter '*.ps1'; 155 | } 156 | 157 | Write-Host ('{0} scripts found' -f $scripts.Count); 158 | 159 | foreach ($script in $scripts) { 160 | $invocation = '& {0}' -f $script.FullName; 161 | Write-Host $invocation; 162 | Invoke-Expression $invocation; 163 | } 164 | 165 | # Start the buildbot 166 | Write-Host 'Starting buildbot'; 167 | Write-Host 'buildbot-worker start'; buildbot-worker start; 168 | -------------------------------------------------------------------------------- /buildbot-worker/BuildbotWorker/buildbot.py: -------------------------------------------------------------------------------- 1 | """ Generates templates for the buildbot worker configuration """ 2 | 3 | import os 4 | 5 | from string import Template 6 | 7 | 8 | def _get_options(): 9 | return { 10 | # buildbot.tac 11 | 'host': os.environ.get('BUILD_HOST_NAME'), 12 | 'port': os.environ.get('BUILD_HOST_PORT', '17000'), 13 | 'worker': os.environ.get('BUILD_WORKER_NAME'), 14 | 'password': os.environ.get('BUILD_WORKER_PASSWORD'), 15 | 'keepalive': os.environ.get('BUILD_WORKER_KEEPALIVE', '240'), 16 | # info/admin 17 | 'name': os.environ.get('ADMIN_NAME'), 18 | 'email': os.environ.get('ADMIN_EMAIL'), 19 | # info/host 20 | 'description': os.environ.get('HOST_DESCRIPTION'), 21 | } 22 | 23 | 24 | def _templated_file(input_file, output_file, options): 25 | input_file = open(input_file) 26 | output_file = open(output_file, 'w') 27 | 28 | template = Template(input_file.read()) 29 | result = template.substitute(options) 30 | 31 | output_file.write(result) 32 | 33 | 34 | def _process_file(file, options): 35 | output = file[:-5] 36 | 37 | _templated_file(file, output, options) 38 | 39 | 40 | def main(): 41 | """ Generate the templates """ 42 | options = _get_options() 43 | 44 | _process_file('buildbot.tac.tmpl', options) 45 | _process_file('info/admin.tmpl', options) 46 | _process_file('info/host.tmpl', options) 47 | 48 | 49 | if __name__ == "__main__": 50 | main() 51 | -------------------------------------------------------------------------------- /buildbot-worker/BuildbotWorker/buildbot.tac.tmpl: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from buildbot_worker.bot import Worker 4 | from twisted.application import service 5 | 6 | basedir = 'C:\\BW' 7 | rotateLength = 10000000 8 | maxRotatedFiles = 10 9 | 10 | # if this is a relocatable tac file, get the directory containing the TAC 11 | if basedir == '.': 12 | import os.path 13 | basedir = os.path.abspath(os.path.dirname(__file__)) 14 | 15 | # note: this line is matched against to check that this is a worker 16 | application = service.Application('buildbot-worker') 17 | 18 | from twisted.python.logfile import LogFile 19 | from twisted.python.log import ILogObserver, FileLogObserver 20 | logfile = LogFile.fromFullPath( 21 | os.path.join(basedir, "twistd.log"), rotateLength=rotateLength, 22 | maxRotatedFiles=maxRotatedFiles) 23 | application.setComponent(ILogObserver, FileLogObserver(logfile).emit) 24 | 25 | buildmaster_host = '$host' 26 | port = $port 27 | workername = '$worker' 28 | passwd = '$password' 29 | keepalive = $keepalive 30 | umask = 0o022 31 | maxdelay = 300 32 | numcpus = None 33 | allow_shutdown = None 34 | maxretries = None 35 | use_tls = 0 36 | delete_leftover_dirs = 0 37 | 38 | s = Worker(buildmaster_host, port, workername, passwd, basedir, 39 | keepalive, umask=umask, maxdelay=maxdelay, 40 | numcpus=numcpus, allow_shutdown=allow_shutdown, 41 | maxRetries=maxretries, useTls=use_tls, 42 | delete_leftover_dirs=delete_leftover_dirs) 43 | s.setServiceParent(application) 44 | -------------------------------------------------------------------------------- /buildbot-worker/BuildbotWorker/info/admin.tmpl: -------------------------------------------------------------------------------- 1 | $name <$email> 2 | -------------------------------------------------------------------------------- /buildbot-worker/BuildbotWorker/info/host.tmpl: -------------------------------------------------------------------------------- 1 | $description 2 | -------------------------------------------------------------------------------- /buildbot-worker/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG IMAGE_TAG 4 | FROM webkitdev/msbuild-2022:$IMAGE_TAG 5 | 6 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 7 | 8 | #-------------------------------------------------------------------- 9 | # Install vcpkg 10 | # 11 | # Remove if Microsoft Visual Studio Build Tools adds in a vcpkg 12 | # workload. At this time the workload isn't present for Build Tools 13 | #-------------------------------------------------------------------- 14 | 15 | ENV VCPKG_VERSION 2025.04.09 16 | ENV VCPKG_ROOT C:\vcpkg 17 | 18 | RUN Install-FromArchive -Name 'vcpkg' -url ('https://github.com/microsoft/vcpkg/archive/refs/tags/{0}.zip' -f $env:VCPKG_VERSION) -archiveRoot ('vcpkg-{0}' -f $env:VCPKG_VERSION) -installationPath $env:VCPKG_ROOT -NoVerify; ` 19 | & ('{0}/scripts/bootstrap.ps1' -f $env:VCPKG_ROOT) -disableMetrics; ` 20 | Remove-Item -Recurse -Force (Join-Path $env:VCPKG_ROOT docs); ` 21 | Remove-Item -Recurse -Force (Join-Path $env:VCPKG_ROOT ports); ` 22 | Remove-Item -Recurse -Force (Join-Path $env:VCPKG_ROOT toolsrc); ` 23 | Remove-Item -Recurse -Force (Join-Path $env:VCPKG_ROOT versions); ` 24 | Register-SystemPath $env:VCPKG_ROOT; ` 25 | vcpkg version; 26 | 27 | #-------------------------------------------------------------------- 28 | # Install buildbot 29 | #-------------------------------------------------------------------- 30 | 31 | ENV BUILDBOT_VERSION 4.2.1 32 | 33 | RUN Write-Host 'Installing buildbot ...'; ` 34 | pip3 install -q ('buildbot-worker=={0}' -f $env:BUILDBOT_VERSION); ` 35 | pip3 show buildbot-worker; ` 36 | buildbot-worker --version; 37 | 38 | #-------------------------------------------------------------------- 39 | # Copy files 40 | #-------------------------------------------------------------------- 41 | 42 | COPY BuildbotWorker C:/BW 43 | 44 | #-------------------------------------------------------------------- 45 | # Make git sh available in path for branch cleanup 46 | #-------------------------------------------------------------------- 47 | 48 | RUN Register-SystemPath -path 'C:\program files\git\bin'; ` 49 | sh --version 50 | 51 | #-------------------------------------------------------------------- 52 | # Set AutoCRLF to false for git 53 | #-------------------------------------------------------------------- 54 | RUN git config --system core.autocrlf false 55 | 56 | #---------------------------------------------------------------------- 57 | # Unset credential.helper for git due to issues for EWS to apple/WebKit 58 | #---------------------------------------------------------------------- 59 | RUN git config --system --unset credential.helper 60 | 61 | #-------------------------------------------------------------------- 62 | # Entrypoint 63 | #-------------------------------------------------------------------- 64 | 65 | WORKDIR C:\\BW 66 | CMD powershell .\\Run-BuildbotWorker.ps1 67 | -------------------------------------------------------------------------------- /buildbot-worker/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/buildbot-worker{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/buildbot-worker{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/buildbot-worker{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 2022 21 | -------------------------------------------------------------------------------- /msbuild-2022/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG IMAGE_TAG 4 | FROM webkitdev/tools:$IMAGE_TAG 5 | 6 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 7 | 8 | #-------------------------------------------------------------------- 9 | # Install MS Build Tools 2022 10 | #-------------------------------------------------------------------- 11 | 12 | RUN Install-VSBuildTools2022 -InstallationPath C:\MSVS -Workloads ` 13 | Microsoft.VisualStudio.Component.Roslyn.Compiler, ` 14 | Microsoft.Component.MSBuild, ` 15 | Microsoft.VisualStudio.Component.CoreBuildTools, ` 16 | Microsoft.VisualStudio.Workload.MSBuildTools, ` 17 | Microsoft.VisualStudio.Component.Windows10SDK, ` 18 | Microsoft.VisualStudio.Component.VC.CoreBuildTools, ` 19 | Microsoft.VisualStudio.Component.VC.Tools.x86.x64, ` 20 | Microsoft.VisualStudio.Component.VC.Redist.14.Latest, ` 21 | Microsoft.VisualStudio.Component.Windows10SDK.18362, ` 22 | Microsoft.VisualStudio.Workload.VCTools 23 | 24 | #-------------------------------------------------------------------- 25 | # Install LLVM for Clang tooling support 26 | #-------------------------------------------------------------------- 27 | 28 | ENV LLVM_VERSION 20.1.4 29 | 30 | RUN Register-SystemPath -Path C:\LLVM\bin; ` 31 | Install-LLVM -Version $env:LLVM_VERSION -InstallationPath C:\LLVM; 32 | 33 | #-------------------------------------------------------------------- 34 | # Install Debugging Tools for Windows 35 | #-------------------------------------------------------------------- 36 | 37 | RUN Install-Windows10SDK -Features OptionId.WindowsDesktopDebuggers; 38 | -------------------------------------------------------------------------------- /msbuild-2022/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/msbuild-2022:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/msbuild-2022:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/msbuild-2022:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 2022 21 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base", 4 | ":automergeDigest" 5 | ], 6 | "enabledManagers": ["dockerfile"], 7 | "dockerfile": { 8 | "ignorePaths": [ 9 | "base/Dockerfile.aws", 10 | "base/Dockerfile.windows-aws", 11 | "scripts/", 12 | "scm/", 13 | "tools/", 14 | "msbuild-2022/", 15 | "buildbot-worker/" 16 | ], 17 | "pinDigests": true 18 | }, 19 | "labels": [ 20 | "renovate" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /scm/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG IMAGE_TAG 4 | FROM webkitdev/scripts:$IMAGE_TAG 5 | 6 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 7 | 8 | #-------------------------------------------------------------------- 9 | # Install Git for Windows x64 CLI 10 | #-------------------------------------------------------------------- 11 | 12 | ENV GIT_VERSION 2.47.1.2 13 | 14 | RUN Install-Git -Version $env:GIT_VERSION; 15 | 16 | #-------------------------------------------------------------------- 17 | # Configure git for long filename support 18 | #-------------------------------------------------------------------- 19 | 20 | RUN git config --system core.longpaths true 21 | -------------------------------------------------------------------------------- /scm/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/scm:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/scm:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/scm:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 2022 21 | -------------------------------------------------------------------------------- /scripts/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG IMAGE_TAG 4 | FROM webkitdev/base:$IMAGE_TAG 5 | 6 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 7 | 8 | #-------------------------------------------------------------------- 9 | # Install NuGet 10 | #-------------------------------------------------------------------- 11 | 12 | ENV NUGET_VERSION 2.8.5.208 13 | 14 | RUN $scriptArgs = @{ ` 15 | Name = 'NuGet'; ` 16 | Scope = 'AllUsers'; ` 17 | RequiredVersion = $env:NUGET_VERSION; ` 18 | Force = $true; ` 19 | }; ` 20 | ` 21 | if (Test-Path env:HTTPS_PROXY) { ` 22 | $scriptArgs['Proxy'] = $env:HTTPS_PROXY; ` 23 | } ` 24 | ` 25 | Install-PackageProvider @scriptArgs; 26 | 27 | #-------------------------------------------------------------------- 28 | # Trust Powershell Gallery 29 | #-------------------------------------------------------------------- 30 | 31 | RUN $scriptArgs = @{ ` 32 | Name = 'PSGallery'; ` 33 | InstallationPolicy = 'Trusted'; ` 34 | }; ` 35 | ` 36 | if (Test-Path env:HTTPS_PROXY) { ` 37 | $scriptArgs['Proxy'] = $env:HTTPS_PROXY; ` 38 | } ` 39 | ` 40 | Set-PSRepository @scriptArgs; 41 | 42 | #-------------------------------------------------------------------- 43 | # Install WebKitDev Module 44 | #-------------------------------------------------------------------- 45 | 46 | ENV WEBKIT_DEV_VERSION 0.5.2 47 | 48 | RUN $scriptArgs = @{ ` 49 | Name = 'WebKitDev'; ` 50 | Scope = 'AllUsers'; ` 51 | RequiredVersion = $env:WEBKIT_DEV_VERSION; ` 52 | Force = $true; ` 53 | }; ` 54 | ` 55 | if (Test-Path env:HTTPS_PROXY) { ` 56 | $scriptArgs['Proxy'] = $env:HTTPS_PROXY; ` 57 | } ` 58 | ` 59 | Install-Module @scriptArgs; 60 | 61 | #-------------------------------------------------------------------- 62 | # Install Chocolatey 63 | #-------------------------------------------------------------------- 64 | 65 | RUN Invoke-WebFileRequest -Url https://community.chocolatey.org/install.ps1 -DestinationPath C:install.ps1; ` 66 | C:\install.ps1; ` 67 | Remove-Item C:\install.ps1; ` 68 | choco --version; 69 | -------------------------------------------------------------------------------- /scripts/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/scripts:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/scripts:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/scripts:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 20H2 21 | -------------------------------------------------------------------------------- /tools/Dockerfile: -------------------------------------------------------------------------------- 1 | # escape=` 2 | 3 | ARG IMAGE_TAG 4 | 5 | #-------------------------------------------------------------------- 6 | # Intermediate build image for GNU tools 7 | #-------------------------------------------------------------------- 8 | 9 | FROM webkitdev/scm:$IMAGE_TAG as msys2 10 | 11 | #-------------------------------------------------------------------- 12 | # Install GNU tools from MSYS2 into build image 13 | # 14 | # Currently the tools are just copied but in the future MSYS2 should 15 | # be installed into the container and then those files can be copied 16 | # directly 17 | #-------------------------------------------------------------------- 18 | 19 | COPY msys2 C:/msys2 20 | 21 | RUN Register-SystemPath -Path C:\msys2\usr\bin; ` 22 | make --version; ` 23 | patch --version; 24 | 25 | #-------------------------------------------------------------------- 26 | # Tools image 27 | #-------------------------------------------------------------------- 28 | 29 | FROM webkitdev/scm:$IMAGE_TAG 30 | 31 | SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] 32 | 33 | #-------------------------------------------------------------------- 34 | # Copy GNU tools from MSYS2 from build image 35 | #-------------------------------------------------------------------- 36 | 37 | COPY --from=msys2 C:/msys2 C:/tools/msys2 38 | 39 | RUN Register-SystemPath -Path C:\tools\msys2\usr\bin; ` 40 | make --version; ` 41 | patch --version; 42 | 43 | #-------------------------------------------------------------------- 44 | # Copy GNU tools from GnuWin32 from build image 45 | #-------------------------------------------------------------------- 46 | 47 | COPY diffutils C:/tools/diffutils 48 | RUN Register-SystemPath -Path C:\Tools\diffutils\bin; ` 49 | diff3 --version; 50 | 51 | COPY gperf C:/tools/gperf 52 | RUN Register-SystemPath -Path C:\Tools\gperf\bin; ` 53 | gperf --version; 54 | 55 | #-------------------------------------------------------------------- 56 | # Install Strawberry Perl x64 57 | # 58 | # ActivePerl is recommended in the WebKit documentation but won't 59 | # install into a docker container. Also its not free so can't 60 | # technically use it for a build-bot. 61 | #-------------------------------------------------------------------- 62 | 63 | ENV PERL_VERSION 5.32.1.1 64 | 65 | RUN Install-Perl -Version $env:PERL_VERSION -InstallationPath C:\tools\perl; 66 | 67 | #-------------------------------------------------------------------- 68 | # Install Python 3 69 | #-------------------------------------------------------------------- 70 | 71 | ENV PYTHON3_VERSION 3.12.10 72 | ENV PYTHON3_PIP_VERSION 25.1.1 73 | 74 | RUN Install-Python ` 75 | -Version $env:PYTHON3_VERSION ` 76 | -PipVersion $env:PYTHON3_PIP_VERSION ` 77 | -InstallationPath C:\tools\python3; 78 | RUN copy-item C:\tools\python3\python.exe C:\tools\python3\python3.exe 79 | 80 | #-------------------------------------------------------------------- 81 | # Install pywin32 for Python 3 82 | #-------------------------------------------------------------------- 83 | 84 | ENV PYWIN32_VERSION 310 85 | 86 | RUN Write-Host Write-Host 'Installing pywin32 ...'; ` 87 | pip3 install -q ('pywin32=={0}' -f $env:PYWIN32_VERSION); ` 88 | pip3 show pywin32; 89 | 90 | #-------------------------------------------------------------------- 91 | # Install Ruby 92 | #-------------------------------------------------------------------- 93 | 94 | # Locked version due to later versions not installing in container 95 | ENV RUBY_VERSION 3.1.3-1 96 | 97 | RUN Install-Ruby -Version $env:RUBY_VERSION -InstallationPath C:\tools\ruby; 98 | 99 | #-------------------------------------------------------------------- 100 | # Install webrick gem 101 | #-------------------------------------------------------------------- 102 | 103 | ENV WEBRICK_VERSION 1.9.1 104 | 105 | RUN gem install webrick -v $env:WEBRICK_VERSION 106 | 107 | #-------------------------------------------------------------------- 108 | # Install CMake 109 | #-------------------------------------------------------------------- 110 | 111 | ENV CMAKE_VERSION 3.31.7 112 | 113 | RUN Install-CMake -Version $env:CMAKE_VERSION -InstallationPath C:\tools\cmake; 114 | 115 | #-------------------------------------------------------------------- 116 | # Install Ninja build system 117 | #-------------------------------------------------------------------- 118 | 119 | ENV NINJA_VERSION 1.12.1 120 | 121 | RUN Install-Ninja -Version $env:NINJA_VERSION -InstallationPath C:\tools\ninja; 122 | 123 | #-------------------------------------------------------------------- 124 | # Install NuGet CLI 125 | #-------------------------------------------------------------------- 126 | 127 | ENV NUGET_VERSION 6.13.2 128 | 129 | RUN Install-NuGet -Version $env:NUGET_VERSION -InstallationPath C:\tools\nuget; 130 | 131 | #-------------------------------------------------------------------- 132 | # Install XAMPP 133 | #-------------------------------------------------------------------- 134 | 135 | # Locked version due to later versions not installing in container 136 | ENV XAMPP_VERSION 8.1.6 137 | 138 | RUN choco install xampp-81 --confirm --version=$env:XAMPP_VERSION; ` 139 | Update-XamppPerlLocation -perlPath C:\tools\perl; ` 140 | Update-XamppPythonLocation -pythonPath C:\tools\python3; 141 | 142 | #-------------------------------------------------------------------- 143 | # Install Fonts 144 | #-------------------------------------------------------------------- 145 | 146 | RUN Install-AhemFont; 147 | -------------------------------------------------------------------------------- /tools/diffutils/bin/cmp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/cmp.exe -------------------------------------------------------------------------------- /tools/diffutils/bin/diff.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/diff.exe -------------------------------------------------------------------------------- /tools/diffutils/bin/diff3.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/diff3.exe -------------------------------------------------------------------------------- /tools/diffutils/bin/libiconv2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/libiconv2.dll -------------------------------------------------------------------------------- /tools/diffutils/bin/libintl3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/libintl3.dll -------------------------------------------------------------------------------- /tools/diffutils/bin/sdiff.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/diffutils/bin/sdiff.exe -------------------------------------------------------------------------------- /tools/gperf/bin/gperf.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/gperf/bin/gperf.exe -------------------------------------------------------------------------------- /tools/manifest.tmpl: -------------------------------------------------------------------------------- 1 | image: webkitdev/tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} 2 | {{#if build.tags}} 3 | tags: 4 | {{#each build.tags}} 5 | - {{this}} 6 | {{/each}} 7 | {{/if}} 8 | manifests: 9 | - 10 | image: webkitdev/tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}1809 11 | platform: 12 | architecture: amd64 13 | os: windows 14 | version: 1809 15 | - 16 | image: webkitdev/tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}2022 17 | platform: 18 | architecture: amd64 19 | os: windows 20 | version: 2022 21 | -------------------------------------------------------------------------------- /tools/msys2/usr/bin/cmp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/cmp.exe -------------------------------------------------------------------------------- /tools/msys2/usr/bin/make.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/make.exe -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-2.0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-2.0.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-atomic-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-atomic-1.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-charset-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-charset-1.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-gcc_s-seh-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-gcc_s-seh-1.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-gfortran-5.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-gfortran-5.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-gomp-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-gomp-1.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-iconv-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-iconv-2.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-intl-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-intl-8.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-quadmath-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-quadmath-0.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/msys-stdc++-6.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/msys-stdc++-6.dll -------------------------------------------------------------------------------- /tools/msys2/usr/bin/patch.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WebKitForWindows/docker-webkit-dev/cc43c74e6c82f833152e140aedfed6a5070c7a86/tools/msys2/usr/bin/patch.exe --------------------------------------------------------------------------------