From 605a048b585cdfe71816b81898142b6cc9a0ebcc Mon Sep 17 00:00:00 2001 From: Anbraten Date: Thu, 1 Sep 2022 01:52:52 +0200 Subject: [PATCH] Use versioned docs (#1145) --- docs/docs/10-intro.md | 2 +- docs/docs/20-usage/20-pipeline-syntax.md | 24 +- docs/docs/20-usage/25-multi-pipeline.md | 7 +- docs/docs/20-usage/45-cron.md | 2 +- docs/docs/20-usage/51-plugins/10-plugins.md | 2 +- docs/docs/20-usage/70-volumes.md | 2 +- docs/docs/20-usage/71-project-settings.md | 2 +- docs/docs/30-administration/00-setup.md | 18 +- .../30-administration/10-server-config.md | 4 +- .../11-forges/10-overview.md | 4 +- .../docs/30-administration/15-agent-config.md | 2 +- .../22-backends/10-docker.md | 2 +- .../30-administration/22-backends/20-local.md | 4 +- docs/docs/30-administration/70-proxy.md | 2 +- docs/docs/91-migrations.md | 8 +- .../docs/92-development/01-getting-started.md | 2 +- docs/docs/92-development/03-ui.md | 4 +- docs/docs/92-development/04-docs.md | 2 +- docs/docusaurus.config.js | 16 + docs/versioned_docs/version-0.15/10-intro.md | 87 +++ .../version-0.15/20-usage/10-intro.md | 76 +++ .../20-usage/20-pipeline-syntax.md | 498 ++++++++++++++++++ .../20-usage/22-conditional-execution.md | 183 +++++++ .../20-usage/25-multi-pipeline.md | 137 +++++ .../version-0.15/20-usage/30-matrix-builds.md | 113 ++++ .../version-0.15/20-usage/40-secrets.md | 134 +++++ .../version-0.15/20-usage/41-registries.md | 3 + .../version-0.15/20-usage/50-environment.md | 199 +++++++ .../20-usage/51-plugins/10-plugins.md | 35 ++ .../20-usage/51-plugins/20-sample-plugin.md | 60 +++ .../20-usage/51-plugins/_category_.yml | 4 + .../version-0.15/20-usage/60-services.md | 79 +++ .../version-0.15/20-usage/70-volumes.md | 25 + .../20-usage/71-project-settings.md | 36 ++ .../version-0.15/20-usage/80-badges.md | 18 + .../version-0.15/20-usage/_category_.yml | 4 + .../20-usage/project-settings.png | Bin 0 -> 25969 bytes .../version-0.15/20-usage/repo-list.png | Bin 0 -> 21355 bytes .../30-administration/00-setup.md | 141 +++++ .../30-administration/10-server-config.md | 317 +++++++++++ .../30-administration/11-vcs/10-overview.md | 15 + .../30-administration/11-vcs/20-github.md | 62 +++ .../30-administration/11-vcs/30-gitea.md | 65 +++ .../30-administration/11-vcs/40-gitlab.md | 57 ++ .../30-administration/11-vcs/50-bitbucket.md | 64 +++ .../11-vcs/60-bitbucket_server.md | 141 +++++ .../30-administration/11-vcs/70-gogs.md | 35 ++ .../30-administration/11-vcs/80-coding.md | 50 ++ .../30-administration/11-vcs/_category_.yml | 3 + .../30-administration/11-vcs/gitea_oauth.gif | Bin 0 -> 132331 bytes .../30-administration/11-vcs/github_oauth.png | Bin 0 -> 26042 bytes .../30-administration/15-agent-config.md | 151 ++++++ .../30-administration/30-database.md | 67 +++ .../version-0.15/30-administration/60-ssl.md | 131 +++++ .../30-administration/70-proxy.md | 97 ++++ .../30-administration/80-kubernetes.md | 213 ++++++++ .../30-administration/90-prometheus.md | 67 +++ .../30-administration/_category_.yml | 4 + docs/versioned_docs/version-0.15/40-cli.md | 3 + .../version-0.15/80-downloads.md | 27 + .../version-0.15/91-migrations.md | 78 +++ .../versioned_docs/version-0.15/92-awesome.md | 27 + .../92-development/01-getting-started.md | 127 +++++ .../version-0.15/92-development/03-ui.md | 31 ++ .../version-0.15/92-development/04-docs.md | 20 + .../92-development/05-architecture.md | 9 + .../version-0.15/92-development/06-guides.md | 35 ++ .../92-development/_category_.yml | 4 + .../version-0.15/92-development/ui-proxy.svg | 16 + .../92-development/vscode-debug.png | Bin 0 -> 17502 bytes .../92-development/vscode-run-test.png | Bin 0 -> 11440 bytes .../woodpecker-architecture.png | Bin 0 -> 62587 bytes .../version-0.15/woodpecker.png | Bin 0 -> 71639 bytes .../version-0.15-sidebars.json | 8 + docs/versions.json | 3 + 75 files changed, 3823 insertions(+), 45 deletions(-) create mode 100644 docs/versioned_docs/version-0.15/10-intro.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/10-intro.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/20-pipeline-syntax.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/22-conditional-execution.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/25-multi-pipeline.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/30-matrix-builds.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/40-secrets.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/41-registries.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/50-environment.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/51-plugins/10-plugins.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/51-plugins/20-sample-plugin.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/51-plugins/_category_.yml create mode 100644 docs/versioned_docs/version-0.15/20-usage/60-services.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/70-volumes.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/71-project-settings.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/80-badges.md create mode 100644 docs/versioned_docs/version-0.15/20-usage/_category_.yml create mode 100644 docs/versioned_docs/version-0.15/20-usage/project-settings.png create mode 100644 docs/versioned_docs/version-0.15/20-usage/repo-list.png create mode 100644 docs/versioned_docs/version-0.15/30-administration/00-setup.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/10-server-config.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/10-overview.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/20-github.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/30-gitea.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/40-gitlab.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/50-bitbucket.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/60-bitbucket_server.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/70-gogs.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/80-coding.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/_category_.yml create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/gitea_oauth.gif create mode 100644 docs/versioned_docs/version-0.15/30-administration/11-vcs/github_oauth.png create mode 100644 docs/versioned_docs/version-0.15/30-administration/15-agent-config.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/30-database.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/60-ssl.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/70-proxy.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/80-kubernetes.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/90-prometheus.md create mode 100644 docs/versioned_docs/version-0.15/30-administration/_category_.yml create mode 100644 docs/versioned_docs/version-0.15/40-cli.md create mode 100644 docs/versioned_docs/version-0.15/80-downloads.md create mode 100644 docs/versioned_docs/version-0.15/91-migrations.md create mode 100644 docs/versioned_docs/version-0.15/92-awesome.md create mode 100644 docs/versioned_docs/version-0.15/92-development/01-getting-started.md create mode 100644 docs/versioned_docs/version-0.15/92-development/03-ui.md create mode 100644 docs/versioned_docs/version-0.15/92-development/04-docs.md create mode 100644 docs/versioned_docs/version-0.15/92-development/05-architecture.md create mode 100644 docs/versioned_docs/version-0.15/92-development/06-guides.md create mode 100644 docs/versioned_docs/version-0.15/92-development/_category_.yml create mode 100644 docs/versioned_docs/version-0.15/92-development/ui-proxy.svg create mode 100644 docs/versioned_docs/version-0.15/92-development/vscode-debug.png create mode 100644 docs/versioned_docs/version-0.15/92-development/vscode-run-test.png create mode 100644 docs/versioned_docs/version-0.15/92-development/woodpecker-architecture.png create mode 100644 docs/versioned_docs/version-0.15/woodpecker.png create mode 100644 docs/versioned_sidebars/version-0.15-sidebars.json create mode 100644 docs/versions.json diff --git a/docs/docs/10-intro.md b/docs/docs/10-intro.md index 8fb62a914..a75c12f5d 100644 --- a/docs/docs/10-intro.md +++ b/docs/docs/10-intro.md @@ -84,4 +84,4 @@ pipeline: template: config/k8s/service.yml ``` -See [plugin docs](/docs/usage/plugins/plugins). +See [plugin docs](./20-usage/51-plugins/10-plugins.md). diff --git a/docs/docs/20-usage/20-pipeline-syntax.md b/docs/docs/20-usage/20-pipeline-syntax.md index c1978424c..dcbdf32ee 100644 --- a/docs/docs/20-usage/20-pipeline-syntax.md +++ b/docs/docs/20-usage/20-pipeline-syntax.md @@ -213,7 +213,7 @@ Example registry hostname matching logic: ##### Global registry support -To make a private registry globally available check the [server configuration docs](/docs/administration/server-config#global-registry-setting). +To make a private registry globally available check the [server configuration docs](../30-administration/10-server-config.md#global-registry-setting). ##### GCR registry support @@ -254,13 +254,13 @@ docker run --entrypoint=build.sh golang Woodpecker provides the ability to pass environment variables to individual pipeline steps. -For more details check the [environment docs](/docs/usage/environment/). +For more details check the [environment docs](./50-environment.md). ### `secrets` Woodpecker provides the ability to store named parameters external to the YAML configuration file, in a central secret store. These secrets can be passed to individual steps of the pipeline at runtime. -For more details check the [secrets docs](/docs/usage/secrets/). +For more details check the [secrets docs](./40-secrets.md). ### `when` - Conditional Execution @@ -380,7 +380,7 @@ when: cron: sync_* # name of your cron job ``` -[Read more about cron](/docs/usage/cron) +[Read more about cron](./45-cron.md) #### `tag` @@ -410,7 +410,7 @@ pipeline: #### `platform` :::note -This condition should be used in conjunction with a [matrix](/docs/usage/matrix-pipelines#example-matrix-pipeline-using-multiple-platforms) pipeline as a regular pipeline will only executed by a single agent which only has one arch. +This condition should be used in conjunction with a [matrix](./30-matrix-pipelines.md#example-matrix-pipeline-using-multiple-platforms) pipeline as a regular pipeline will only executed by a single agent which only has one arch. ::: Execute a step for a specific platform: @@ -516,19 +516,19 @@ In the above example, the `frontend` and `backend` steps are executed in paralle Woodpecker gives the ability to define Docker volumes in the YAML. You can use this parameter to mount files or folders on the host machine into your containers. -For more details check the [volumes docs](/docs/usage/volumes/). +For more details check the [volumes docs](./70-volumes.md). ### `detach` Woodpecker gives the ability to detach steps to run them in background until the pipeline finishes. -For more details check the [service docs](/docs/usage/services#detachment). +For more details check the [service docs](./60-services.md#detachment). ## `services` Woodpecker can provide service containers. They can for example be used to run databases or cache containers during the execution of pipeline. -For more details check the [services docs](/docs/usage/services/). +For more details check the [services docs](./60-services.md). ## `workspace` @@ -598,7 +598,7 @@ git clone https://github.com/octocat/hello-world \ Woodpecker has integrated support for matrix builds. Woodpecker executes a separate build task for each combination in the matrix, allowing you to build and test a single commit against multiple configurations. -For more details check the [matrix build docs](/docs/usage/matrix-pipelines/). +For more details check the [matrix build docs](./30-matrix-pipelines.md). ## `platform` @@ -624,7 +624,7 @@ pipeline: You can set labels for your pipeline to select an agent to execute the pipeline on. An agent will pick up and run a pipeline when **every** label assigned to a pipeline matches the agents labels. -To set additional agent labels check the [agent configuration options](/docs/administration/agent-config#woodpecker_filter_labels). Agents will have at least three default labels: `platform=agent-os/agent-arch`, `hostname=my-agent` and `repo=*`. Agents can use a `*` as a wildcard for a label. For example `repo=*` will match every repo. +To set additional agent labels check the [agent configuration options](../30-administration/15-agent-config.md#woodpecker_filter_labels). Agents will have at least three default labels: `platform=agent-os/agent-arch`, `hostname=my-agent` and `repo=*`. Agents can use a `*` as a wildcard for a label. For example `repo=*` will match every repo. Pipeline labels with an empty value will be ignored. By default each pipeline has at least the `repo=your-user/your-repo-name` label. If you have set the [platform attribute](#platform) for your pipeline it will have a label like `platform=your-os/your-arch` as well. @@ -649,7 +649,7 @@ pipeline: Woodpecker supports [YAML anchors & aliases](https://yaml.org/spec/1.2.2/#3222-anchors-and-aliases) in the pipeline configuration. These can be used as variables to not repeat yourself. -For more details and examples check the [Advanced YAML syntax docs](/docs/usage/advanced-yaml-syntax) +For more details and examples check the [Advanced YAML syntax docs](./35-advanced-yaml-syntax.md) ## `clone` @@ -732,7 +732,7 @@ Woodpecker supports to define multiple pipelines for a repository. Those pipelin Woodpecker gives the ability to configure privileged mode in the YAML. You can use this parameter to launch containers with escalated capabilities. -> Privileged mode is only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](/docs/usage/project-settings#trusted) to enable trusted mode. +> Privileged mode is only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. ```diff pipeline: diff --git a/docs/docs/20-usage/25-multi-pipeline.md b/docs/docs/20-usage/25-multi-pipeline.md index 9e5af6934..81988831c 100644 --- a/docs/docs/20-usage/25-multi-pipeline.md +++ b/docs/docs/20-usage/25-multi-pipeline.md @@ -6,7 +6,7 @@ This Feature is only available for GitHub, Gitea & GitLab repositories. Follow [ By default, Woodpecker looks for the pipeline definition in `.woodpecker.yml` in the project root. -The Multi-Pipeline feature allows the pipeline to be split into several files and placed in the `.woodpecker/` folder. Only `.yml` files will be used and files in any subfolders like `.woodpecker/sub-folder/test.yml` will be ignored. You can set some custom path like `.my-ci/pipelines/` instead of `.woodpecker/` in the [project settings](/docs/usage/project-settings). +The Multi-Pipeline feature allows the pipeline to be split into several files and placed in the `.woodpecker/` folder. Only `.yml` files will be used and files in any subfolders like `.woodpecker/sub-folder/test.yml` will be ignored. You can set some custom path like `.my-ci/pipelines/` instead of `.woodpecker/` in the [project settings](./71-project-settings.md). ## Rational @@ -15,9 +15,10 @@ The Multi-Pipeline feature allows the pipeline to be split into several files an - utilizing more agents to speed up build ## Example multi-pipeline definition + :::warning -Please note that files are only shared between steps of the same pipeline (see [File changes are incremental](/docs/usage/pipeline-syntax#file-changes-are-incremental)). That means you cannot access artifacts e.g. from the `build` pipeline below in the `deploy` pipeline. -If you still need to pass artifacts between the pipelines you need use storage [plugins](/docs/usage/plugins/plugins) (e.g. one which stores files in an Amazon S3 bucket). +Please note that files are only shared between steps of the same pipeline (see [File changes are incremental](./20-pipeline-syntax.md#file-changes-are-incremental)). That means you cannot access artifacts e.g. from the `build` pipeline below in the `deploy` pipeline. +If you still need to pass artifacts between the pipelines you need use storage [plugins](./51-plugins/10-plugins.md) (e.g. one which stores files in an Amazon S3 bucket). ::: ```bash diff --git a/docs/docs/20-usage/45-cron.md b/docs/docs/20-usage/45-cron.md index 064137979..a5006d807 100644 --- a/docs/docs/20-usage/45-cron.md +++ b/docs/docs/20-usage/45-cron.md @@ -4,7 +4,7 @@ To configure cron jobs you need at least push access to the repository. :::warning By default pipelines triggered by cron jobs wont execute any steps in pipelines, as they are not part of the default event filter and you explicitly need to set a `event: cron` filter. -Read more at: [pipeline-syntax#event](/docs/usage/pipeline-syntax#event) +Read more at: [pipeline-syntax#event](./20-pipeline-syntax.md#event) ::: ## Add a new cron job diff --git a/docs/docs/20-usage/51-plugins/10-plugins.md b/docs/docs/20-usage/51-plugins/10-plugins.md index df5ebdb64..7a7baac6e 100644 --- a/docs/docs/20-usage/51-plugins/10-plugins.md +++ b/docs/docs/20-usage/51-plugins/10-plugins.md @@ -32,4 +32,4 @@ Plugins are just pipeline steps. They share the build workspace, mounted as a vo ## Creating a plugin -See a [detailed plugin example](/docs/usage/plugins/sample-plugin). +See a [detailed plugin example](./20-sample-plugin.md). diff --git a/docs/docs/20-usage/70-volumes.md b/docs/docs/20-usage/70-volumes.md index 4fc69d6b8..2e9100a33 100644 --- a/docs/docs/20-usage/70-volumes.md +++ b/docs/docs/20-usage/70-volumes.md @@ -3,7 +3,7 @@ Woodpecker gives the ability to define Docker volumes in the YAML. You can use this parameter to mount files or folders on the host machine into your containers. :::note -Volumes are only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](/docs/usage/project-settings#trusted) to enable trusted mode. +Volumes are only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. ::: ```diff diff --git a/docs/docs/20-usage/71-project-settings.md b/docs/docs/20-usage/71-project-settings.md index 6e13e616d..c2d434da1 100644 --- a/docs/docs/20-usage/71-project-settings.md +++ b/docs/docs/20-usage/71-project-settings.md @@ -6,7 +6,7 @@ As the owner of a project in Woodpecker you can change project related settings ## Pipeline path -The path to the pipeline config file or folder. By default it is left empty which will use the following configuration resolution `.woodpecker/*.yml` -> `.woodpecker.yml` -> `.drone.yml`. If you set a custom path Woodpecker tries to load your configuration or fails if no configuration could be found at the specified location. To use a [multi pipeline](/docs/usage/multi-pipeline) you have to change it to a folder path ending with a `/` like `.woodpecker/`. +The path to the pipeline config file or folder. By default it is left empty which will use the following configuration resolution `.woodpecker/*.yml` -> `.woodpecker.yml` -> `.drone.yml`. If you set a custom path Woodpecker tries to load your configuration or fails if no configuration could be found at the specified location. To use a [multi pipeline](./25-multi-pipeline.md) you have to change it to a folder path ending with a `/` like `.woodpecker/`. ## Repository hooks diff --git a/docs/docs/30-administration/00-setup.md b/docs/docs/30-administration/00-setup.md index f7c549207..5176d201d 100644 --- a/docs/docs/30-administration/00-setup.md +++ b/docs/docs/30-administration/00-setup.md @@ -1,6 +1,7 @@ # Setup A Woodpecker deployment consists of two parts: + - A server which is the heart of Woodpecker and ships the webinterface. - Next to one server you can deploy any number of agents which will run the pipelines. @@ -13,9 +14,10 @@ A Woodpecker deployment consists of two parts: ## Installation You can install Woodpecker on multiple ways: -- Using [docker-compose](/docs/administration/setup#docker-compose) with the official [container images](/docs/downloads#docker-images) -- By deploying to a [Kubernetes](/docs/administration/kubernetes) with manifests or Woodpeckers official Helm charts -- Using [binaries](/docs/downloads) + +- Using [docker-compose](#docker-compose) with the official [container images](../80-downloads.md#docker-images) +- By deploying to a [Kubernetes](./80-kubernetes.md) with manifests or Woodpeckers official Helm charts +- Using [binaries](../80-downloads.md) ### docker-compose @@ -122,20 +124,20 @@ services: Authentication is done using OAuth and is delegated to your forge which is configured by using environment variables. The example above demonstrates basic GitHub integration. -See the complete reference for all supported forges [here](/docs/administration/forges/overview). +See the complete reference for all supported forges [here](./11-forges/10-overview.md). ## Database -By default Woodpecker uses a sqlite database which requires zero installation or configuration. See the [database settings](/docs/administration/database) page to further configure it or use MySQL or Postgres. +By default Woodpecker uses a sqlite database which requires zero installation or configuration. See the [database settings](./30-database.md) page to further configure it or use MySQL or Postgres. ## SSL -Woodpecker supports ssl configuration by using Let's encrypt or by using own certificates. See the [SSL guide](/docs/administration/ssl). +Woodpecker supports ssl configuration by using Let's encrypt or by using own certificates. See the [SSL guide](./60-ssl.md). ## Metrics -A [Prometheus endpoint](/docs/administration/prometheus) is exposed. +A [Prometheus endpoint](./90-prometheus.md) is exposed. ## Behind a proxy -See the [proxy guide](/docs/administration/proxy) if you want to see a setup behind Apache, Nginx, Caddy or ngrok. +See the [proxy guide](./70-proxy.md) if you want to see a setup behind Apache, Nginx, Caddy or ngrok. diff --git a/docs/docs/30-administration/10-server-config.md b/docs/docs/30-administration/10-server-config.md index c3cde2d3e..d769dea46 100644 --- a/docs/docs/30-administration/10-server-config.md +++ b/docs/docs/30-administration/10-server-config.md @@ -4,7 +4,7 @@ Registration is closed by default. While disabled an administrator needs to add new users manually (exp. `woodpecker-cli user add`). -If registration is open every user with an account at the configured [forges](/docs/administration/forges/overview) can login to Woodpecker. +If registration is open every user with an account at the configured [forges](./11-forges/10-overview.md) can login to Woodpecker. This example enables open registration for users that are members of approved organizations: ```diff @@ -354,7 +354,7 @@ Example: `WOODPECKER_LIMIT_CPU_SET=1,2` ### `WOODPECKER_CONFIG_SERVICE_ENDPOINT` > Default: `` -Specify a configuration service endpoint, see [Configuration Extension](/docs/administration/external-configuration-api) +Specify a configuration service endpoint, see [Configuration Extension](./100-external-configuration-api.md) --- diff --git a/docs/docs/30-administration/11-forges/10-overview.md b/docs/docs/30-administration/11-forges/10-overview.md index 7ce694c51..5d5e11122 100644 --- a/docs/docs/30-administration/11-forges/10-overview.md +++ b/docs/docs/30-administration/11-forges/10-overview.md @@ -9,7 +9,7 @@ | Event: Pull-Request | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | | Event: Deploy | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | | OAuth | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | -| [Multi pipeline](/docs/usage/multi-pipeline) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | -| [when.path filter](/docs/usage/pipeline-syntax#path) | :white_check_mark: | :white_check_mark:¹ | :white_check_mark: | :x: | :x: | :x: | :x: | +| [Multi pipeline](../../20-usage/25-multi-pipeline.md) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | +| [when.path filter](../../20-usage/20-pipeline-syntax.md#path) | :white_check_mark: | :white_check_mark:¹ | :white_check_mark: | :x: | :x: | :x: | :x: | ¹) [except for pull requests](https://github.com/woodpecker-ci/woodpecker/issues/754) diff --git a/docs/docs/30-administration/15-agent-config.md b/docs/docs/30-administration/15-agent-config.md index 50c35222a..ed101fbe7 100644 --- a/docs/docs/30-administration/15-agent-config.md +++ b/docs/docs/30-administration/15-agent-config.md @@ -88,7 +88,7 @@ Configures the number of parallel builds. ### `WOODPECKER_FILTER_LABELS` > Default: empty -Configures labels to filter pipeline pick up. Use a list of key-value pairs like `key=value,second-key=*`. `*` can be used as a wildcard. By default agents provide three additional labels `platform=os/arch`, `hostname=my-agent` and `repo=*` which can be overwritten if needed. To learn how labels work check out the [pipeline syntax page](/docs/usage/pipeline-syntax#labels). +Configures labels to filter pipeline pick up. Use a list of key-value pairs like `key=value,second-key=*`. `*` can be used as a wildcard. By default agents provide three additional labels `platform=os/arch`, `hostname=my-agent` and `repo=*` which can be overwritten if needed. To learn how labels work check out the [pipeline syntax page](../20-usage/20-pipeline-syntax.md#labels). ### `WOODPECKER_HEALTHCHECK` > Default: `true` diff --git a/docs/docs/30-administration/22-backends/10-docker.md b/docs/docs/30-administration/22-backends/10-docker.md index f73d3c7ca..ff2fb2491 100644 --- a/docs/docs/30-administration/22-backends/10-docker.md +++ b/docs/docs/30-administration/22-backends/10-docker.md @@ -16,7 +16,7 @@ Enable IPv6 for the networks used by pipeline containers (steps). Make sure you ## Docker credentials -Woodpecker supports [Docker credentials](https://github.com/docker/docker-credential-helpers) to securely store registry credentials. Install your corresponding credential helper and configure it in your Docker config file passed via [`WOODPECKER_DOCKER_CONFIG`](/docs/administration/server-config#woodpecker_docker_config). +Woodpecker supports [Docker credentials](https://github.com/docker/docker-credential-helpers) to securely store registry credentials. Install your corresponding credential helper and configure it in your Docker config file passed via [`WOODPECKER_DOCKER_CONFIG`](../10-server-config.md#woodpecker_docker_config). To add your credential helper to the Woodpecker server container you could use the following code to build a custom image: diff --git a/docs/docs/30-administration/22-backends/20-local.md b/docs/docs/30-administration/22-backends/20-local.md index ee91e2e52..5caf79432 100644 --- a/docs/docs/30-administration/22-backends/20-local.md +++ b/docs/docs/30-administration/22-backends/20-local.md @@ -95,8 +95,8 @@ pipeline: ### Using labels to filter tasks You can use the [agent configuration -options](/docs/administration/agent-config#woodpecker_filter_labels) and the -[pipeline syntax](/docs/usage/pipeline-syntax#labels) to only run certain +options](../15-agent-config.md#woodpecker_filter_labels) and the +[pipeline syntax](../../20-usage/20-pipeline-syntax.md#labels) to only run certain pipelines on certain agents. Example: Define a `label` `type` with value `exec` for a particular agent: diff --git a/docs/docs/30-administration/70-proxy.md b/docs/docs/30-administration/70-proxy.md index b3cfb3425..a9bd0a906 100644 --- a/docs/docs/30-administration/70-proxy.md +++ b/docs/docs/30-administration/70-proxy.md @@ -93,7 +93,7 @@ woodpeckeragent.example.com { ``` :::note -Above configuration shows how to create reverse-proxies for web and agent communication. If your agent uses SSL do not forget to enable [WOODPECKER_GRPC_SECURE](/docs/administration/agent-config#woodpecker_grpc_secure). +Above configuration shows how to create reverse-proxies for web and agent communication. If your agent uses SSL do not forget to enable [WOODPECKER_GRPC_SECURE](./15-agent-config.md#woodpecker_grpc_secure). ::: ## Ngrok diff --git a/docs/docs/91-migrations.md b/docs/docs/91-migrations.md index 80ff6633e..a450da22b 100644 --- a/docs/docs/91-migrations.md +++ b/docs/docs/91-migrations.md @@ -4,8 +4,8 @@ Some versions need some changes to the server configuration or the pipeline conf ## 1.0.0 -- The signature used to verify extensions calls (like those used for the [config-extension](/docs/administration/external-configuration-api)) done by the Woodpecker server switched from using a shared-secret HMac to an ed25519 key-pair. Read more about it at the [config-extensions](/docs/administration/external-configuration-api) documentation. -- Refactored support of old agent filter labels and expression. Learn how to use the new [filter](/docs/usage/pipeline-syntax#labels). +- The signature used to verify extensions calls (like those used for the [config-extension](./30-administration/100-external-configuration-api.md)) done by the Woodpecker server switched from using a shared-secret HMac to an ed25519 key-pair. Read more about it at the [config-extensions](./30-administration/100-external-configuration-api.md) documentation. +- Refactored support of old agent filter labels and expression. Learn how to use the new [filter](./20-usage/20-pipeline-syntax.md#labels) - Renamed step environment variable `CI_SYSTEM_ARCH` to `CI_SYSTEM_PLATFORM`. Same applies for the cli exec variable. ## 0.15.0 @@ -16,7 +16,7 @@ Some versions need some changes to the server configuration or the pipeline conf Only projects created after updating will have an empty value by default. Existing projects will stick to the current pipeline path which is `.drone.yml` in most cases. - Read more about it at the [Project Settings](/docs/usage/project-settings#pipeline-path) + Read more about it at the [Project Settings](./20-usage/71-project-settings.md#pipeline-path) - From version `0.15.0` ongoing there will be three types of docker images: `latest`, `next` and `x.x.x` with an alpine variant for each type like `latest-alpine`. If you used `latest` before to try pre-release features you should switch to `next` after this release. @@ -49,7 +49,7 @@ Some versions need some changes to the server configuration or the pipeline conf - CI_SOURCE_BRANCH => use CI_COMMIT_SOURCE_BRANCH - CI_TARGET_BRANCH => use CI_COMMIT_TARGET_BRANCH - For all available variables and their descriptions have a look at [built-in-environment-variables](/docs/usage/environment#built-in-environment-variables). + For all available variables and their descriptions have a look at [built-in-environment-variables](./20-usage/50-environment.md#built-in-environment-variables). - Prometheus metrics have been changed from `drone_*` to `woodpecker_*` diff --git a/docs/docs/92-development/01-getting-started.md b/docs/docs/92-development/01-getting-started.md index 55a47db9f..a9151efc3 100644 --- a/docs/docs/92-development/01-getting-started.md +++ b/docs/docs/92-development/01-getting-started.md @@ -75,7 +75,7 @@ WOODPECKER_HEALTHCHECK=false ### Setup O-Auth -Create an O-Auth app for your forge as describe in the [forges documentation](/docs/administration/forges/overview). If you set `WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000` you can use that address with the path as explained for the specific forge to login without the need for a public address. For example for Github you would use `http://localhost:8000/authorize` as authorization callback URL. +Create an O-Auth app for your forge as describe in the [forges documentation](../30-administration/11-forges/10-overview.md). If you set `WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000` you can use that address with the path as explained for the specific forge to login without the need for a public address. For example for Github you would use `http://localhost:8000/authorize` as authorization callback URL. ## Developing with VS-Code diff --git a/docs/docs/92-development/03-ui.md b/docs/docs/92-development/03-ui.md index 27eac4aa8..9491a7160 100644 --- a/docs/docs/92-development/03-ui.md +++ b/docs/docs/92-development/03-ui.md @@ -1,6 +1,6 @@ # UI Development -To develop the UI you need to install [Node.js and Yarn](/docs/development/getting-started#nodejs--yarn). In addition it is recommended to use VS-Code with the recommended plugin selection to get features like auto-formatting, linting and typechecking. The UI is written with [Vue 3](https://v3.vuejs.org/) as Single-Page-Application accessing the Woodpecker REST api. +To develop the UI you need to install [Node.js and Yarn](./01-getting-started.md#nodejs--yarn). In addition it is recommended to use VS-Code with the recommended plugin selection to get features like auto-formatting, linting and typechecking. The UI is written with [Vue 3](https://v3.vuejs.org/) as Single-Page-Application accessing the Woodpecker REST api. ## Setup The UI code is placed in `web/`. Change to that folder in your terminal with `cd web/` and install all dependencies by running `yarn install`. For production builds the generated UI code is integrated into the Woodpecker server by using [go-embed](https://pkg.go.dev/embed). @@ -10,7 +10,7 @@ Testing UI changes would require us to rebuild the UI after each adjustment to t ![UI Proxy architecture](./ui-proxy.svg) Start the UI server locally with [hot-reloading](https://stackoverflow.com/a/41429055/8461267) by running: `yarn start`. To enable the forwarding of requests to the UI server you have to enable the dev-proxy inside the Woodpecker server by adding `WOODPECKER_DEV_WWW_PROXY=http://localhost:8010` to your `.env` file. -After starting the Woodpecker server as explained in the [debugging](/docs/development/getting-started#debugging) section, you should now be able to access the UI under [http://localhost:8000](http://localhost:8000). +After starting the Woodpecker server as explained in the [debugging](./01-getting-started.md#debugging) section, you should now be able to access the UI under [http://localhost:8000](http://localhost:8000). ## Tools and frameworks diff --git a/docs/docs/92-development/04-docs.md b/docs/docs/92-development/04-docs.md index b8fba9b08..5dbab03ce 100644 --- a/docs/docs/92-development/04-docs.md +++ b/docs/docs/92-development/04-docs.md @@ -2,7 +2,7 @@ The documentation is using docusaurus as framework. You can learn more about it from its [official documentation](https://docusaurus.io/docs/). -If you only want to change some text it probably is enough if you just search for the corresponding [Markdown](https://www.markdownguide.org/basic-syntax/) file inside the `docs/docs/` folder and adjust it. If you want to change larger parts and test the rendered documentation you can run docusaurus locally. Similarly to the UI you need to install [Node.js and Yarn](/docs/development/getting-started#nodejs--yarn). After that you can run and build docusaurus locally by using the following commands: +If you only want to change some text it probably is enough if you just search for the corresponding [Markdown](https://www.markdownguide.org/basic-syntax/) file inside the `docs/docs/` folder and adjust it. If you want to change larger parts and test the rendered documentation you can run docusaurus locally. Similarly to the UI you need to install [Node.js and Yarn](./01-getting-started.md#nodejs--yarn). After that you can run and build docusaurus locally by using the following commands: ```bash cd docs/ diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 04fc25d68..750999b2b 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -50,6 +50,10 @@ module.exports = { position: 'left', label: 'Awesome', }, + { + type: 'docsVersionDropdown', + position: 'right', + }, { href: 'https://github.com/woodpecker-ci/woodpecker', position: 'right', @@ -174,6 +178,18 @@ module.exports = { docs: { sidebarPath: require.resolve('./sidebars.js'), editUrl: 'https://github.com/woodpecker-ci/woodpecker/edit/master/docs/', + includeCurrentVersion: true, + lastVersion: '0.15', + versions: { + current: { + label: 'Next', + banner: 'unreleased', + }, + '0.15': { + label: '0.15.x', + banner: 'none', + }, + }, }, theme: { customCss: require.resolve('./src/css/custom.css'), diff --git a/docs/versioned_docs/version-0.15/10-intro.md b/docs/versioned_docs/version-0.15/10-intro.md new file mode 100644 index 000000000..694223534 --- /dev/null +++ b/docs/versioned_docs/version-0.15/10-intro.md @@ -0,0 +1,87 @@ +# Welcome to Woodpecker + +Woodpecker is a simple CI engine with great extensibility. It runs your pipelines inside [Docker](https://www.docker.com/) containers, so if you are already using them in your daily workflow, you'll love Woodpecker for sure. + +![woodpecker](woodpecker.png) + +## .woodpecker.yml + +- Place your pipeline in a file named `.woodpecker.yml` in your repository +- Pipeline steps can be named as you like +- Run any command in the commands section + +```yaml +# .woodpecker.yml +pipeline: + build: + image: debian + commands: + - echo "This is the build step" + a-test-step: + image: debian + commands: + - echo "Testing.." +``` + +### Build steps are containers + +- Define any Docker image as context + - either use your own and install the needed tools in custom Docker images, or + - search [Docker Hub](https://hub.docker.com/search?type=image) for images that are already tailored for your needs) +- List the commands that should be executed in your container, in order to build or test your application + +```diff +pipeline: + build: +- image: debian ++ image: mycompany/image-with-awscli + commands: + - aws help +``` + +### File changes are incremental + +- Woodpecker clones the source code in the beginning pipeline +- Changes to files are persisted through steps as the same volume is mounted to all steps + +```yaml +# .woodpecker.yml +pipeline: + build: + image: debian + commands: + - touch myfile + a-test-step: + image: debian + commands: + - cat myfile +``` + +## Plugins are straightforward + +- If you copy the same shell script from project to project +- Pack it into a plugin instead +- And make the yaml declarative +- Plugins are Docker images with your script as an entrypoint + +```Dockerfile +# Dockerfile +FROM laszlocloud/kubectl +COPY deploy /usr/local/deploy +ENTRYPOINT ["/usr/local/deploy"] +``` + +```bash +# deploy +kubectl apply -f $PLUGIN_TEMPLATE +``` + +```yaml +# .woodpecker.yml +pipeline: + deploy-to-k8s: + image: laszlocloud/my-k8s-plugin + template: config/k8s/service.yml +``` + +See [plugin docs](./20-usage/51-plugins/10-plugins.md). diff --git a/docs/versioned_docs/version-0.15/20-usage/10-intro.md b/docs/versioned_docs/version-0.15/20-usage/10-intro.md new file mode 100644 index 000000000..a227805c0 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/10-intro.md @@ -0,0 +1,76 @@ +# Getting started + +## Repository Activation + +To activate your project navigate to your account settings. You will see a list of repositories which can be activated with a simple toggle. When you activate your repository, Woodpecker automatically adds webhooks to your version control system (e.g. GitHub). + +Webhooks are used to trigger pipeline executions. When you push code to your repository, open a pull request, or create a tag, your version control system will automatically send a webhook to Woodpecker which will in turn trigger pipeline execution. + +![repository list](repo-list.png) + +> Required Permissions +> +>The user who enables a repo in Woodpecker must have `Admin` rights on that repo, so that Woodpecker can add the webhook. +> +> Note that manually creating webhooks yourself is not possible. This is because webhooks are signed using a per-repository secret key which is not exposed to end users. + +# Webhooks + +When you activate your repository Woodpecker automatically add webhooks to your version control system (e.g. GitHub). There is no manual configuration required. + +Webhooks are used to trigger pipeline executions. When you push code to your repository, open a pull request, or create a tag, your version control system will automatically send a webhook to Woodpecker which will in turn trigger pipeline execution. + +## Configuration + +To configure your pipeline you should place a `.woodpecker.yml` file in the root of your repository. The .woodpecker.yml file is used to define your pipeline steps. It is a superset of the widely used docker-compose file format. + +:::info + +Currently, only YAML 1.1 syntax is supported for pipeline configuration files. YAML 1.2 support is [planned for the future](https://github.com/woodpecker-ci/woodpecker/issues/517)! + +::: + +Example pipeline configuration: + +```yaml +pipeline: + build: + image: golang + commands: + - go get + - go build + - go test + +services: + postgres: + image: postgres:9.4.5 + environment: + - POSTGRES_USER=myapp +``` + +Example pipeline configuration with multiple, serial steps: + +```yaml +pipeline: + backend: + image: golang + commands: + - go get + - go build + - go test + + frontend: + image: node:6 + commands: + - npm install + - npm test + + notify: + image: plugins/slack + channel: developers + username: woodpecker +``` + +## Execution + +To trigger your first pipeline execution you can push code to your repository, open a pull request, or push a tag. Any of these events triggers a webhook from your version control system and execute your pipeline. diff --git a/docs/versioned_docs/version-0.15/20-usage/20-pipeline-syntax.md b/docs/versioned_docs/version-0.15/20-usage/20-pipeline-syntax.md new file mode 100644 index 000000000..31d253d47 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/20-pipeline-syntax.md @@ -0,0 +1,498 @@ +# Pipeline syntax + +The pipeline section defines a list of steps to build, test and deploy your code. Pipeline steps are executed serially, in the order in which they are defined. If a step returns a non-zero exit code, the pipeline immediately aborts and returns a failure status. + +Example pipeline: + +```yaml +pipeline: + backend: + image: golang + commands: + - go build + - go test + frontend: + image: node + commands: + - npm install + - npm run test + - npm run build +``` + +In the above example we define two pipeline steps, `frontend` and `backend`. The names of these steps are completely arbitrary. + + +## Global Pipeline Conditionals + +Woodpecker gives the ability to skip whole pipelines (not just steps) based on certain conditions. + +### `branches` +Woodpecker can skip commits based on the target branch. If the branch matches the `branches:` block the pipeline is executed, otherwise it is skipped. + +Example skipping a commit when the target branch is not master: + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + ++branches: master +``` + +Example matching multiple target branches: + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + ++branches: [ master, develop ] +``` + +Example uses glob matching: + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + ++branches: [ master, feature/* ] +``` + +Example includes branches: + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + ++branches: ++ include: [ master, feature/* ] +``` + +Example excludes branches: + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + ++branches: ++ exclude: [ develop, feature/* ] +``` + +### `platform` + +To configure your pipeline to only be executed on an agent with a specific platform, you can use the `platform` key. +Have a look at the official [go docs](https://go.dev/doc/install/source) for the available platforms. The syntax of the platform is `GOOS/GOARCH` like `linux/arm64` or `linux/amd64`. + +Example: + +Assuming we have two agents, one `arm` and one `amd64`. Previously this pipeline would have executed on **either agent**, as Woodpecker is not fussy about where it runs the pipelines. By setting the following option it will only be executed on an agent with the platform `linux/arm64`. + +```diff ++platform: linux/arm64 + + pipeline: + build: + image: golang + commands: + - go build + - go test +``` + +### Skip Commits + +Woodpecker gives the ability to skip individual commits by adding `[CI SKIP]` to the commit message. Note this is case-insensitive. + +```diff +git commit -m "updated README [CI SKIP]" +``` + +## `services` + +Woodpecker can provide service containers. They can for example be used to run databases or cache containers during the execution of pipeline. + +For more details check the [services docs](./60-services.md). + +## Steps + +Every step of your pipeline executes arbitrary commands inside a specified docker container. The defined commands are executed serially. +The associated commit of a current pipeline run is checked out with git to a workspace which is mounted to every step of the pipeline as the working directory. + +```diff + pipeline: + backend: + image: golang + commands: ++ - go build ++ - go test +``` + +### File changes are incremental + +- Woodpecker clones the source code in the beginning pipeline +- Changes to files are persisted through steps as the same volume is mounted to all steps + +```yaml +# .woodpecker.yml +pipeline: + build: + image: debian + commands: + - echo "test content" > myfile + a-test-step: + image: debian + commands: + - cat myfile +``` + +### `image` + +Woodpecker uses Docker images for the build environment, for plugins and for service containers. The image field is exposed in the container blocks in the Yaml: + +```diff + pipeline: + build: ++ image: golang:1.6 + commands: + - go build + - go test + + publish: ++ image: plugins/docker + repo: foo/bar + + services: + database: ++ image: mysql +``` + +Woodpecker supports any valid Docker image from any Docker registry: + +```text +image: golang +image: golang:1.7 +image: library/golang:1.7 +image: index.docker.io/library/golang +image: index.docker.io/library/golang:1.7 +``` + +Woodpecker does not automatically upgrade docker images. Example configuration to always pull the latest image when updates are available: + +```diff + pipeline: + build: + image: golang:latest ++ pull: true +``` + +#### Images from private registries + +You must provide registry credentials on the UI in order to pull private pipeline images defined in your Yaml configuration file. + +These credentials are never exposed to your pipeline, which means they cannot be used to push, and are safe to use with pull requests, for example. Pushing to a registry still require setting credentials for the appropriate plugin. + +Example configuration using a private image: + +```diff + pipeline: + build: ++ image: gcr.io/custom/golang + commands: + - go build + - go test +``` + +Woodpecker matches the registry hostname to each image in your yaml. If the hostnames match, the registry credentials are used to authenticate to your registry and pull the image. Note that registry credentials are used by the Woodpecker agent and are never exposed to your build containers. + +Example registry hostnames: + +- Image `gcr.io/foo/bar` has hostname `gcr.io` +- Image `foo/bar` has hostname `docker.io` +- Image `qux.com:8000/foo/bar` has hostname `qux.com:8000` + +Example registry hostname matching logic: + +- Hostname `gcr.io` matches image `gcr.io/foo/bar` +- Hostname `docker.io` matches `golang` +- Hostname `docker.io` matches `library/golang` +- Hostname `docker.io` matches `bradyrydzewski/golang` +- Hostname `docker.io` matches `bradyrydzewski/golang:latest` + +#### Global registry support + +To make a private registry globally available check the [server configuration docs](../30-administration/10-server-config.md#global-registry-setting). + +#### GCR registry support + +For specific details on configuring access to Google Container Registry, please view the docs [here](https://cloud.google.com/container-registry/docs/advanced-authentication#using_a_json_key_file). + +### `commands` + +Commands of every pipeline step are executed serially as if you would enter them into your local shell. + +```diff + pipeline: + backend: + image: golang + commands: ++ - go build ++ - go test +``` + +There is no magic here. The above commands are converted to a simple shell script. The commands in the above example are roughly converted to the below script: + +```diff +#!/bin/sh +set -e + +go build +go test +``` + +The above shell script is then executed as the docker entrypoint. The below docker command is an (incomplete) example of how the script is executed: + +``` +docker run --entrypoint=build.sh golang +``` + +> Please note that only build steps can define commands. You cannot use commands with plugins or services. + +### `environment` + +Woodpecker provides the ability to pass environment variables to individual pipeline steps. + +For more details check the [environment docs](./50-environment.md). + +### `secrets` + +Woodpecker provides the ability to store named parameters external to the Yaml configuration file, in a central secret store. These secrets can be passed to individual steps of the pipeline at runtime. + +For more details check the [secrets docs](./40-secrets.md). + +### `when` - Conditional Execution + +Woodpecker supports defining conditional pipeline steps in the `when` block. + +For more details check the [Conditional Step Execution](./22-conditional-execution.md). + +### `group` - Parallel execution + +Woodpecker supports parallel step execution for same-machine fan-in and fan-out. Parallel steps are configured using the `group` attribute. This instructs the pipeline runner to execute the named group in parallel. + +Example parallel configuration: + +```diff + pipeline: + backend: ++ group: build + image: golang + commands: + - go build + - go test + frontend: ++ group: build + image: node + commands: + - npm install + - npm run test + - npm run build + publish: + image: plugins/docker + repo: octocat/hello-world +``` + +In the above example, the `frontend` and `backend` steps are executed in parallel. The pipeline runner will not execute the `publish` step until the group completes. + +### `volumes` + +Woodpecker gives the ability to define Docker volumes in the Yaml. You can use this parameter to mount files or folders on the host machine into your containers. + +For more details check the [volumes docs](./70-volumes.md). + +### `detach` + +Woodpecker gives the ability to detach steps to run them in background until the pipeline finishes. + +For more details check the [service docs](./60-services.md#detachment). + +## Advanced Configurations + +### `workspace` + +The workspace defines the shared volume and working directory shared by all pipeline steps. The default workspace matches the below pattern, based on your repository url. + +``` +/drone/src/github.com/octocat/hello-world +``` + +The workspace can be customized using the workspace block in the Yaml file: + +```diff ++workspace: ++ base: /go ++ path: src/github.com/octocat/hello-world + + pipeline: + build: + image: golang:latest + commands: + - go get + - go test +``` + +The base attribute defines a shared base volume available to all pipeline steps. This ensures your source code, dependencies and compiled binaries are persisted and shared between steps. + +```diff + workspace: ++ base: /go + path: src/github.com/octocat/hello-world + + pipeline: + deps: + image: golang:latest + commands: + - go get + - go test + build: + image: node:latest + commands: + - go build +``` + +This would be equivalent to the following docker commands: + +``` +docker volume create my-named-volume + +docker run --volume=my-named-volume:/go golang:latest +docker run --volume=my-named-volume:/go node:latest +``` + +The path attribute defines the working directory of your build. This is where your code is cloned and will be the default working directory of every step in your build process. The path must be relative and is combined with your base path. + +```diff + workspace: + base: /go ++ path: src/github.com/octocat/hello-world +``` + +```text +git clone https://github.com/octocat/hello-world \ + /go/src/github.com/octocat/hello-world +``` + +### `matrix` + +Woodpecker has integrated support for matrix builds. Woodpecker executes a separate build task for each combination in the matrix, allowing you to build and test a single commit against multiple configurations. + +For more details check the [matrix build docs](./30-matrix-builds.md). + +### `clone` + +Woodpecker automatically configures a default clone step if not explicitly defined. You can manually configure the clone step in your pipeline for customization: + +```diff ++clone: ++ git: ++ image: woodpeckerci/plugin-git + + pipeline: + build: + image: golang + commands: + - go build + - go test +``` + +Example configuration to override depth: + +```diff + clone: + git: + image: woodpeckerci/plugin-git ++ settings: ++ depth: 50 +``` + +Example configuration to use a custom clone plugin: + +```diff +clone: + git: ++ image: octocat/custom-git-plugin +``` + +Example configuration to clone Mercurial repository: + +```diff + clone: + hg: ++ image: plugins/hg ++ settings: ++ path: bitbucket.org/foo/bar +``` + +#### Git Submodules + +To use the credentials that cloned the repository to clone it's submodules, update `.gitmodules` to use `https` instead of `git`: + +```diff + [submodule "my-module"] + path = my-module +-url = git@github.com:octocat/my-module.git ++url = https://github.com/octocat/my-module.git +``` + +To use the ssh git url in `.gitmodules` for users cloning with ssh, and also use the https url in Woodpecker, add `submodule_override`: + +```diff + clone: + git: + image: woodpeckerci/plugin-git + settings: + recursive: true ++ submodule_override: ++ my-module: https://github.com/octocat/my-module.git + +pipeline: + ... +``` + +### Privileged mode + +Woodpecker gives the ability to configure privileged mode in the Yaml. You can use this parameter to launch containers with escalated capabilities. + +> Privileged mode is only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. + +```diff + pipeline: + build: + image: docker + environment: + - DOCKER_HOST=tcp://docker:2375 + commands: + - docker --tls=false ps + + services: + docker: + image: docker:dind + command: [ "--storage-driver=vfs", "--tls=false" ] ++ privileged: true +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/22-conditional-execution.md b/docs/versioned_docs/version-0.15/20-usage/22-conditional-execution.md new file mode 100644 index 000000000..34882014b --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/22-conditional-execution.md @@ -0,0 +1,183 @@ +# Conditional Step Execution + +Woodpecker supports defining conditions for pipeline step by a `when` block. If all conditions in the `when` block evaluate to true the step is executed, otherwise it is skipped. + +## `repo` + +Example conditional execution by repository: + +```diff + pipeline: + slack: + image: plugins/slack + settings: + channel: dev ++ when: ++ repo: test/test +``` + +## `branch` + +Example conditional execution by branch: + +```diff +pipeline: + slack: + image: plugins/slack + settings: + channel: dev ++ when: ++ branch: master +``` + +> The step now triggers on master, but also if the target branch of a pull request is `master`. Add an event condition to limit it further to pushes on master only. + +Execute a step if the branch is `master` or `develop`: + +```diff +when: + branch: [master, develop] +``` + +Execute a step if the branch starts with `prefix/*`: + +```diff +when: + branch: prefix/* +``` + +Execute a step using custom include and exclude logic: + +```diff +when: + branch: + include: [ master, release/* ] + exclude: [ release/1.0.0, release/1.1.* ] +``` + +## `event` + +Execute a step if the build event is a `tag`: + +```diff +when: + event: tag +``` + +Execute a step if the build event is a `tag` created from the specified branch: + +```diff +when: + event: tag ++ branch: master +``` + +Execute a step for all non-pull request events: + +```diff +when: + event: [push, tag, deployment] +``` + +Execute a step for all build events: + +```diff +when: + event: [push, pull_request, tag, deployment] +``` + +## `tag` + +Execute a step if the tag name starts with `release`: + +```diff +when: + tag: release* +``` + +## `status` + +There are use cases for executing pipeline steps on failure, such as sending notifications for failed pipelines. Use the status constraint to execute steps even when the pipeline fails: + +```diff +pipeline: + slack: + image: plugins/slack + settings: + channel: dev ++ when: ++ status: [ success, failure ] +``` + +## `platform` + +Execute a step for a specific platform: + +```diff +when: + platform: linux/amd64 +``` + +Execute a step for a specific platform using wildcards: + +```diff +when: + platform: [ linux/*, windows/amd64 ] +``` + +## `environment` + +Execute a step for deployment events matching the target deployment environment: + +```diff +when: + environment: production + event: deployment +``` + +## `matrix` + +Execute a step for a single matrix permutation: + +```diff +when: + matrix: + GO_VERSION: 1.5 + REDIS_VERSION: 2.8 +``` + +## `instance` + +Execute a step only on a certain Woodpecker instance matching the specified hostname: + +```diff +when: + instance: stage.woodpecker.company.com +``` + +## `path` + +:::info +This feature is currently only available for GitHub, GitLab and Gitea. +Pull requests aren't supported by gitea at the moment ([go-gitea/gitea#18228](https://github.com/go-gitea/gitea/pull/18228)). +Path conditions are ignored for tag events. +::: + +Execute a step only on a pipeline with certain files being changed: + +```diff +when: + path: "src/*" +``` + +You can use [glob patterns](https://github.com/bmatcuk/doublestar#patterns) to match the changed files and specify if the step should run if a file matching that pattern has been changed `include` or if some files have **not** been changed `exclude`. + +```diff +when: + path: + include: [ '.woodpecker/*.yml', '*.ini' ] + exclude: [ '*.md', 'docs/**' ] + ignore_message: "[ALL]" +``` + +** Hint: ** Passing a defined ignore-message like `[ALL]` inside the commit message will ignore all path conditions. diff --git a/docs/versioned_docs/version-0.15/20-usage/25-multi-pipeline.md b/docs/versioned_docs/version-0.15/20-usage/25-multi-pipeline.md new file mode 100644 index 000000000..5ddaea23f --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/25-multi-pipeline.md @@ -0,0 +1,137 @@ +# Multi pipelines + +:::info +This Feature is only available for GitHub, Gitea & GitLab repositories. Follow [this](https://github.com/woodpecker-ci/woodpecker/issues/131) issue to support further development. +::: + +By default, Woodpecker looks for the pipeline definition in `.woodpecker.yml` in the project root. + +The Multi-Pipeline feature allows the pipeline to be split into several files and placed in the `.woodpecker/` folder. Only `.yml` files will be used and files in any subfolders like `.woodpecker/sub-folder/test.yml` will be ignored. You can set some custom path like `.my-ci/pipelines/` instead of `.woodpecker/` in the [project settings](./71-project-settings.md). + +## Rational + +- faster lint/test feedback, the pipeline doesn't have to run fully to have a lint status pushed to the remote +- better organization of the pipeline along various concerns: testing, linting, feature apps +- utilizing more agents to speed up build + +## Example multi-pipeline definition +:::warning +Please note that files are only shared between steps of the same pipeline (see [File changes are incremental](./20-pipeline-syntax.md#file-changes-are-incremental)). That means you cannot access artifacts e.g. from the `build` pipeline below in the `deploy` pipeline. +If you still need to pass artifacts between the pipelines you need use storage [plugins](docs/usage/plugins/plugins) (e.g. one which stores files in an Amazon S3 bucket). +::: + +```bash +.woodpecker/ +├── .build.yml +├── .deploy.yml +├── .lint.yml +└── .test.yml +``` + +.woodpecker/.build.yml + +```yaml +pipeline: + build: + image: debian:stable-slim + commands: + - echo building + - sleep 5 +``` + +.woodpecker/.deploy.yml + +```yaml +pipeline: + deploy: + image: debian:stable-slim + commands: + - echo deploying + +depends_on: + - lint + - build + - test +``` + +.woodpecker/.test.yml + +```yaml +pipeline: + test: + image: debian:stable-slim + commands: + - echo testing + - sleep 5 + +depends_on: + - build +``` + +.woodpecker/.lint.yml + +```yaml +pipeline: + lint: + image: debian:stable-slim + commands: + - echo linting + - sleep 5 +``` + +## Status lines + +Each pipeline has its own status line on GitHub. + +## Flow control + +The pipelines run in parallel on separate agents and share nothing. + +Dependencies between pipelines can be set with the `depends_on` element. A pipeline doesn't execute until its dependencies did not complete successfully. + +The name for a `depends_on` entry is the filename without the path, leading dots and without the file extension `.yml`. If the project config for example uses `.woodpecker/` as path for ci files with a file named `.woodpecker/.lint.yml` the corresponding `depends_on` entry would be `lint`. + +```diff +pipeline: + deploy: + image: debian:stable-slim + commands: + - echo deploying + ++depends_on: ++ - lint ++ - build ++ - test +``` + +Pipelines that need to run even on failures should set the `runs_on` tag. + +```diff +pipeline: + notify: + image: debian:stable-slim + commands: + - echo notifying + +depends_on: + - deploy + ++runs_on: [ success, failure ] +``` + +Some pipelines don't need the source code, set the `skip_clone` tag to skip cloning: + +```diff + +pipeline: + notify: + image: debian:stable-slim + commands: + - echo notifying + +depends_on: + - deploy + +runs_on: [ success, failure ] ++skip_clone: true +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/30-matrix-builds.md b/docs/versioned_docs/version-0.15/20-usage/30-matrix-builds.md new file mode 100644 index 000000000..fa2c58c3a --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/30-matrix-builds.md @@ -0,0 +1,113 @@ +# Matrix builds + +Woodpecker has integrated support for matrix builds. Woodpecker executes a separate build task for each combination in the matrix, allowing you to build and test a single commit against multiple configurations. + +Example matrix definition: + +```yaml +matrix: + GO_VERSION: + - 1.4 + - 1.3 + REDIS_VERSION: + - 2.6 + - 2.8 + - 3.0 +``` + +Example matrix definition containing only specific combinations: + +```yaml +matrix: + include: + - GO_VERSION: 1.4 + REDIS_VERSION: 2.8 + - GO_VERSION: 1.5 + REDIS_VERSION: 2.8 + - GO_VERSION: 1.6 + REDIS_VERSION: 3.0 +``` + +## Interpolation + +Matrix variables are interpolated in the yaml using the `${VARIABLE}` syntax, before the yaml is parsed. This is an example yaml file before interpolating matrix parameters: + +```yaml +pipeline: + build: + image: golang:${GO_VERSION} + commands: + - go get + - go build + - go test + +services: + database: + image: ${DATABASE} + +matrix: + GO_VERSION: + - 1.4 + - 1.3 + DATABASE: + - mysql:5.5 + - mysql:6.5 + - mariadb:10.1 +``` + +Example Yaml file after injecting the matrix parameters: + +```diff +pipeline: + build: +- image: golang:${GO_VERSION} ++ image: golang:1.4 + commands: + - go get + - go build + - go test ++ environment: ++ - GO_VERSION=1.4 ++ - DATABASE=mysql:5.5 + +services: + database: +- image: ${DATABASE} ++ image: mysql:5.5 +``` + +## Examples + +Example matrix build based on Docker image tag: + +```yaml +pipeline: + build: + image: golang:${TAG} + commands: + - go build + - go test + +matrix: + TAG: + - 1.7 + - 1.8 + - latest +``` + +Example matrix build based on Docker image: + +```yaml +pipeline: + build: + image: ${IMAGE} + commands: + - go build + - go test + +matrix: + IMAGE: + - golang:1.7 + - golang:1.8 + - golang:latest +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/40-secrets.md b/docs/versioned_docs/version-0.15/20-usage/40-secrets.md new file mode 100644 index 000000000..195f3999a --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/40-secrets.md @@ -0,0 +1,134 @@ +# Secrets + +Woodpecker provides the ability to store named parameters external to the Yaml configuration file, in a central secret store. These secrets can be passed to individual steps of the pipeline at runtime. + +Secrets are exposed to your pipeline steps and plugins as uppercase environment variables and can therefore be referenced in the commands section of your pipeline. + +```diff +pipeline: + docker: + image: docker + commands: ++ - echo $DOCKER_USERNAME ++ - echo $DOCKER_PASSWORD ++ secrets: [ docker_username, docker_password ] +``` + +Alternatively, you can get a `setting` from secrets using the `from_secret` syntax. +In this example, the secret named `secret_token` would be passed to the pipeline as `PLUGIN_TOKEN`. + +**NOTE:** the `from_secret` syntax only works with the newer `settings` block. + +```diff +pipeline: + docker: + image: my-plugin + settings: ++ token: ++ from_secret: secret_token +``` + + +Please note parameter expressions are subject to pre-processing. When using secrets in parameter expressions they should be escaped. + +```diff +pipeline: + docker: + image: docker + commands: +- - echo ${DOCKER_USERNAME} +- - echo ${DOCKER_PASSWORD} ++ - echo $${DOCKER_USERNAME} ++ - echo $${DOCKER_PASSWORD} + secrets: [ docker_username, docker_password ] +``` + +## Adding Secrets + +Secrets are added to the Woodpecker secret store on the UI or with the CLI. + +## Alternate Names + +There may be scenarios where you are required to store secrets using alternate names. You can map the alternate secret name to the expected name using the below syntax: + +```diff +pipeline: + docker: + image: plugins/docker + repo: octocat/hello-world + tags: latest ++ secrets: ++ - source: docker_prod_password ++ target: docker_password +``` + +## Pull Requests + +Secrets are not exposed to pull requests by default. You can override this behavior by creating the secret and enabling the `pull_request` event type. + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ + -image plugins/docker \ ++ -event pull_request \ ++ -event push \ ++ -event tag \ + -name docker_username \ + -value +``` + +Please be careful when exposing secrets to pull requests. If your repository is open source and accepts pull requests your secrets are not safe. A bad actor can submit a malicious pull request that exposes your secrets. + +## Examples + +Create the secret using default settings. The secret will be available to all images in your pipeline, and will be available to all push, tag, and deployment events (not pull request events). + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ + -name aws_access_key_id \ + -value +``` + +Create the secret and limit to a single image: + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ ++ -image plugins/s3 \ + -name aws_access_key_id \ + -value +``` + +Create the secrets and limit to a set of images: + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ ++ -image plugins/s3 \ ++ -image peloton/woodpecker-ecs \ + -name aws_access_key_id \ + -value +``` + +Create the secret and enable for multiple hook events: + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ + -image plugins/s3 \ ++ -event pull_request \ ++ -event push \ ++ -event tag \ + -name aws_access_key_id \ + -value +``` + +Loading secrets from file using curl `@` syntax. This is the recommended approach for loading secrets from file to preserve newlines: + +```diff +woodpecker-cli secret add \ + -repository octocat/hello-world \ + -name ssh_key \ ++ -value @/root/ssh/id_rsa +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/41-registries.md b/docs/versioned_docs/version-0.15/20-usage/41-registries.md new file mode 100644 index 000000000..1bf4a04c9 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/41-registries.md @@ -0,0 +1,3 @@ +# Registries + +Woodpecker provides the ability to add container registries in the settings of your repository. Adding a registry allows you to authenticate and pull private images from a container registry when using these images as a step inside your pipeline. diff --git a/docs/versioned_docs/version-0.15/20-usage/50-environment.md b/docs/versioned_docs/version-0.15/20-usage/50-environment.md new file mode 100644 index 000000000..fc7e1a5e6 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/50-environment.md @@ -0,0 +1,199 @@ +# Environment variables + +Woodpecker provides the ability to pass environment variables to individual pipeline steps. Example pipeline step with custom environment variables: + +```diff +pipeline: + build: + image: golang ++ environment: ++ - CGO=0 ++ - GOOS=linux ++ - GOARCH=amd64 + commands: + - go build + - go test +``` + +Please note that the environment section is not able to expand environment variables. If you need to expand variables they should be exported in the commands section. + +```diff +pipeline: + build: + image: golang +- environment: +- - PATH=$PATH:/go + commands: ++ - export PATH=$PATH:/go + - go build + - go test +``` + +> Please be warned that `${variable}` expressions are subject to pre-processing. If you do not want the pre-processor to evaluate your expression it must be escaped: + +```diff +pipeline: + build: + image: golang + commands: +- - export PATH=${PATH}:/go ++ - export PATH=$${PATH}:/go + - go build + - go test +``` + +## Built-in environment variables + +This is the reference list of all environment variables available to your pipeline containers. These are injected into your pipeline step and plugins containers, at runtime. + +| NAME | Description | +|--------------------------------|----------------------------------------------------------------------------------------------| +| `CI=woodpecker` | environment is woodpecker | +| | **Repository** | +| `CI_REPO` | repository full name `/` | +| `CI_REPO_OWNER` | repository owner | +| `CI_REPO_NAME` | repository name | +| `CI_REPO_SCM` | repository scm (git) | +| `CI_REPO_LINK` | repository link | +| `CI_REPO_REMOTE` | repository clone url | +| `CI_REPO_DEFAULT_BRANCH` | repository default branch (master) | +| `CI_REPO_PRIVATE` | repository is private | +| `CI_REPO_TRUSTED` | repository is trusted | +| | **Current Commit** | +| `CI_COMMIT_SHA` | commit sha | +| `CI_COMMIT_REF` | commit ref | +| `CI_COMMIT_REFSPEC` | commit ref spec | +| `CI_COMMIT_BRANCH` | commit branch (equals target branch for pull requests) | +| `CI_COMMIT_SOURCE_BRANCH` | commit source branch | +| `CI_COMMIT_TARGET_BRANCH` | commit target branch | +| `CI_COMMIT_TAG` | commit tag name (empty if event is not `tag`) | +| `CI_COMMIT_PULL_REQUEST` | commit pull request number (empty if event is not `pull_request`) | +| `CI_COMMIT_LINK` | commit link in remote | +| `CI_COMMIT_MESSAGE` | commit message | +| `CI_COMMIT_AUTHOR` | commit author username | +| `CI_COMMIT_AUTHOR_EMAIL` | commit author email address | +| `CI_COMMIT_AUTHOR_AVATAR` | commit author avatar | +| | **Current build** | +| `CI_BUILD_NUMBER` | build number | +| `CI_BUILD_PARENT` | build number of parent build | +| `CI_BUILD_EVENT` | build event (push, pull_request, tag, deployment) | +| `CI_BUILD_LINK` | build link in ci | +| `CI_BUILD_DEPLOY_TARGET` | build deploy target for `deployment` events (ie production) | +| `CI_BUILD_STATUS` | build status (success, failure) | +| `CI_BUILD_CREATED` | build created unix timestamp | +| `CI_BUILD_STARTED` | build started unix timestamp | +| `CI_BUILD_FINISHED` | build finished unix timestamp | +| | **Current job** | +| `CI_JOB_NUMBER` | job number | +| `CI_JOB_STATUS` | job status (success, failure) | +| `CI_JOB_STARTED` | job started unix timestamp | +| `CI_JOB_FINISHED` | job finished unix timestamp | +| | **Previous commit** | +| `CI_PREV_COMMIT_SHA` | previous commit sha | +| `CI_PREV_COMMIT_REF` | previous commit ref | +| `CI_PREV_COMMIT_REFSPEC` | previous commit ref spec | +| `CI_PREV_COMMIT_BRANCH` | previous commit branch | +| `CI_PREV_COMMIT_SOURCE_BRANCH` | previous commit source branch | +| `CI_PREV_COMMIT_TARGET_BRANCH` | previous commit target branch | +| `CI_PREV_COMMIT_LINK` | previous commit link in remote | +| `CI_PREV_COMMIT_MESSAGE` | previous commit message | +| `CI_PREV_COMMIT_AUTHOR` | previous commit author username | +| `CI_PREV_COMMIT_AUTHOR_EMAIL` | previous commit author email address | +| `CI_PREV_COMMIT_AUTHOR_AVATAR` | previous commit author avatar | +| | **Previous build** | +| `CI_PREV_BUILD_NUMBER` | previous build number | +| `CI_PREV_BUILD_PARENT` | previous build number of parent build | +| `CI_PREV_BUILD_EVENT` | previous build event (push, pull_request, tag, deployment) | +| `CI_PREV_BUILD_LINK` | previous build link in ci | +| `CI_PREV_BUILD_DEPLOY_TARGET` | previous build deploy target for `deployment` events (ie production) | +| `CI_PREV_BUILD_STATUS` | previous build status (success, failure) | +| `CI_PREV_BUILD_CREATED` | previous build created unix timestamp | +| `CI_PREV_BUILD_STARTED` | previous build started unix timestamp | +| `CI_PREV_BUILD_FINISHED` | previous build finished unix timestamp | +| |   | +| `CI_WORKSPACE` | Path of the workspace where source code gets cloned to | +| | **System** | +| `CI_SYSTEM_NAME` | name of the ci system: `woodpecker` | +| `CI_SYSTEM_LINK` | link to ci system | +| `CI_SYSTEM_HOST` | hostname of ci server | +| `CI_SYSTEM_VERSION` | version of the server | +| | **Internal** - Please don't use! | +| `CI_SCRIPT` | Internal script path. Used to call pipeline step commands. | +| `CI_NETRC_USERNAME` | Credentials for private repos to be able to clone data. (Only available for specific images) | +| `CI_NETRC_PASSWORD` | Credentials for private repos to be able to clone data. (Only available for specific images) | +| `CI_NETRC_MACHINE` | Credentials for private repos to be able to clone data. (Only available for specific images) | + +## Global environment variables + +If you want specific environment variables to be available in all of your builds use the `WOODPECKER_ENVIRONMENT` setting on the Woodpecker server. + +```.diff +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_ENVIRONMENT=first_var:value1,second_var:value2 +``` + +## String Substitution + +Woodpecker provides the ability to substitute environment variables at runtime. This gives us the ability to use dynamic build or commit details in our pipeline configuration. + +Example commit substitution: + +```diff +pipeline: + docker: + image: plugins/docker + settings: ++ tags: ${CI_COMMIT_SHA} +``` + +Example tag substitution: + +```diff +pipeline: + docker: + image: plugins/docker + settings: ++ tags: ${CI_COMMIT_TAG} +``` + +## String Operations + +Woodpecker also emulates bash string operations. This gives us the ability to manipulate the strings prior to substitution. Example use cases might include substring and stripping prefix or suffix values. + +| OPERATION | DESC | +| ------------------ | ------------------------------------------------ | +| `${param}` | parameter substitution | +| `${param,}` | parameter substitution with lowercase first char | +| `${param,,}` | parameter substitution with lowercase | +| `${param^}` | parameter substitution with uppercase first char | +| `${param^^}` | parameter substitution with uppercase | +| `${param:pos}` | parameter substitution with substring | +| `${param:pos:len}` | parameter substitution with substring and length | +| `${param=default}` | parameter substitution with default | +| `${param##prefix}` | parameter substitution with prefix removal | +| `${param%%suffix}` | parameter substitution with suffix removal | +| `${param/old/new}` | parameter substitution with find and replace | + +Example variable substitution with substring: + +```diff +pipeline: + docker: + image: plugins/docker + settings: ++ tags: ${CI_COMMIT_SHA:0:8} +``` + +Example variable substitution strips `v` prefix from `v.1.0.0`: + +```diff +pipeline: + docker: + image: plugins/docker + settings: ++ tags: ${CI_COMMIT_TAG##v} +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/51-plugins/10-plugins.md b/docs/versioned_docs/version-0.15/20-usage/51-plugins/10-plugins.md new file mode 100644 index 000000000..7a7baac6e --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/51-plugins/10-plugins.md @@ -0,0 +1,35 @@ +# Plugins + +Plugins are pipeline steps that perform pre-defined tasks and are configured as steps in your pipeline. Plugins can be used to deploy code, publish artifacts, send notification, and more. + +They are automatically pulled from [plugins.drone.io](http://plugins.drone.io). + +Example pipeline using the Docker and Slack plugins: + +```yaml +pipeline: + build: + image: golang + commands: + - go build + - go test + + publish: + image: plugins/docker + settings: + repo: foo/bar + tags: latest + + notify: + image: plugins/slack + settings: + channel: dev +``` + +## Plugin Isolation + +Plugins are just pipeline steps. They share the build workspace, mounted as a volume, and therefore have access to your source tree. + +## Creating a plugin + +See a [detailed plugin example](./20-sample-plugin.md). diff --git a/docs/versioned_docs/version-0.15/20-usage/51-plugins/20-sample-plugin.md b/docs/versioned_docs/version-0.15/20-usage/51-plugins/20-sample-plugin.md new file mode 100644 index 000000000..e5a3b1f87 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/51-plugins/20-sample-plugin.md @@ -0,0 +1,60 @@ +# Example plugin + +This provides a brief tutorial for creating a Woodpecker webhook plugin, using simple shell scripting, to make an http requests during the build pipeline. + +## What end users will see + +The below example demonstrates how we might configure a webhook plugin in the Yaml file: + +```yaml +pipeline: + webhook: + image: foo/webhook + settings: + url: http://foo.com + method: post + body: | + hello world +``` + +## Write the logic + +Create a simple shell script that invokes curl using the Yaml configuration parameters, which are passed to the script as environment variables in uppercase and prefixed with `PLUGIN_`. + +```bash +#!/bin/sh + +curl \ + -X ${PLUGIN_METHOD} \ + -d ${PLUGIN_BODY} \ + ${PLUGIN_URL} +``` + +## Package it + +Create a Dockerfile that adds your shell script to the image, and configures the image to execute your shell script as the main entrypoint. + +```dockerfile +FROM alpine +ADD script.sh /bin/ +RUN chmod +x /bin/script.sh +RUN apk -Uuv add curl ca-certificates +ENTRYPOINT /bin/script.sh +``` + +Build and publish your plugin to the Docker registry. Once published your plugin can be shared with the broader Woodpecker community. + +```nohighlight +docker build -t foo/webhook . +docker push foo/webhook +``` + +Execute your plugin locally from the command line to verify it is working: + +```nohighlight +docker run --rm \ + -e PLUGIN_METHOD=post \ + -e PLUGIN_URL=http://foo.com \ + -e PLUGIN_BODY="hello world" \ + foo/webhook +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/51-plugins/_category_.yml b/docs/versioned_docs/version-0.15/20-usage/51-plugins/_category_.yml new file mode 100644 index 000000000..7dd7a3cc8 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/51-plugins/_category_.yml @@ -0,0 +1,4 @@ +label: 'Plugins' +# position: 2 +collapsible: true +collapsed: true diff --git a/docs/versioned_docs/version-0.15/20-usage/60-services.md b/docs/versioned_docs/version-0.15/20-usage/60-services.md new file mode 100644 index 000000000..ad16737af --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/60-services.md @@ -0,0 +1,79 @@ +# Services + +Woodpecker provides a services section in the Yaml file used for defining service containers. The below configuration composes database and cache containers. + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + +services: + database: + image: mysql + + cache: + image: redis +``` + +Services are accessed using custom hostnames. In the above example the mysql service is assigned the hostname `database` and is available at `database:3306`. + +## Configuration + +Service containers generally expose environment variables to customize service startup such as default usernames, passwords and ports. Please see the official image documentation to learn more. + +```diff +services: + database: + image: mysql ++ environment: ++ - MYSQL_DATABASE=test ++ - MYSQL_ALLOW_EMPTY_PASSWORD=yes + + cache: + image: redis +``` + +## Detachment + +Service and long running containers can also be included in the pipeline section of the configuration using the detach parameter without blocking other steps. This should be used when explicit control over startup order is required. + +```diff +pipeline: + build: + image: golang + commands: + - go build + - go test + + database: + image: redis ++ detach: true + + test: + image: golang + commands: + - go test +``` + +Containers from detached steps will terminate when the pipeline ends. + +## Initialization + +Service containers require time to initialize and begin to accept connections. If you are unable to connect to a service you may need to wait a few seconds or implement a backoff. + +```diff +pipeline: + test: + image: golang + commands: ++ - sleep 15 + - go get + - go test + +services: + database: + image: mysql +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/70-volumes.md b/docs/versioned_docs/version-0.15/20-usage/70-volumes.md new file mode 100644 index 000000000..1db7aa1cf --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/70-volumes.md @@ -0,0 +1,25 @@ +# Volumes + +Woodpecker gives the ability to define Docker volumes in the Yaml. You can use this parameter to mount files or folders on the host machine into your containers. + +> Volumes are only available to trusted repositories and for security reasons should only be used in private environments. See [project settings](./71-project-settings.md#trusted) to enable trusted mode. + +```diff +pipeline: + build: + image: docker + commands: + - docker build --rm -t octocat/hello-world . + - docker run --rm octocat/hello-world --test + - docker push octocat/hello-world + - docker rmi octocat/hello-world + volumes: ++ - /var/run/docker.sock:/var/run/docker.sock +``` + +Please note that Woodpecker mounts volumes on the host machine. This means you must use absolute paths when you configure volumes. Attempting to use relative paths will result in an error. + +```diff +- volumes: [ ./certs:/etc/ssl/certs ] ++ volumes: [ /etc/ssl/certs:/etc/ssl/certs ] +``` diff --git a/docs/versioned_docs/version-0.15/20-usage/71-project-settings.md b/docs/versioned_docs/version-0.15/20-usage/71-project-settings.md new file mode 100644 index 000000000..5173ff78a --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/71-project-settings.md @@ -0,0 +1,36 @@ +# Project settings + +As the owner of a project in Woodpecker you can change project related settings via the web interface. + +![project settings](./project-settings.png) + +## Pipeline path + +The path to the pipeline config file or folder. By default it is left empty which will use the following configuration resolution `.woodpecker/*.yml` -> `.woodpecker.yml` -> `.drone.yml`. If you set a custom path Woodpecker tries to load your configuration or fails if no configuration could be found at the specified location. To use a [multi pipeline](./25-multi-pipeline.md) you have to change it to a folder path ending with a `/` like `.woodpecker/`. + +## Repository hooks + +Your Version-Control-System will notify Woodpecker about events via webhooks. If you want your pipeline to only run on specific webhooks, you can check them with this setting. + +## Project settings + +### Protected + +Every build initiated by a user (not including the project owner) needs to be approved by the owner before being executed. This can be used if your repository is public to protect the pipeline configuration from running unauthorized changes on third-party pull requests. + +### Trusted + +If you set your project to trusted, a pipeline step and by this the underlying containers gets access to escalated capabilities like mounting volumes. + +## Project visibility + +You can change the visibility of your project by this setting. If a user has access to a project he can see all builds and their logs and artifacts. Settings, Secrets and Registries can only be accessed by owners. + +- `Public` Every user can see your project without being logged in. +- `Private` Only authenticated users of the Woodpecker instance can see this project. +- `Internal` Only you and other owners of the repository can see this project. + +## Timeout + +After this timeout a pipeline has to finish or will be treated as timed out. + diff --git a/docs/versioned_docs/version-0.15/20-usage/80-badges.md b/docs/versioned_docs/version-0.15/20-usage/80-badges.md new file mode 100644 index 000000000..18a65def2 --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/80-badges.md @@ -0,0 +1,18 @@ +# Status Badges + +Woodpecker has integrated support for repository status badges. These badges can be added to your website or project readme file to display the status of your code. + +## Badge endpoint + +```text +:///api/badges///status.svg +``` + +The status badge displays the status for the latest build to your default branch (e.g. master). You can customize the branch by adding the `branch` query parameter. + +```diff +-:///api/badges///status.svg ++:///api/badges///status.svg?branch= +``` + +Please note status badges do not include pull request results, since the status of a pull request does not provide an accurate representation of your repository state. diff --git a/docs/versioned_docs/version-0.15/20-usage/_category_.yml b/docs/versioned_docs/version-0.15/20-usage/_category_.yml new file mode 100644 index 000000000..ba9f729ed --- /dev/null +++ b/docs/versioned_docs/version-0.15/20-usage/_category_.yml @@ -0,0 +1,4 @@ +label: 'Usage' +# position: 2 +collapsible: true +collapsed: false diff --git a/docs/versioned_docs/version-0.15/20-usage/project-settings.png b/docs/versioned_docs/version-0.15/20-usage/project-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb9b598fab34bb70715f970af62fc0f29ec1b1e GIT binary patch literal 25969 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 Fe*yBuatHtb literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-0.15/20-usage/repo-list.png b/docs/versioned_docs/version-0.15/20-usage/repo-list.png new file mode 100644 index 0000000000000000000000000000000000000000..b47380087602395973f45c929893e066e56016ab GIT binary patch literal 21355 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 c`1~wn@lQUX Each agent is able to process one pipeline step by default. +> +> If you have 4 agents installed and connected to the Woodpecker server, your system will process 4 builds in parallel. +> +> You can add more agents to increase the number of parallel builds or set the agent's `WOODPECKER_MAX_PROCS=1` environment variable to increase the number of parallel builds for that agent. + +## Installation + +You can install Woodpecker on multiple ways: +- Using [docker-compose](#docker-compose) with the official [docker images](../80-downloads.md#docker-images) +- By deploying to a [Kubernetes](./80-kubernetes.md) with manifests or Woodpeckers official Helm charts +- Using [binaries](../80-downloads.md) + +### docker-compose + +The below [docker-compose](https://docs.docker.com/compose/) configuration can be used to start a Woodpecker server with a single agent. + +It relies on a number of environment variables that you must set before running `docker-compose up`. The variables are described below. + +```yaml +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + image: woodpeckerci/woodpecker-server:latest + ports: + - 8000:8000 + volumes: + - woodpecker-server-data:/var/lib/woodpecker/ + environment: + - WOODPECKER_OPEN=true + - WOODPECKER_HOST=${WOODPECKER_HOST} + - WOODPECKER_GITHUB=true + - WOODPECKER_GITHUB_CLIENT=${WOODPECKER_GITHUB_CLIENT} + - WOODPECKER_GITHUB_SECRET=${WOODPECKER_GITHUB_SECRET} + - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} + + woodpecker-agent: + image: woodpeckerci/woodpecker-agent:latest + command: agent + restart: always + depends_on: + - woodpecker-server + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - WOODPECKER_SERVER=woodpecker-server:9000 + - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} + +volumes: + woodpecker-server-data: +``` + +Woodpecker needs to know its own address. You must therefore provide the public address of it in `://` format. Please omit trailing slashes: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_HOST=${WOODPECKER_HOST} +``` + +As agents run pipeline steps as docker containers they require access to the host machine's Docker daemon: + +```diff +# docker-compose.yml +version: '3' + +services: + [...] + woodpecker-agent: + [...] ++ volumes: ++ - /var/run/docker.sock:/var/run/docker.sock +``` + +Agents require the server address for agent-to-server communication: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-agent: + [...] + environment: ++ - WOODPECKER_SERVER=woodpecker-server:9000 +``` + +The server and agents use a shared secret to authenticate communication. This should be a random string of your choosing and should be kept private. You can generate such string with `openssl rand -hex 32`: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} + woodpecker-agent: + [...] + environment: + - [...] ++ - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} +``` + +## Authentication + +Authentication is done using OAuth and is delegated to one of multiple version control providers, configured using environment variables. The example above demonstrates basic GitHub integration. + +See the complete reference for all supported version control systems [here](./11-vcs/10-overview.md). + +## Database + +By default Woodpecker uses a sqlite database which requires zero installation or configuration. See the [database settings](./30-database.md) page to further configure it or use MySQL or Postgres. + +## SSL + +Woodpecker supports ssl configuration by using Let's encrypt or by using own certificates. See the [SSL guide](./60-ssl.md). + +## Metrics + +A [Prometheus endpoint](./90-prometheus.md) is exposed. + +## Behind a proxy + +See the [proxy guide](./70-proxy.md) if you want to see a setup behind Apache, Nginx, Caddy or ngrok. diff --git a/docs/versioned_docs/version-0.15/30-administration/10-server-config.md b/docs/versioned_docs/version-0.15/30-administration/10-server-config.md new file mode 100644 index 000000000..88ec50357 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/10-server-config.md @@ -0,0 +1,317 @@ +# Server configuration + +## User registration + +Registration is closed by default. While disabled an administrator needs to add new users manually (exp. `woodpecker-cli user add`). + +If registration is open every user with an account at the configured [SCM](docs/administration/vcs/overview) can login to Woodpecker. +This example enables open registration for users that are members of approved organizations: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_OPEN=true ++ - WOODPECKER_ORGS=dolores,dogpatch + +``` + +## Administrators + +Administrators should also be enumerated in your configuration. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_ADMIN=johnsmith,janedoe +``` + +## Filtering repositories + +Woodpecker operates with the user's OAuth permission. Due to the coarse permission handling of GitHub, you may end up syncing more repos into Woodpecker than preferred. + +Use the `WOODPECKER_REPO_OWNERS` variable to filter which GitHub user's repos should be synced only. You typically want to put here your company's GitHub name. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_REPO_OWNERS=mycompany,mycompanyossgithubuser +``` + +## Global registry setting + +If you want to make available a specific private registry to all pipelines, use the `WOODPECKER_DOCKER_CONFIG` server configuration. +Point it to your server's docker config. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_DOCKER_CONFIG=/home/user/.docker/config.json +``` + +## All server configuration options + +The following list describes all available server configuration options. + +### `WOODPECKER_LOG_LEVEL` +> Default: empty + +Configures the logging level. Possible values are `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `panic`, `disabled` and empty. + +### `WOODPECKER_DEBUG_PRETTY` +> Default: `false` + +Enable pretty-printed debug output. + +### `WOODPECKER_DEBUG_NOCOLOR` +> Default: `true` + +Disable colored debug output. + +### `WOODPECKER_HOST` +> Default: empty + +Server fully qualified url of the user-facing hostname. + +Example: `WOODPECKER_HOST=http://woodpecker.example.org` + +### `WOODPECKER_SERVER_ADDR` +> Default: `:8000` + +Configures the HTTP listener port. + +### `WOODPECKER_SERVER_CERT` +> Default: empty + +Path to an SSL certificate used by the server to accept HTTPS requests. + +Example: `WOODPECKER_SERVER_CERT=/path/to/cert.pem` + +### `WOODPECKER_SERVER_KEY` +> Default: empty + +Path to an SSL certificate key used by the server to accept HTTPS requests. + +Example: `WOODPECKER_SERVER_KEY=/path/to/key.pem` + +### `WOODPECKER_LETS_ENCRYPT` +> Default: `false` + +Automatically generates an SSL certificate using Let's Encrypt, and configures the server to accept HTTPS requests. + +### `WOODPECKER_GRPC_ADDR` +> Default: `:9000` + +Configures the gRPC listener port. + + +### `WOODPECKER_ADMIN` +> Default: empty + +Comma-separated list of admin accounts. + +Example: `WOODPECKER_ADMIN=user1,user2` + +### `WOODPECKER_ORGS` +> Default: empty + +Comma-separated list of approved organizations. + +Example: `org1,org2` + +### `WOODPECKER_REPO_OWNERS` +> Default: empty + +Comma-separated list of syncable repo owners. ??? + +Example: `user1,user2` + +### `WOODPECKER_OPEN` +> Default: `false` + +Enable to allow user registration. + +### `WOODPECKER_DOCS` +> Default: `https://woodpecker-ci.org/` + +Link to documentation in the UI. + +### `WOODPECKER_AUTHENTICATE_PUBLIC_REPOS` +> Default: `false` + +Always use authentication to clone repositories even if they are public. Needed if the SCM requires to always authenticate as used by many companies. + +### `WOODPECKER_DEFAULT_CLONE_IMAGE` +> Default: `woodpeckerci/plugin-git:latest` + +The default docker image to be used when cloning the repo + +### `WOODPECKER_SESSION_EXPIRES` +> Default: `72h` + +Configures the session expiration time. + +### `WOODPECKER_ESCALATE` +> Default: `plugins/docker,plugins/gcr,plugins/ecr,woodpeckerci/plugin-docker,woodpeckerci/plugin-docker-buildx` + +Docker images to run in privileged mode. Only change if you are sure what you do! + + + +### `WOODPECKER_DOCKER_CONFIG` +> Default: empty + +Configures a specific private registry config for all pipelines. + +Example: `WOODPECKER_DOCKER_CONFIG=/home/user/.docker/config.json` + + + +### `WOODPECKER_AGENT_SECRET` +> Default: empty + +A shared secret used by server and agents to authenticate communication. A secret can be generated by `openssl rand -hex 32`. + +### `WOODPECKER_KEEPALIVE_MIN_TIME` +> Default: empty + +Server-side enforcement policy on the minimum amount of time a client should wait before sending a keepalive ping. + +Example: `WOODPECKER_KEEPALIVE_MIN_TIME=10s` + +### `WOODPECKER_DATABASE_DRIVER` +> Default: `sqlite3` + +The database driver name. Possible values are `sqlite3`, `mysql` or `postgres`. + +### `WOODPECKER_DATABASE_DATASOURCE` +> Default: `woodpecker.sqlite` + +The database connection string. The default value is the path of the embedded sqlite database file. + +Example: +```bash +# MySQL +# https://github.com/go-sql-driver/mysql#dsn-data-source-name +WOODPECKER_DATABASE_DATASOURCE=root:password@tcp(1.2.3.4:3306)/woodpecker?parseTime=true + +# PostgreSQL +# https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING +WOODPECKER_DATABASE_DATASOURCE=postgres://root:password@1.2.3.4:5432/woodpecker?sslmode=disable +``` + +### `WOODPECKER_PROMETHEUS_AUTH_TOKEN` +> Default: empty + +Token to secure the Prometheus metrics endpoint. + +### `WOODPECKER_STATUS_CONTEXT` +> Default: `ci/woodpecker` + +Context prefix Woodpecker will use to publish status messages to SCM. You probably will only need to change it if you run multiple Woodpecker instances for a single repository. + +--- + +### `WOODPECKER_LIMIT_MEM_SWAP` +> Default: `0` + +The maximum amount of memory a single pipeline container is allowed to swap to disk, configured in bytes. There is no limit if `0`. + +### `WOODPECKER_LIMIT_MEM` +> Default: `0` + +The maximum amount of memory a single pipeline container can use, configured in bytes. There is no limit if `0`. + +### `WOODPECKER_LIMIT_SHM_SIZE` +> Default: `0` + +The maximum amount of memory of `/dev/shm` allowed in bytes. There is no limit if `0`. + +### `WOODPECKER_LIMIT_CPU_QUOTA` +> Default: `0` + +The number of microseconds per CPU period that the container is limited to before throttled. There is no limit if `0`. + +### `WOODPECKER_LIMIT_CPU_SHARES` +> Default: `0` + +The relative weight vs. other containers. + +### `WOODPECKER_LIMIT_CPU_SET` +> Default: empty + +Comma-separated list to limit the specific CPUs or cores a pipeline container can use. + +Example: `WOODPECKER_LIMIT_CPU_SET=1,2` + +--- + +### `WOODPECKER_GITHUB_...` + +See [Github configuration](vcs/github/#configuration) + +### `WOODPECKER_GOGS_...` + +See [Gogs configuration](vcs/gogs/#configuration) + +### `WOODPECKER_GITEA_...` + +See [Gitea configuration](vcs/gitea/#configuration) + +### `WOODPECKER_BITBUCKET_...` + +See [Bitbucket configuration](vcs/bitbucket/#configuration) + +### `WOODPECKER_STASH_...` + +See [Bitbucket server configuration](vcs/bitbucket_server/#configuration) + +### `WOODPECKER_GITLAB_...` + +See [Gitlab configuration](vcs/gitlab/#configuration) + +### `WOODPECKER_CODING_...` + +See [Coding configuration](vcs/coding/#configuration) diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/10-overview.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/10-overview.md new file mode 100644 index 000000000..cfc59bce8 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/10-overview.md @@ -0,0 +1,15 @@ +# Overview + +## Supported features + +| Feature | [GitHub](github/) | [Gitea](gitea/) | [Gitlab](gitlab/) | [Bitbucket](bitbucket/) | [Bitbucket Server](bitbucket_server/) | [Gogs](gogs/) | [Coding](coding/) | +| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| Event: Push | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Event: Tag | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Event: Pull-Request | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Event: Deploy | :white_check_mark: | :x: | :x: | +| OAuth | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| [Multi pipeline](../../20-usage/25-multi-pipeline.md) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | +| [when.path filter](../../20-usage/22-conditional-execution.md#path) | :white_check_mark: | :white_check_mark:¹ | :white_check_mark: | :x: | :x: | :x: | :x: | + +¹) [except for pull requests](https://github.com/woodpecker-ci/woodpecker/issues/754) diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/20-github.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/20-github.md new file mode 100644 index 000000000..6f8d41e2e --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/20-github.md @@ -0,0 +1,62 @@ +# GitHub + +Woodpecker comes with built-in support for GitHub and GitHub Enterprise. To enable GitHub you should configure the Woodpecker server using the following environment variables: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_GITHUB=true ++ - WOODPECKER_GITHUB_CLIENT=${WOODPECKER_GITHUB_CLIENT} ++ - WOODPECKER_GITHUB_SECRET=${WOODPECKER_GITHUB_SECRET} + + woodpecker-agent: + [...] +``` + +## Registration + +Register your application with GitHub to create your client id and secret. It is very import the authorization callback URL matches your http(s) scheme and hostname exactly with `:///authorize` as the path. + +Please use this screenshot for reference: + +![github oauth setup](github_oauth.png) + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_GITHUB` +> Default: `false` + +Enables the GitHub driver. + +### `WOODPECKER_GITHUB_URL` +> Default: `https://github.com` + +Configures the GitHub server address. + +### `WOODPECKER_GITHUB_CLIENT` +> Default: empty + +Configures the GitHub OAuth client id. This is used to authorize access. + +### `WOODPECKER_GITHUB_SECRET` +> Default: empty + +Configures the GitHub OAuth client secret. This is used to authorize access. + +### `WOODPECKER_GITHUB_MERGE_REF` +> Default: `true` + +TODO + +### `WOODPECKER_GITHUB_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/30-gitea.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/30-gitea.md new file mode 100644 index 000000000..7c34b0994 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/30-gitea.md @@ -0,0 +1,65 @@ +# Gitea + +Woodpecker comes with built-in support for Gitea. To enable Gitea you should configure the Woodpecker container using the following environment variables: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_GITEA=true ++ - WOODPECKER_GITEA_URL=${WOODPECKER_GITEA_URL} ++ - WOODPECKER_GITEA_CLIENT=${WOODPECKER_GITEA_CLIENT} ++ - WOODPECKER_GITEA_SECRET=${WOODPECKER_GITEA_SECRET} + + woodpecker-agent: + [...] +``` + +## Registration + +Register your application with Gitea to create your client id and secret. You can find the OAuth applications settings of Gitea at `https://gitea./user/settings/`. It is very import the authorization callback URL matches your http(s) scheme and hostname exactly with `https:///authorize` as the path. + +If you run the Woodpecker CI server on the same host as the Gitea instance, you might also need to allow local connections in Gitea, since version `v1.16`. Otherwise webhooks will fail. Add the following lines to your Gitea configuration (usually at `/etc/gitea/conf/app.ini`). +```ini +... +[webhook] +ALLOWED_HOST_LIST=external,loopback +``` +For reference see [Configuration Cheat Sheet](https://docs.gitea.io/en-us/config-cheat-sheet/#webhook-webhook). + +![gitea oauth setup](gitea_oauth.gif) + + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_GITEA` +> Default: `false` + +Enables the Gitea driver. + +### `WOODPECKER_GITEA_URL` +> Default: `https://try.gitea.io` + +Configures the Gitea server address. + +### `WOODPECKER_GITEA_CLIENT` +> Default: empty + +Configures the Gitea OAuth client id. This is used to authorize access. + +### `WOODPECKER_GITEA_SECRET` +> Default: empty + +Configures the Gitea OAuth client secret. This is used to authorize access. + +### `WOODPECKER_GITEA_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/40-gitlab.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/40-gitlab.md new file mode 100644 index 000000000..14a5d01cc --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/40-gitlab.md @@ -0,0 +1,57 @@ +# GitLab + +Woodpecker comes with built-in support for the GitLab version 8.2 and higher. To enable GitLab you should configure the Woodpecker container using the following environment variables: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: ++ - WOODPECKER_GITLAB=true ++ - WOODPECKER_GITLAB_URL=http://gitlab.mycompany.com ++ - WOODPECKER_GITLAB_CLIENT=95c0282573633eb25e82 ++ - WOODPECKER_GITLAB_SECRET=30f5064039e6b359e075 + + woodpecker-agent: + [...] +``` + +## Registration + +You must register your application with GitLab in order to generate a Client and Secret. Navigate to your account settings and choose Applications from the menu, and click New Application. + +Please use `http://woodpecker.mycompany.com/authorize` as the Authorization callback URL. Grant `api` scope to the application. + +If you run the Woodpecker CI server on the same host as the GitLab instance, you might also need to allow local connections in GitLab, otherwise API requests will fail. In GitLab, navigate to the Admin dashboard, then go to `Settings > Network > Outbound requests` and enable `Allow requests to the local network from web hooks and services`. + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_GITLAB` +> Default: `false` + +Enables the GitLab driver. + +### `WOODPECKER_GITLAB_URL` +> Default: `https://gitlab.com` + +Configures the GitLab server address. + +### `WOODPECKER_GITLAB_CLIENT` +> Default: empty + +Configures the GitLab OAuth client id. This is used to authorize access. + +### `WOODPECKER_GITLAB_SECRET` +> Default: empty + +Configures the GitLab OAuth client secret. This is used to authorize access. + +### `WOODPECKER_GITLAB_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/50-bitbucket.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/50-bitbucket.md new file mode 100644 index 000000000..5065e2e31 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/50-bitbucket.md @@ -0,0 +1,64 @@ +# Bitbucket + +Woodpecker comes with built-in support for Bitbucket Cloud. To enable Bitbucket Cloud you should configure the Woodpecker container using the following environment variables: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_BITBUCKET=true ++ - WOODPECKER_BITBUCKET_CLIENT=95c0282573633eb25e82 ++ - WOODPECKER_BITBUCKET_SECRET=30f5064039e6b359e075 + + woodpecker-agent: + [...] +``` + +## Registration + +You must register your application with Bitbucket in order to generate a client and secret. Navigate to your account settings and choose OAuth from the menu, and click Add Consumer. + +Please use the Authorization callback URL: + +```nohighlight +http://woodpecker.mycompany.com/authorize +``` + +Please also be sure to check the following permissions: + +```nohighlight +Account:Email +Account:Read +Team Membership:Read +Repositories:Read +Webhooks:Read and Write +``` + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_BITBUCKET` +> Default: `false` + +Enables the Bitbucket driver. + +### `WOODPECKER_BITBUCKET_CLIENT` +> Default: empty + +Configures the Bitbucket OAuth client id. This is used to authorize access. + +### `WOODPECKER_BITBUCKET_SECRET` +> Default: empty + +Configures the Bitbucket OAuth client secret. This is used to authorize access. + +## Missing Features + +Merge requests are not currently supported. We are interested in patches to include this functionality. +If you are interested in contributing to Woodpecker and submitting a patch please **contact us** via [Discord](https://discord.gg/fcMQqSMXJy) or [Matrix](https://matrix.to/#/#WoodpeckerCI-Develop:obermui.de). diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/60-bitbucket_server.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/60-bitbucket_server.md new file mode 100644 index 000000000..58b24307e --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/60-bitbucket_server.md @@ -0,0 +1,141 @@ +# Bitbucket Server + +Woodpecker comes with experimental support for Bitbucket Server, formerly known as Atlassian Stash. To enable Bitbucket Server you should configure the Woodpecker container using the following environment variables: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] ++ - WOODPECKER_STASH=true ++ - WOODPECKER_STASH_GIT_USERNAME=foo ++ - WOODPECKER_STASH_GIT_PASSWORD=bar ++ - WOODPECKER_STASH_CONSUMER_KEY=95c0282573633eb25e82 ++ - WOODPECKER_STASH_CONSUMER_RSA=/etc/bitbucket/key.pem ++ - WOODPECKER_STASH_URL=http://stash.mycompany.com + volumes: ++ - /path/to/key.pem:/path/to/key.pem + + woodpecker-agent: + [...] +``` + +## Private Key File + +The OAuth process in Bitbucket server requires a private and a public RSA certificate. This is how you create the private RSA certificate. + +```nohighlight +openssl genrsa -out /etc/bitbucket/key.pem 1024 +``` + +This stores the private RSA certificate in `key.pem`. The next command generates the public RSA certificate and stores it in `key.pub`. + +```nohighlight +openssl rsa -in /etc/bitbucket/key.pem -pubout >> /etc/bitbucket/key.pub +``` + +Please note that the private key file can be mounted into your Woodpecker container at runtime or as an environment variable + +Private key file mounted into your Woodpecker container at runtime as a volume. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] + - WOODPECKER_STASH=true + - WOODPECKER_STASH_GIT_USERNAME=foo + - WOODPECKER_STASH_GIT_PASSWORD=bar + - WOODPECKER_STASH_CONSUMER_KEY=95c0282573633eb25e82 ++ - WOODPECKER_STASH_CONSUMER_RSA=/etc/bitbucket/key.pem + - WOODPECKER_STASH_URL=http://stash.mycompany.com ++ volumes: ++ - /etc/bitbucket/key.pem:/etc/bitbucket/key.pem + + woodpecker-agent: + [...] +``` + +Private key as environment variable + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: + - [...] + - WOODPECKER_STASH=true + - WOODPECKER_STASH_GIT_USERNAME=foo + - WOODPECKER_STASH_GIT_PASSWORD=bar + - WOODPECKER_STASH_CONSUMER_KEY=95c0282573633eb25e82 ++ - WOODPECKER_STASH_CONSUMER_RSA_STRING=contentOfPemKeyAsString + - WOODPECKER_STASH_URL=http://stash.mycompany.com + + woodpecker-agent: + [...] +``` + +## Service Account + +Woodpecker uses `git+https` to clone repositories, however, Bitbucket Server does not currently support cloning repositories with oauth token. To work around this limitation, you must create a service account and provide the username and password to Woodpecker. This service account will be used to authenticate and clone private repositories. + +## Registration + +You must register your application with Bitbucket Server in order to generate a consumer key. Navigate to your account settings and choose Applications from the menu, and click Register new application. Now copy & paste the text value from `/etc/bitbucket/key.pub` into the `Public Key` in the incoming link part of the application registration. + +Please use http://woodpecker.mycompany.com/authorize as the Authorization callback URL. + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_STASH` +> Default: `false` + +Enables the Bitbucket Server driver. + +### `WOODPECKER_STASH_URL` +> Default: empty + +Configures the Bitbucket Server address. + +### `WOODPECKER_STASH_CONSUMER_KEY` +> Default: empty + +Configures your Bitbucket Server consumer key. + +### `WOODPECKER_STASH_CONSUMER_RSA` +> Default: empty + +Configures the path to your Bitbucket Server private key file. + +### `WOODPECKER_STASH_CONSUMER_RSA_STRING` +> Default: empty + +Configures your Bitbucket Server private key. + +### `WOODPECKER_STASH_GIT_USERNAME` +> Default: empty + +This username is used to authenticate and clone all private repositories. + +### `WOODPECKER_STASH_GIT_PASSWORD` +> Default: empty + +The password is used to authenticate and clone all private repositories. + +### `WOODPECKER_STASH_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/70-gogs.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/70-gogs.md new file mode 100644 index 000000000..a165bea6d --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/70-gogs.md @@ -0,0 +1,35 @@ +# Gogs + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_GOGS` +> Default: `false` + +Enables the Gogs driver. + +### `WOODPECKER_GOGS_URL` +> Default: `https://github.com` + +Configures the Gogs server address. + +### `WOODPECKER_GOGS_GIT_USERNAME` +> Default: empty + +This username is used to authenticate and clone all private repositories. + +### `WOODPECKER_GOGS_GIT_PASSWORD` +> Default: empty + +The password is used to authenticate and clone all private repositories. + +### `WOODPECKER_GOGS_PRIVATE_MODE` +> Default: `false` + +TODO + +### `WOODPECKER_GOGS_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/80-coding.md b/docs/versioned_docs/version-0.15/30-administration/11-vcs/80-coding.md new file mode 100644 index 000000000..751c09020 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/80-coding.md @@ -0,0 +1,50 @@ +# Coding + +## Configuration + +This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations. + +### `WOODPECKER_CODING` +> Default: `false` + +Enables the Coding driver. + +### `WOODPECKER_CODING_URL` +> Default: `https://coding.net` + +Configures the Coding server address. + +### `WOODPECKER_CODING_CLIENT` +> Default: empty + +Configures the Coding OAuth client id. This is used to authorize access. + +### `WOODPECKER_CODING_SECRET` +> Default: empty + +Configures the Coding OAuth client secret. This is used to authorize access. + +### `WOODPECKER_CODING_SCOPE` +> Default: `user, project, project:depot` + +Comma-separated list of OAuth scopes. + +### `WOODPECKER_CODING_GIT_MACHINE` +> Default: `git.coding.net` + +TODO + +### `WOODPECKER_CODING_GIT_USERNAME` +> Default: empty + +This username is used to authenticate and clone all private repositories. + +### `WOODPECKER_CODING_GIT_PASSWORD` +> Default: empty + +The password is used to authenticate and clone all private repositories. + +### `WOODPECKER_CODING_SKIP_VERIFY` +> Default: `false` + +Configure if SSL verification should be skipped. diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/_category_.yml b/docs/versioned_docs/version-0.15/30-administration/11-vcs/_category_.yml new file mode 100644 index 000000000..587cdf966 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/11-vcs/_category_.yml @@ -0,0 +1,3 @@ +label: 'Version control systems' +collapsible: true +collapsed: true diff --git a/docs/versioned_docs/version-0.15/30-administration/11-vcs/gitea_oauth.gif b/docs/versioned_docs/version-0.15/30-administration/11-vcs/gitea_oauth.gif new file mode 100644 index 0000000000000000000000000000000000000000..7478f93856eb758876adec576e47793c2b733b3b GIT binary patch literal 132331 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%0ApiA%=OlsK?Z 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 i_?O7{zi4^J?@>~0NvdZ4;4}O)bl*Z$ Default: `localhost:9000` + +Configures gRPC address of the server. + +### `WOODPECKER_USERNAME` +> Default: `x-oauth-basic` + +The gRPC username. + +### `WOODPECKER_AGENT_SECRET` +> Default: empty + +A shared secret used by server and agents to authenticate communication. A secret can be generated by `openssl rand -hex 32`. + +### `WOODPECKER_LOG_LEVEL` +> Default: empty + +Configures the logging level. Possible values are `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `panic`, `disabled` and empty. + +### `WOODPECKER_DEBUG_PRETTY` +> Default: `false` + +Enable pretty-printed debug output. + +### `WOODPECKER_DEBUG_NOCOLOR` +> Default: `true` + +Disable colored debug output. + +### `WOODPECKER_HOSTNAME` +> Default: empty + +Configures the agent hostname. + +### `WOODPECKER_MAX_PROCS` +> Default: `1` + +Configures the number of parallel builds. + +### `WOODPECKER_HEALTHCHECK` +> Default: `true` + +Enable healthcheck endpoint. + +### `WOODPECKER_KEEPALIVE_TIME` +> Default: empty + +After a duration of this time of no activity, the agent pings the server to check if the transport is still alive. + +### `WOODPECKER_KEEPALIVE_TIMEOUT` +> Default: `20s` + +After pinging for a keepalive check, the agent waits for a duration of this time before closing the connection if no activity. + +### `WOODPECKER_GRPC_SECURE` +> Default: `false` + +Configures if the connection to `WOODPECKER_SERVER` should be made using a secure transport. + +### `WOODPECKER_GRPC_VERIFY` +> Default: `true` + +Configures if the gRPC server certificate should be verified, only valid when `WOODPECKER_GRPC_SECURE` is `true`. + +### `WOODPECKER_BACKEND` +> Default: `auto-detect` + +Configures the backend engine to run pipelines on. Possible values are `auto-detect` or `docker`. diff --git a/docs/versioned_docs/version-0.15/30-administration/30-database.md b/docs/versioned_docs/version-0.15/30-administration/30-database.md new file mode 100644 index 000000000..fe8dc613b --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/30-database.md @@ -0,0 +1,67 @@ +# Databases + +The default database engine of Woodpecker is an embedded SQLite database which requires zero installation or configuration. But you can replace it with a MySQL or Postgres database. + +## Configure sqlite + +By default Woodpecker uses a sqlite database stored under `/var/lib/woodpecker/`. You can mount a [data volume](https://docs.docker.com/storage/volumes/#create-and-manage-volumes) to persist the sqlite database. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] ++ volumes: ++ - woodpecker-server-data:/var/lib/woodpecker/ +``` + +## Configure MySQL + +The below example demonstrates mysql database configuration. See the official driver [documentation](https://github.com/go-sql-driver/mysql#dsn-data-source-name) for configuration options and examples. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: ++ WOODPECKER_DATABASE_DRIVER: mysql ++ WOODPECKER_DATABASE_DATASOURCE: root:password@tcp(1.2.3.4:3306)/woodpecker?parseTime=true +``` + +## Configure Postgres + +The below example demonstrates postgres database configuration. See the official driver [documentation](https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING) for configuration options and examples. +Please use postgres versions equal or higher than **11**. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + environment: ++ WOODPECKER_DATABASE_DRIVER: postgres ++ WOODPECKER_DATABASE_DATASOURCE: postgres://root:password@1.2.3.4:5432/postgres?sslmode=disable +``` + +## Database Creation + +Woodpecker does not create your database automatically. If you are using the mysql or postgres driver you will need to manually create your database using `CREATE DATABASE` + +## Database Migration + +Woodpecker automatically handles database migration, including the initial creation of tables and indexes. New versions of Woodpecker will automatically upgrade the database unless otherwise specified in the release notes. + +## Database Backups + +Woodpecker does not perform database backups. This should be handled by separate third party tools provided by your database vendor of choice. + +## Database Archiving + +Woodpecker does not perform data archival; it considered out-of-scope for the project. Woodpecker is rather conservative with the amount of data it stores, however, you should expect the database logs to grow the size of your database considerably. diff --git a/docs/versioned_docs/version-0.15/30-administration/60-ssl.md b/docs/versioned_docs/version-0.15/30-administration/60-ssl.md new file mode 100644 index 000000000..8af876931 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/60-ssl.md @@ -0,0 +1,131 @@ +# SSL + +Woodpecker supports two ways of enabling SSL communication. You can either use Let's Encrypt to get automated SSL support with +renewal or provide your own SSL certificates. + + +## Let's Encrypt + +Woodpecker supports automated SSL configuration and updates using Let's Encrypt. + +You can enable Let's Encrypt by making the following modifications to your server configuration: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + ports: ++ - 80:80 ++ - 443:443 + - 9000:9000 + environment: + - [...] ++ - WOODPECKER_LETS_ENCRYPT=true +``` + +Note that Woodpecker uses the hostname from the `WOODPECKER_HOST` environment variable when requesting certificates. For example, if `WOODPECKER_HOST=https://foo.com` the certificate is requested for `foo.com`. + +>Once enabled you can visit your website at both the http and the https address + +### Certificate Cache + +Woodpecker writes the certificates to the below directory: + +``` +/var/lib/woodpecker/golang-autocert +``` + +### Certificate Updates + +Woodpecker uses the official Go acme library which will handle certificate upgrades. There should be no addition configuration or management required. + +## SSL with own certificates + +Woodpecker supports ssl configuration by mounting certificates into your container. + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + ports: ++ - 80:80 ++ - 443:443 + - 9000:9000 + volumes: ++ - /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt ++ - /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key + environment: + - [...] ++ - WOODPECKER_SERVER_CERT=/etc/certs/woodpecker.foo.com/server.crt ++ - WOODPECKER_SERVER_KEY=/etc/certs/woodpecker.foo.com/server.key +``` + +Update your configuration to expose the following ports: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + ports: ++ - 80:80 ++ - 443:443 + - 9000:9000 +``` + +Update your configuration to mount your certificate and key: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + ports: + - 80:80 + - 443:443 + - 9000:9000 + volumes: ++ - /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt ++ - /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key +``` + +Update your configuration to provide the paths of your certificate and key: + +```diff +# docker-compose.yml +version: '3' + +services: + woodpecker-server: + [...] + ports: + - 80:80 + - 443:443 + - 9000:9000 + volumes: + - /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt + - /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key + environment: ++ - WOODPECKER_SERVER_CERT=/etc/certs/woodpecker.foo.com/server.crt ++ - WOODPECKER_SERVER_KEY=/etc/certs/woodpecker.foo.com/server.key +``` + +### Certificate Chain + +The most common problem encountered is providing a certificate file without the intermediate chain. + +> LoadX509KeyPair reads and parses a public/private key pair from a pair of files. The files must contain PEM encoded data. The certificate file may contain intermediate certificates following the leaf certificate to form a certificate chain. + +### Certificate Errors + +SSL support is provided using the [ListenAndServeTLS](https://golang.org/pkg/net/http/#ListenAndServeTLS) function from the Go standard library. If you receive certificate errors or warnings please examine your configuration more closely. diff --git a/docs/versioned_docs/version-0.15/30-administration/70-proxy.md b/docs/versioned_docs/version-0.15/30-administration/70-proxy.md new file mode 100644 index 000000000..cd6381bfa --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/70-proxy.md @@ -0,0 +1,97 @@ +# Proxy + +## Apache +This guide provides a brief overview for installing Woodpecker server behind the Apache2 webserver. This is an example configuration: + +```nohighlight +ProxyPreserveHost On + +RequestHeader set X-Forwarded-Proto "https" + +ProxyPass / http://127.0.0.1:8000/ +ProxyPassReverse / http://127.0.0.1:8000/ +``` + +You must have the below Apache modules installed. + +```nohighlight +a2enmod proxy +a2enmod proxy_http +``` + +You must configure Apache to set `X-Forwarded-Proto` when using https. + +```diff +ProxyPreserveHost On + ++RequestHeader set X-Forwarded-Proto "https" + +ProxyPass / http://127.0.0.1:8000/ +ProxyPassReverse / http://127.0.0.1:8000/ +``` + +## Nginx + +This guide provides a basic overview for installing Woodpecker server behind the nginx webserver. For more advanced configuration options please consult the official nginx [documentation](https://www.nginx.com/resources/admin-guide/). + +Example configuration: + +```nginx +server { + listen 80; + server_name woodpecker.example.com; + + location / { + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $http_host; + + proxy_pass http://127.0.0.1:8000; + proxy_redirect off; + proxy_http_version 1.1; + proxy_buffering off; + + chunked_transfer_encoding off; + } +} +``` + +You must configure the proxy to set `X-Forwarded` proxy headers: + +```diff +server { + listen 80; + server_name woodpecker.example.com; + + location / { ++ proxy_set_header X-Forwarded-For $remote_addr; ++ proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass http://127.0.0.1:8000; + proxy_redirect off; + proxy_http_version 1.1; + proxy_buffering off; + + chunked_transfer_encoding off; + } +} +``` + +## Caddy + +This guide provides a brief overview for installing Woodpecker server behind the [Caddy webserver](https://caddyserver.com/). This is an example caddyfile proxy configuration: + +```nohighlight +woodpecker.example.com { + reverse_proxy woodpecker-server:8000 +} +``` + +## Ngrok +After installing [ngrok](https://ngrok.com/), open a new console and run: + +``` +ngrok http 8000 +``` + +Set `WOODPECKER_HOST` (for example in `docker-compose.yml`) to the ngrok url (usually xxx.ngrok.io) and start the server. diff --git a/docs/versioned_docs/version-0.15/30-administration/80-kubernetes.md b/docs/versioned_docs/version-0.15/30-administration/80-kubernetes.md new file mode 100644 index 000000000..6132a5189 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/80-kubernetes.md @@ -0,0 +1,213 @@ +# Kubernetes + +Woodpecker does not support Kubernetes natively, but being a container first CI engine, it can be deployed to Kubernetes. + +## Deploy with HELM + +### Preparation + +```shell +# create secrets +kubectl create secret generic woodpecker-secret \ + --namespace \ + --from-literal=WOODPECKER_AGENT_SECRET=$(openssl rand -hex 32) + +kubectl create secret generic woodpecker-github-client \ + --namespace \ + --from-literal=WOODPECKER_GITHUB_CLIENT=xxxxxxxx + +kubectl create secret generic woodpecker-github-secret \ + --namespace \ + --from-literal=WOODPECKER_GITHUB_SECRET=xxxxxxxx + +# add helm repo +helm repo add woodpecker https://woodpecker-ci.org/ +``` + +### Woodpecker server + +```shell +# Install +helm upgrade --install woodpecker-server --namespace woodpecker/woodpecker-server + +# Uninstall +helm delete woodpecker-server +``` + +### Woodpecker agent + +```shell +# Install +helm upgrade --install woodpecker-agent --namespace woodpecker/woodpecker-agent + +# Uninstall +helm delete woodpecker-agent +``` + +## Deploy with kubectl + +The following yamls represent a server (backed by sqlite and Persistent Volumes) and an agent deployment. The agents can be scaled by the `replica` field. + +By design, Woodpecker spins up a new container for each workflow step. It talks to the Docker agent to do that. + +However in Kubernetes, the Docker agent is not accessible, therefore this deployment follows a Docker in Docker setup and we deploy a DinD sidecar with the agent. +Build step containers are started up within the agent pod. + +Warning: this approach requires `privileged` access. Also DinD's reputation hasn't been too high in the early days of Docker - this changed somewhat over time, and there are organizations succeeding with this approach. + +server.yaml +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: woodpecker + namespace: tools + labels: + app: woodpecker +spec: + replicas: 1 + selector: + matchLabels: + app: woodpecker + template: + metadata: + labels: + app: woodpecker + annotations: + prometheus.io/scrape: 'true' + spec: + containers: + - image: woodpeckerci/woodpecker-server:latest + imagePullPolicy: Always + name: woodpecker + env: + - name: "WOODPECKER_ADMIN" + value: "xxx" + - name: "WOODPECKER_HOST" + value: "https://xxx" + - name: "WOODPECKER_GITHUB" + value: "true" + - name: "WOODPECKER_GITHUB_CLIENT" + value: "xxx" + - name: "WOODPECKER_GITHUB_SECRET" + value: "xxx" + - name: "WOODPECKER_AGENT_SECRET" + value: "xxx" + volumeMounts: + - name: sqlite-volume + mountPath: /var/lib/woodpecker + volumes: + - name: sqlite-volume + persistentVolumeClaim: + claimName: woodpecker-pvc +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: woodpecker-pvc + namespace: tools +spec: + accessModes: + - ReadWriteOnce + storageClassName: local-path + resources: + requests: + storage: 10Gi +--- +kind: Service +apiVersion: v1 +metadata: + name: woodpecker + namespace: tools +spec: + type: ClusterIP + selector: + app: woodpecker + ports: + - protocol: TCP + name: http + port: 80 + targetPort: 8000 + - protocol: TCP + name: grpc + port: 9000 + targetPort: 9000 +--- +kind: Ingress +apiVersion: extensions/v1beta1 +metadata: + name: woodpecker + namespace: tools +spec: + tls: + - hosts: + - xxx + secretName: xxx + rules: + - host: xxx + http: + paths: + - backend: + serviceName: woodpecker + servicePort: 80 +``` + +agent.yaml +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: woodpecker-agent + namespace: tools + labels: + app: woodpecker-agent +spec: + selector: + matchLabels: + app: woodpecker-agent + replicas: 2 + template: + metadata: + annotations: + labels: + app: woodpecker-agent + spec: + containers: + - name: agent + image: woodpeckerci/woodpecker-agent:latest + imagePullPolicy: Always + ports: + - name: http + containerPort: 3000 + protocol: TCP + env: + - name: WOODPECKER_SERVER + value: woodpecker.tools.svc.cluster.local:9000 + - name: WOODPECKER_AGENT_SECRET + value: "xxx" + resources: + limits: + cpu: 2 + memory: 2Gi + volumeMounts: + - name: sock-dir + path: /var/run + - name: dind + image: "docker:19.03.5-dind" + env: + - name: DOCKER_DRIVER + value: overlay2 + resources: + limits: + cpu: 1 + memory: 2Gi + securityContext: + privileged: true + volumeMounts: + - name: sock-dir + mountPath: /var/run + volumes: + - name: sock-dir + emptyDir: {} +``` + diff --git a/docs/versioned_docs/version-0.15/30-administration/90-prometheus.md b/docs/versioned_docs/version-0.15/30-administration/90-prometheus.md new file mode 100644 index 000000000..75d1aa1f4 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/90-prometheus.md @@ -0,0 +1,67 @@ +# Prometheus + +Woodpecker is compatible with Prometheus and exposes a `/metrics` endpoint. Please note that access to the metrics endpoint is restricted and requires an authorization token with administrative privileges. + +```yaml +global: + scrape_interval: 60s + +scrape_configs: + - job_name: 'woodpecker' + bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + + static_configs: + - targets: ['woodpecker.domain.com'] +``` + +## Authorization + +An administrator will need to generate a user api token and configure in the prometheus configuration file as a bearer token. Please see the following example: + +```diff +global: + scrape_interval: 60s + +scrape_configs: + - job_name: 'woodpecker' ++ bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + + static_configs: + - targets: ['woodpecker.domain.com'] +``` + +## Metric Reference + +List of prometheus metrics specific to Woodpecker: + +``` +# HELP woodpecker_build_count Build count. +# TYPE woodpecker_build_count counter +woodpecker_build_count{branch="master",pipeline="total",repo="woodpecker-ci/woodpecker",status="success"} 3 +woodpecker_build_count{branch="mkdocs",pipeline="total",repo="woodpecker-ci/woodpecker",status="success"} 3 +# HELP woodpecker_build_time Build time. +# TYPE woodpecker_build_time gauge +woodpecker_build_time{branch="master",pipeline="total",repo="woodpecker-ci/woodpecker",status="success"} 116 +woodpecker_build_time{branch="mkdocs",pipeline="total",repo="woodpecker-ci/woodpecker",status="success"} 155 +# HELP woodpecker_build_total_count Total number of builds. +# TYPE woodpecker_build_total_count gauge +woodpecker_build_total_count 1025 +# HELP woodpecker_pending_jobs Total number of pending build processes. +# TYPE woodpecker_pending_jobs gauge +woodpecker_pending_jobs 0 +# HELP woodpecker_repo_count Total number of repos. +# TYPE woodpecker_repo_count gauge +woodpecker_repo_count 9 +# HELP woodpecker_running_jobs Total number of running build processes. +# TYPE woodpecker_running_jobs gauge +woodpecker_running_jobs 0 +# HELP woodpecker_user_count Total number of users. +# TYPE woodpecker_user_count gauge +woodpecker_user_count 1 +# HELP woodpecker_waiting_jobs Total number of builds waiting on deps. +# TYPE woodpecker_waiting_jobs gauge +woodpecker_waiting_jobs 0 +# HELP woodpecker_worker_count Total number of workers. +# TYPE woodpecker_worker_count gauge +woodpecker_worker_count 4 +``` diff --git a/docs/versioned_docs/version-0.15/30-administration/_category_.yml b/docs/versioned_docs/version-0.15/30-administration/_category_.yml new file mode 100644 index 000000000..4f3138359 --- /dev/null +++ b/docs/versioned_docs/version-0.15/30-administration/_category_.yml @@ -0,0 +1,4 @@ +label: 'Administration' +# position: 3 +collapsible: true +collapsed: true diff --git a/docs/versioned_docs/version-0.15/40-cli.md b/docs/versioned_docs/version-0.15/40-cli.md new file mode 100644 index 000000000..343c5c676 --- /dev/null +++ b/docs/versioned_docs/version-0.15/40-cli.md @@ -0,0 +1,3 @@ +# CLI + +TODO diff --git a/docs/versioned_docs/version-0.15/80-downloads.md b/docs/versioned_docs/version-0.15/80-downloads.md new file mode 100644 index 000000000..f97455778 --- /dev/null +++ b/docs/versioned_docs/version-0.15/80-downloads.md @@ -0,0 +1,27 @@ +# Downloads + +## Binaries & DEB, RPM + +[Latest release](https://github.com/woodpecker-ci/woodpecker/releases/latest) + +## Docker images + +Image variants: +* The `latest` image is the latest stable release +* The `vX.X.X` images are stable releases +* The `vX.X` images are based on the latest patch version of a specific minor release (see [Semver](https://semver.org/lang/)) +* The `next` images are based on the current master branch and should not be used for production environments + +``` bash +# server +docker pull woodpeckerci/woodpecker-server:latest +docker pull woodpeckerci/woodpecker-server:latest-alpine + +# agent +docker pull woodpeckerci/woodpecker-agent:latest +docker pull woodpeckerci/woodpecker-agent:latest-alpine + +# cli +docker pull woodpeckerci/woodpecker-cli:latest +docker pull woodpeckerci/woodpecker-cli:latest-alpine +``` diff --git a/docs/versioned_docs/version-0.15/91-migrations.md b/docs/versioned_docs/version-0.15/91-migrations.md new file mode 100644 index 000000000..cad9436b0 --- /dev/null +++ b/docs/versioned_docs/version-0.15/91-migrations.md @@ -0,0 +1,78 @@ +# Migrations + +Some versions need some changes to the server configuration or the pipeline configuration files. + +## 0.15.0 + +- Default value for custom pipeline path is now empty / un-set which results in following resolution: + + `.woodpecker/*.yml` -> `.woodpecker.yml` -> `.drone.yml` + + Only projects created after updating will have an empty value by default. Existing projects will stick to the current pipeline path which is `.drone.yml` in most cases. + + Read more about it at the [Project Settings](./20-usage/71-project-settings.md#pipeline-path) + +- From version `0.15.0` ongoing there will be three types of docker images: `latest`, `next` and `x.x.x` with an alpine variant for each type like `latest-alpine`. + If you used `latest` before to try pre-release features you should switch to `next` after this release. + +- Dropped support for `DRONE_*` environment variables. The according `WOODPECKER_*` variables must be used instead. + Additionally some alternative namings have been removed to simplify maintenance: + - `WOODPECKER_AGENT_SECRET` replaces `WOODPECKER_SECRET`, `DRONE_SECRET`, `WOODPECKER_PASSWORD`, `DRONE_PASSWORD` and `DRONE_AGENT_SECRET`. + - `WOODPECKER_HOST` replaces `DRONE_HOST` and `DRONE_SERVER_HOST`. + - `WOODPECKER_DATABASE_DRIVER` replaces `DRONE_DATABASE_DRIVER` and `DATABASE_DRIVER`. + - `WOODPECKER_DATABASE_DATASOURCE` replaces `DRONE_DATABASE_DATASOURCE` and `DATABASE_CONFIG`. + +- Dropped support for `DRONE_*` environment variables in pipeline steps. Pipeline meta-data can be accessed with `CI_*` variables. + - `CI_*` prefix replaces `DRONE_*` + - `CI` value is now `woodpecker` + - `DRONE=true` has been removed + - Some variables got deprecated and will be removed in future versions. Please migrate to the new names. Same applies for `DRONE_` of them. + - CI_ARCH => use CI_SYSTEM_ARCH + - CI_COMMIT => CI_COMMIT_SHA + - CI_TAG => CI_COMMIT_TAG + - CI_PULL_REQUEST => CI_COMMIT_PULL_REQUEST + - CI_REMOTE_URL => use CI_REPO_REMOTE + - CI_REPO_BRANCH => use CI_REPO_DEFAULT_BRANCH + - CI_PARENT_BUILD_NUMBER => use CI_BUILD_PARENT + - CI_BUILD_TARGET => use CI_BUILD_DEPLOY_TARGET + - CI_DEPLOY_TO => use CI_BUILD_DEPLOY_TARGET + - CI_COMMIT_AUTHOR_NAME => use CI_COMMIT_AUTHOR + - CI_PREV_COMMIT_AUTHOR_NAME => use CI_PREV_COMMIT_AUTHOR + - CI_SYSTEM => use CI_SYSTEM_NAME + - CI_BRANCH => use CI_COMMIT_BRANCH + - CI_SOURCE_BRANCH => use CI_COMMIT_SOURCE_BRANCH + - CI_TARGET_BRANCH => use CI_COMMIT_TARGET_BRANCH + + For all available variables and their descriptions have a look at [built-in-environment-variables](./20-usage/50-environment.md#built-in-environment-variables). + +- Prometheus metrics have been changed from `drone_*` to `woodpecker_*` + +- Base path has moved from `/var/lib/drone` to `/var/lib/woodpecker` + +- Default SQLite database location has changed: + - `/var/lib/drone/drone.sqlite` -> `/var/lib/woodpecker/woodpecker.sqlite` + - `drone.sqlite` -> `woodpecker.sqlite` + +- Plugin Settings moved into `settings` section: + ```diff + pipline: + something: + image: my/plugin + - setting1: foo + - setting2: bar + + settings: + + setting1: foo + + setting2: bar + ``` + +- `WOODPECKER_DEBUG` option for server and agent got removed in favor of `WOODPECKER_LOG_LEVEL=debug` + +- Remove unused server flags which can safely be removed from your server config: `WOODPECKER_QUIC`, `WOODPECKER_GITHUB_SCOPE`, `WOODPECKER_GITHUB_GIT_USERNAME`, `WOODPECKER_GITHUB_GIT_PASSWORD`, `WOODPECKER_GITHUB_PRIVATE_MODE`, `WOODPECKER_GITEA_GIT_USERNAME`, `WOODPECKER_GITEA_GIT_PASSWORD`, `WOODPECKER_GITEA_PRIVATE_MODE`, `WOODPECKER_GITLAB_GIT_USERNAME`, `WOODPECKER_GITLAB_GIT_PASSWORD`, `WOODPECKER_GITLAB_PRIVATE_MODE` + +- Dropped support for manually setting the agents platform with `WOODPECKER_PLATFORM`. The platform is now automatically detected. + +- Use `WOODPECKER_STATUS_CONTEXT` instead of the deprecated options `WOODPECKER_GITHUB_CONTEXT` and `WOODPECKER_GITEA_CONTEXT`. + +## 0.14.0 + +No breaking changes diff --git a/docs/versioned_docs/version-0.15/92-awesome.md b/docs/versioned_docs/version-0.15/92-awesome.md new file mode 100644 index 000000000..bf9aad38e --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-awesome.md @@ -0,0 +1,27 @@ +# Awesome Woodpecker + +A curated list of awesome things related to Woodpecker-CI. + +If you have some missing resources, please feel free to [open a pull-request](https://github.com/woodpecker-ci/woodpecker/edit/master/docs/docs/92-awesome.md) and add them. + +## Official Resources + +- [Woodpecker CI pipeline configs](https://github.com/woodpecker-ci/woodpecker/tree/master/.woodpecker) - Complex setup containing different kind of pipelines + - [Golang tests](https://github.com/woodpecker-ci/woodpecker/blob/master/.woodpecker/test.yml) + - [Typescript, eslint & Vue](https://github.com/woodpecker-ci/woodpecker/blob/master/.woodpecker/web.yml) + - [Docusaurus & publishing to Github Pages](https://github.com/woodpecker-ci/woodpecker/blob/master/.woodpecker/docs.yml) + - [Docker container building](https://github.com/woodpecker-ci/woodpecker/blob/master/.woodpecker/docker.yml) + - [Helm chart linting & releasing](https://github.com/woodpecker-ci/woodpecker/blob/master/.woodpecker/helm.yml) + +## Projects using Woodpecker + +- [Woodpecker-CI](https://github.com/woodpecker-ci/woodpecker/tree/master/.woodpecker) itself +- [All official plugins](https://github.com/woodpecker-ci?q=plugin&type=all) + +## Templates + +## Blogs, guides, videos + +## Plugins + +We have a separate [index](/plugins) for plugins. diff --git a/docs/versioned_docs/version-0.15/92-development/01-getting-started.md b/docs/versioned_docs/version-0.15/92-development/01-getting-started.md new file mode 100644 index 000000000..380af05a3 --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/01-getting-started.md @@ -0,0 +1,127 @@ +# Getting started + +## Preparation + +### Install Go + +Install Golang (>=1.16) as described by [this guide](https://go.dev/doc/install). + +### Install make + +> GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files. (https://www.gnu.org/software/make/) + +Install make on: + - Ubuntu: `apt install make` - [Docs](https://wiki.ubuntuusers.de/Makefile/) + - [Windows](https://stackoverflow.com/a/32127632/8461267) + - Mac OS: `brew install make` + +### Install Node.js & Yarn + +Install [Node.js (>=14)](https://nodejs.org/en/download/) if you want to build Woodpeckers UI or documentation. + +For dependencies installation (node_modules) for the UI and documentation of Woodpecker the package-manager Yarn is used. The installation of Yarn is described by [this guide](https://yarnpkg.com/getting-started/install). + +### Create a `.env` file with your development configuration + +Similar to the environment variables you can set for your production setup of Woodpecker, you can create a `.env` in the root of the Woodpecker project and add any need config to it. + +A common config for debugging would look like this: + +```ini +WOODPECKER_OPEN=true +WOODPECKER_ADMIN=your-username + +# if you want to test webhooks with an online SCM like Github this address needs to be accessible from public server +WOODPECKER_HOST=http://your-dev-address.com/ + +# github (sample for a SCM config - see /docs/administration/vcs/overview for other SCMs) +WOODPECKER_GITHUB=true +WOODPECKER_GITHUB_CLIENT= +WOODPECKER_GITHUB_SECRET= + +# agent +WOODPECKER_SERVER=localhost:9000 +WOODPECKER_SECRET=a-long-and-secure-password-used-for-the-local-development-system +WOODPECKER_MAX_PROCS=1 + +# enable if you want to develop the UI +# WOODPECKER_DEV_WWW_PROXY=http://localhost:3000 + +# used so you can login without using a public address +WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000 + +# disable health-checks while debugging (normally not needed while developing) +WOODPECKER_HEALTHCHECK=false + +# WOODPECKER_LOG_LEVEL=debug +# WOODPECKER_LOG_LEVEL=trace +``` + +### Setup O-Auth + +Create an O-Auth app for your SCM as describe in the [SCM documentation](../30-administration/11-vcs/10-overview.md). If you set `WOODPECKER_DEV_OAUTH_HOST=http://localhost:8000` you can use that address with the path as explained for the specific SCM to login without the need for a public address. For example for Github you would use `http://localhost:8000/authorize` as authorization callback URL. + +## Developing with VS-Code + +You can use different methods for debugging the Woodpecker applications. One of the currently recommend ways to debug and test the Woodpecker application is using [VS-Code](https://code.visualstudio.com/) or [VS-Codium](https://vscodium.com/) (Open-Source binaries of VS-Code) as most maintainers are using it and Woodpecker already includes the needed debug configurations for it. + +As a starting guide for programming Go with VS-Code you can use this video guide: +[![Getting started with Go in VS-Code](https://img.youtube.com/vi/1MXIGYrMk80/0.jpg)](https://www.youtube.com/watch?v=1MXIGYrMk80) + +### Debugging Woodpecker + +The Woodpecker source code already includes launch configurations for the Woodpecker server and agent. To start debugging you can click on the debug icon in the navigation bar of VS-Code (ctrl-shift-d). On that page you will see the existing launch jobs at the top. Simply select the agent or server and click on the play button. You can set breakpoints in the source files to stop at specific points. + +![Woodpecker debugging with VS-Code](./vscode-debug.png) + +## Testing & linting code + +To test or lint parts of Woodpecker you can run one of the following commands: + +```bash +# test server code +make test-server + +# test agent code +make test-agent + +# test cli code +make test-cli + +# test datastore / database related code like migrations of the server +make test-server-datastore + +# lint go code +make lint + +# lint UI code +make lint-frontend + +# test UI code +make test-frontend +``` + +If you want to test a specific go file you can also use: + +```bash +go test -race -timeout 30s github.com/woodpecker-ci/woodpecker/ +``` + +Or you can open the test-file inside [VS-Code](#developing-with-vs-code) and run or debug the test by clicking on the inline commands: + +![Run test via VS-Code](./vscode-run-test.png) + +## Run applications from terminal + +If you want to run a Woodpecker applications from your terminal you can use one of the following commands from the base of the Woodpecker project. They will execute Woodpecker in a similar way as described in [debugging Woodpecker](#debugging-woodpecker) without the ability to really debug it in your editor. + +```bash +# start server +$ go run ./cmd/server + +# start agent +$ go run ./cmd/agent + +# execute cli command +$ go run ./cmd/cli [command] +``` diff --git a/docs/versioned_docs/version-0.15/92-development/03-ui.md b/docs/versioned_docs/version-0.15/92-development/03-ui.md new file mode 100644 index 000000000..9491a7160 --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/03-ui.md @@ -0,0 +1,31 @@ +# UI Development + +To develop the UI you need to install [Node.js and Yarn](./01-getting-started.md#nodejs--yarn). In addition it is recommended to use VS-Code with the recommended plugin selection to get features like auto-formatting, linting and typechecking. The UI is written with [Vue 3](https://v3.vuejs.org/) as Single-Page-Application accessing the Woodpecker REST api. + +## Setup +The UI code is placed in `web/`. Change to that folder in your terminal with `cd web/` and install all dependencies by running `yarn install`. For production builds the generated UI code is integrated into the Woodpecker server by using [go-embed](https://pkg.go.dev/embed). + +Testing UI changes would require us to rebuild the UI after each adjustment to the code by running `yarn build` and restarting the Woodpecker server. To avoid this you can make use of the dev-proxy integrated into the Woodpecker server. This integrated dev-proxy will forward all none api request to a separate http-server which will only serve the UI files. + +![UI Proxy architecture](./ui-proxy.svg) + +Start the UI server locally with [hot-reloading](https://stackoverflow.com/a/41429055/8461267) by running: `yarn start`. To enable the forwarding of requests to the UI server you have to enable the dev-proxy inside the Woodpecker server by adding `WOODPECKER_DEV_WWW_PROXY=http://localhost:8010` to your `.env` file. +After starting the Woodpecker server as explained in the [debugging](./01-getting-started.md#debugging) section, you should now be able to access the UI under [http://localhost:8000](http://localhost:8000). + +## Tools and frameworks + +The following list contains some tools and frameworks used by the Woodpecker UI. For some points we added some guidelines / hints to help you developing. + +- [Vue 3](https://v3.vuejs.org/) + - use `setup` and composition api + - place (re-usable) components in `web/src/components/` + - views should have a route in `web/src/router.ts` and are located in `web/src/views/` +- [Windicss](https://windicss.org/) (similar to Tailwind) + - use Windicss classes where possible + - if needed extend the Windicss config to use new classes +- [Vite](https://vitejs.dev/) (similar to Webpack) +- [Typescript](https://www.typescriptlang.org/) + - avoid using `any` and `unknown` (the linter will prevent you from doing so anyways :wink:) +- [eslint](https://eslint.org/) +- [Volar & vue-tsc](https://github.com/johnsoncodehk/volar/) for type-checking in .vue file + - use the take-over mode of Volar as described by [this guide](https://github.com/johnsoncodehk/volar/discussions/471) diff --git a/docs/versioned_docs/version-0.15/92-development/04-docs.md b/docs/versioned_docs/version-0.15/92-development/04-docs.md new file mode 100644 index 000000000..5dbab03ce --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/04-docs.md @@ -0,0 +1,20 @@ +# Documentation + +The documentation is using docusaurus as framework. You can learn more about it from its [official documentation](https://docusaurus.io/docs/). + +If you only want to change some text it probably is enough if you just search for the corresponding [Markdown](https://www.markdownguide.org/basic-syntax/) file inside the `docs/docs/` folder and adjust it. If you want to change larger parts and test the rendered documentation you can run docusaurus locally. Similarly to the UI you need to install [Node.js and Yarn](./01-getting-started.md#nodejs--yarn). After that you can run and build docusaurus locally by using the following commands: + +```bash +cd docs/ + +yarn install + +# build plugins used by the docs +yarn build:woodpecker-plugins + +# start docs with hot-reloading, so you can change the docs and directly see the changes in the browser without reloading it manually +yarn start + +# or build the docs to deploy it to some static page hosting +yarn build +``` diff --git a/docs/versioned_docs/version-0.15/92-development/05-architecture.md b/docs/versioned_docs/version-0.15/92-development/05-architecture.md new file mode 100644 index 000000000..82fa15ede --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/05-architecture.md @@ -0,0 +1,9 @@ +# Architecture + +## Package architecture + +![Woodpecker architecture](./woodpecker-architecture.png) + +## System architecture + +TODO diff --git a/docs/versioned_docs/version-0.15/92-development/06-guides.md b/docs/versioned_docs/version-0.15/92-development/06-guides.md new file mode 100644 index 000000000..c11a2e331 --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/06-guides.md @@ -0,0 +1,35 @@ +# Guides + +## ORM + +Woodpecker uses [Xorm](https://xorm.io/) as ORM for the database connection. +You can find its documentation at [gobook.io/read/gitea.com/xorm](https://gobook.io/read/gitea.com/xorm/manual-en-US/). + +## Add a new migration + +Woodpecker uses migrations to change the database schema if a database model has been changed. If for example a developer removes a property `Counter` from the model `Repo` in `server/model/` they would need to add a new migration task like the following example to a file like `server/store/datastore/migration/004_repos_drop_repo_counter.go`: + +```go +package migration + +import ( + "xorm.io/xorm" +) + +var alterTableReposDropCounter = task{ + name: "alter-table-drop-counter", + fn: func(sess *xorm.Session) error { + return dropTableColumns(sess, "repos", "repo_counter") + }, +} +``` + +:::info +Adding new properties to models will be handled automatically by the underlying [ORM](#orm) based on the [struct field tags](https://stackoverflow.com/questions/10858787/what-are-the-uses-for-tags-in-go) of the model. If you add a completely new model, you have to add it to the `allBeans` variable at `server/store/datastore/migration/migration.go` to get a new table created. +::: + +:::warning +You should not use `sess.Begin()`, `sess.Commit()` or `sess.Close()` inside a migration. Session / transaction handling will be done by the underlying migration manager. +::: + +To automatically execute the migration after the start of the server, the new migration needs to be added to the end of `migrationTasks` in `server/store/datastore/migration/migration.go`. After a successful execution of that transaction the server will automatically add the migration to a list, so it wont be executed again on the next start. diff --git a/docs/versioned_docs/version-0.15/92-development/_category_.yml b/docs/versioned_docs/version-0.15/92-development/_category_.yml new file mode 100644 index 000000000..02d70e09b --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/_category_.yml @@ -0,0 +1,4 @@ +label: 'Development' +# position: 3 +collapsible: true +collapsed: true diff --git a/docs/versioned_docs/version-0.15/92-development/ui-proxy.svg b/docs/versioned_docs/version-0.15/92-development/ui-proxy.svg new file mode 100644 index 000000000..6ccb74458 --- /dev/null +++ b/docs/versioned_docs/version-0.15/92-development/ui-proxy.svg @@ -0,0 +1,16 @@ + + + + + + + forward requestin dev modeUI Server Port 8010Woodpecker ServerBrowserPort 8000/login/logout/api/.../api/web-config.js/streamEvery other request(404 Handler) \ No newline at end of file diff --git a/docs/versioned_docs/version-0.15/92-development/vscode-debug.png b/docs/versioned_docs/version-0.15/92-development/vscode-debug.png new file mode 100644 index 0000000000000000000000000000000000000000..58861dbde187f131c140bdcf4e9a8e122acb6b25 GIT binary patch literal 17502 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-0.15/92-development/vscode-run-test.png b/docs/versioned_docs/version-0.15/92-development/vscode-run-test.png new file mode 100644 index 0000000000000000000000000000000000000000..6d163f8b8c524ebd5c2e4312e705f7aa661ff79a GIT binary patch literal 11440 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 O)=<$=u2Zyn`#%7$GeGPB literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-0.15/woodpecker.png b/docs/versioned_docs/version-0.15/woodpecker.png new file mode 100644 index 0000000000000000000000000000000000000000..b92f3589f55d79a17069e44ca23b44cf91e6139c GIT binary patch literal 71639 zcmbTdWmsF^6F+zp++B*h6nA&`La_pcP>NHW;t;H8(IQ0(g#yLhEqHO)B7ss|i%VhC z?{9aX|J&Ucd6F|ZXJ+o_%*>rTXKwThZ513$3QPb1aMV;4^#A}33IIq4=tu}kJYX4w z7yvIc^_8BUp3X0>tP5}ubbtkkhlgis?&tBz*`M=E4FjvQKNkhtLVNoM+q(yj?$Gh^ z@q@$TrR5bqO@SLXw{`fhUt2q(qM{p{zgO1azqfZE9v&vA7hc~s`C)1QUfbB_`ue85t3NI|D=<7EEaub5__V&cK7V?8 zy7gIqn!kM_lv2cDSN-tosea!?RPV*p<;4p<>8qzF)1{}}oGi!HCwfLk5ka(vg8_L( zd1f`;$+K+NfKvbZot=lrqzFs*uXAr~-rUB-czAlyNi(~bP(eNQJ~YdhM1-r$65lOV zFJ2Voe)fl-&2Cyy0?oU#yM1NZpeldiOg>D?}8`xmyQDtMA6@1Plf zx3@wq_$$gQtW1<`6Z^j=zab_iGfyZA@lFlRORuOWxovCfS}9O_sdraawsKu}cU{}^ zJs{0X;a5Y#o1)$EhVY;mG)!(43QJl9-UPpk`(q0 zk(FyxC9|Pl^V?T{)CwjM4Ao5E7tL`Zm6km>eo#FzxjuZ3w^>Q{%?L04pH`SR{ggQ1g&Ls8A^oDFhJ5 z|368z?cjFjF=sI_K<4j#xGap{?-qdXvOCS^|Mhh%xp+e&{mZ;W+z-yL#r>0b?XW@g zlW)~wGjgmvV{&BvZ0MGp8}zYx-ic3i9%+wAffMfBnCg5*=tEoAAvYMS){lg4?swm5 z;44JkofuzIFL=%ybXNa-N%lv0`D=SrV@yf(cIbX3Kf_Blje7Jz2k|~2;S?to0457< zpjP>!=s%L$)l~{ROkO$c>q2>m-VAxWBh&|WOH@E$L{9Z3 zXMKyD666xA4_;IDCj8m&_AQNnBHy(Yqgsu1es>~ibL35C5PJ!iT82I?E*KjCqzv#} zIn#Z)r-n=PqC zCafrD7ac!Jx{*HS`G5G(==WM7E%Rs32xhG>`R-2KW)|!hv8%7SzD!<8%qfDaH5GF5 zc6Mz&4jVFAxekYTZh-*6v+x-lRI@m8%jg~XHFnz7p(>!_Q2teNSNKVB z-z#BB;`dUd9Iw8ECAS`@H$6Gk_s(&-&_rp(zVjm17CeJzBcnBISDCN8%CxRaevjru zxfTfo>$Nl7_m2ZjPw3({Dg{;iU_1cGL;48dxf9lqy&Pi*Fd*Dp7kMT`D`!i%`6sAb z%4$t}sUVeyLjoyI!59EevuBYG`?>psY^bfXH!QbOs5;fB5y)^niX{PM*2&LD8osa$ zwf)}4pTE@uw=a2&j4V|BHAFfzS7>EI1EB)YFQq7=SNmk~>`Wco%CG!3g}(8Yn=9PC zZw$oQ>s7nx-SL%N>-^An*`ORu6)97J<=Xb&_DYe#_puE%dw$hKN(cNR`G+uCA!hZ6 zbGA$*z$zMy0suMosEdKv?#qMSDC7VDf7*BgF~R`A)%72Pn~^o@Yydm_1+f|WRh!bc z)5VY`y4+{gA0o-DSzusnSunyIJ_A_100uHSU<2la0Zh9^1sD`8Sa1p7K9T2n~eC@1_50}5Fi7C7hpojlfK%|KnL(q!HZy2*C=LU#t@0d zAR?j-E!a9KKyMQ&462d>qN*8Dj|r=TLGIb%AwQ8Nfhc;oI5IZABFqb&oGuD_fX^$7 z4_csyKu0QX>l$$sL6W_`yQST^^tpK#3i=9P^XSptV{x7NR9E1kyiu6881gD`7<`D~ z1)jOMP&lDHD$gs)dx6=PSDoIS=10xCad)ih9y0O|7i%eBv`2V~Z)AEfZf>iYA%b1Qv_cI^L38BV~EKq_s?iHf@EFK*y zTqpg>804e%mQd(A@AJvJtH@YG$uADK|mK-j=q*5RzfF^ z#Fak&GoLvK!yn}=O4Z9D2T{K6A`jbR8>Y*o{CA7ZcEjgWCa{}yUie~&} zc6YbD5(dbq5mo(h<+ycq6TD>Q1E*_umd+l1~XTP_O)20q)3bUcaMsHY*Ln#+KY^OfWa33xL)-{a?SkZzQ`$8Vg}U!{F}F6d?YCh}Lm9%(Wm zQmWDt1IS~oUy8+r8@~NmA;QZe&een2Tpm^Ud`Nhj4AsIJi+s#IzY(Pzefxrd5Qpe| zeI1?u#bUr&?B?qnZ5xw5#_xeQ$Y)%nm4rFGYpLvnD5JoS zdfC5gbXmnEKOe%0fb-y!J&=HtO|)RVugIqDL2yIb_+-}=cA9&YEF4(&G9z@KM8 zw~N7Nn#3M^0sgAM%JYbJY!StJ(sAt>l*G`c=kyXQfEJm9r&yAGgsj7VLO7eNWGfEN z|1JsIHVive0!#bgWz5e!GdLUpUya8)5@g%=gcGR!7&f;2hQVd1X!?y4^5;c@N~peK z5jO_8`ozJ`CHSFPPa0Whd)#bQlNVUGL=NyhV8E*~xwORj*{54xmaxCO$BdZVsiIpJ zE*^t16)cDCe7>u!&)bzwSM>918|COd?8Rg-`MH=~(xz(+5lk0CLl-bVncas)|Nd(H_H8_Is0uvkCjnGvK}|t#oxKYpL|wN%xKqR67!Ji-+W(2qNrsoUj3e|r^PGx z*_9d2u$J*ePm6aAhU2c}ovUkyr;jMRpk=p1j3ekJ5h942%&~ce}2McJ}5kafXJGVl;CEQhwYkh{jt-VnMp5yl;B^C@Oz? z8@&;S{|c4J`V|WWRx_q=BcVdzA%@@8O*t7u6kdSD@V0FiM^ZP0cea}=?M`j8c+_Ev zrkdZCpGHIMz3sj9n|x^51tm#++l+QWQ@&(JupBI0^=;;`Vl`&%BuYm*lyQ;Dy!Hxx zapMb;!SRoK9djxlgeit?d{^vb7OOup4w_{FabPT~y*Vkfz(4&u8%*9ibTEP0`PV~; zViY7o#yiCT!gKCw6=7?=@|{9oJWcPAC<5c7hO#X}Lp(B`2TkICr3<;XYaWY>ws5LB zRj=@s+%A=Q2eUZxRY8~a0Ix&>NXP_mX=Ft50bJ9=06FAlJP;~611xY>6hP-gZYDrM zRdr*&@XiHtQC1G;YP68~@MWi_RO@BQ${gP~=J6WFSK>9n`BzZsIS7S&(zL}BeXBxf zgN%FcM=&2JpddIN9|Ry5fB?oJAS4)1lo0^mV*o*m5tRRznt}KSlR+ikeZOOF*-s6C z*m1gl?{8}20zo5{;#Ys=GXtmJf7BEV^s9hj?#@UufwiBG^oNtq8El>0N;{0uP$61P zWr6FqXaS#&-aK|E2^I5`pF$a<3>E8&)tvtN49NGDCZQh0~i~(#`s7e-w$KhX9uX7F80k67AtGYc93JSfCf!;kh{Y)t7Yl_RVIB2cp<>j&PQB9rJ|F{ii$D2<@=fP58t<09sQb|CD zf4Qos>%toJLV_P(LC0i+J#;7@92UsI2PmSVt4_m0lNd9C#UF`-Sp~s|sonysEL>EO zEmA~kKR?{G>PgIq4pv#vCwR$cKJeE%C|F}*LR#i^knxZ2;2HDi*EzFHNxRm!vGVlu zxUTEy?Fq`y-|eF|n>w8n9372_3$wnj^^y%zs232wbYR$GykAvuevrhRGT<(U+1hhY!`1lPgCQG`~r3uI_61 zlX|`0`I=_|^K%^LY0R_T3KoRH5wqTTOqzg%aTsfU-uG+4FuqEGwdYDwJ!~vI;$L_8 z4}U(|qRtxZ$L-pz31I3@K*!}(@iE1gco54U4BM`>*3#?-(R2p#XE|FRY)L0O5CK3R zDVooh#8yoCOXrz)Q5M)H3JO-YuKc`@T*0CN2R(Bxtd0@BA!6MeHhIO~)M9u!7FM_> z9IzF$6k^9coN&}dDKtq6tg8NsDPdYgQSZC;he@^N`s#P*Nz9q2t?-NQ0< z!zwW1bDkm*KSmo-jrI(nTLXg(<$Mls{ZM@SCu`e-BZI~*Li&j&3w2b`a?x^mu!s3! z&s+pf_2!IFGIY@ucD#zolDlqD1&i~_Ox?GaTt8aBQM<~J85m9QD7)U3tD`}$=1RCO z^IItO2L*|oG)qc2y=4^!0kTdgMR^AJqA1*5bl^ zy1V$^b&>0$i8doUx}Kd^aF|(+0cA?YQ>ez|%E2c*6kWs+p8Pp;2_IaaN6=2h(FdPB zs%p&Y0BIcm6o&-buim&HU;uC?gy-5sjxIkafmR+v@RztA^E8Viy%XCR2bFb}e>V{* zd#9R&YWz-8@42$WU*MeY7t(N9UQ?zdS&m^@9_#V*UFWIKXJ}Ek=sr$(>m>%0=FrtS zm-f4s@v^VC?2LyBU?8dn79pySUn=H8Qg0ErOJ=#c@)|kN8dga?WftCF9Gvx6c}h*O z4Sj@Pk6vvalb2Rgu41j`RvNN4>Lt;P*DN8P8n}^zR5Z@0a`UrOAL_ehwiO6ld#Yk- zrX&Jn<9yTe12(yDKBIMarG-CNp8c5!PVavHy3KoczQQAY{ZyD~X+06BtFqO$&Uy6> zWJokFkDP9)wHN7H!GU;e|B0S5!pzf0|3oGZs!TlzXuEj)8L0;$xG2SPW79Q{Qo!+6 zT4q|`j6_E~wgZpm;_3PNpf4`S+^M-TL5G({t4XfDZ~U1tt?VXbP1$RF{FzYxRUx_z z6@J-ZKZj|eHX8;7wi=$^kH|X@3RzA7)t^GfXOgP z!ptD=J;ukX_IV1dZB&C5{#7sVgVPF$;1Q^0kF9o}Z!R(H{^<`(eM>2AV3Br_7!-nH z&ubSrCtZnz0RVg{7fy#s7gGu70yTZa-+J>d8@@0g>;qpwZT(F!$sM0ZN!K?8M%Zd` z$3;qOJE5_|8yE5XWykC3W)d(WU}*BI&WSL=G&3CWf2n#ox32QOf}DOdp+5QTk-gXzKP7;#VmWBCCtuu}}Kt0dBW z5FI}NaHxi2RMU&YzA%Y?3H^nB4+0>^N+>Kan_Yk>4wDmuR2qPxCPV(MIcdG&s8`4kLV-{qs{pCJnRgom za3-k}Ks-F5g)l*K;E;jQRThea;DN{pvJ_FSFsj+bVNB$J6C*bLrV)m} zsEm17h+h3n92Tue2tdfdPM>gHLs5~SuWe``>lm{iNpp(#N!xsd8t3(24p)_CwFF+e zY9eQ#Bf&a+>5uPx55OzWzSq3>eni3sGK7MSy{zWG${ZP)O{qRus4Yc!(SpXcXyHPa z-jv1OSgy`@z>d3v1H!av_^NiacYUMn>&>S8UVyj_Q^mc;Q};!mkvM($Ehleyts&%X z8og@M?7oF;Z(DXK_$&2N?`sPUN!2>GNSH2keY@^?Q-GdC8mw_e`OK`JU&6Akc-H*U zn@LCit=OmDP%74JsZ>#(1*3phb6tV@%MwGU1aP~_ z-oq`=ZEqNFVUZFdBPDPoUUiIV8f~!cWt%cE(k}?Wo1jsJ-g^}`QkQJVy)MKYJTkgX z)_Z4LJy+)W`*m@f%y%UaH?}yMwuOVqo{JatXC1VS{Sgr%9?a7=-h$Z!zp^?#W4($1 z4>q2Do~toyk#}^My|%*4RzfPunE4Q=ya6+8`4DJJguE;U@(c8I6vBO_*IqN}yIA^x zZPMBk*eENc6w4PqJ+#qcqtKmoCfdku`c-Gri>wOh$sOIK>SfS)VB&8OOtExo?6%R- zQF2~%;uRA_Dv5uDjP*q=cU{;DI&5p|z%+;p*~x_6C{1<6d22&f667xl#?iW>tD%ti z#9YgjL-r(<5IIqkO=QBVA_U-+k=(7NCM_@GR| zLQrcQE%McjXsqg3V|!VDHXPco%9E~1TJ?RGjJ}T&kVZW3#qS5v6=;KceiO|0hi{SY zRktr<`Xr;s83*GcDY(cAf)$eawqlQtma&p~C3l!0e1*HzKSTxJ=#BR!W7ey|1jvn?UVRLj4dlB#yQ9UDg~LbN0fduN6~#anCw_Df z4;*9hmk)CJhsMj<+b3U1$)Mw-^28#nbNv(!eMutl7j-V-4*~s42FOg93ll?Wyc@|_-**7P(tOCATs1*; zFfxZZF+G1<>GmbPS$qf^ld$6qh3u9p3>RNy_ZNrBOBw*12pNsys~ z{NC~o-?5VU)qY-e&L+LRaYnvI6?(D9L%T@h7nMP3E+o`L%%U~(BJxPV>lBUZQWSY5 z<{Q5F8Ao{4>)pRaNSz!*xW=a5Fp%_|>QHhFO5ZEh4R-P=<#)x{9Q$OzkStxE?3TLf zy_ydfd=1|)`%I$JPI4r*irRI3vAkm++M9*zvlU)}s%m%w{&EM}d9kAdNkL)Y5~b3C z(X1y86mJbYcjz&2qm?MJpr~2%R}Od?A2$+%Z;tslFwVj-LzZjN?Y@O!c-quf@^fWG zasN@V`>3kO-iE)X))61k52OA#)34)AyMMM)(9Ww512!&l1G09WW#))3Q|EF_yibzy zH7*KVuKL1s$$GH~DBsZ={TOslz2Gi*3PJYfeQrt*Xw0(1a6(P@}f5|*rj_)f#nhG|z9Ncs5 zTt(s*Fvju-!1Hy~JXfIkHlyg==oqWZ8v*T~RpZ8-Go|>PI_FxWrNoK42$IFFs`CL~ z`A~5&G1^BV4QRWKYqOBYUX>|Fw`jZ%)Al!~Rs-3Vo?nss3sQJiTSRSS$9a>9IQuDI z`Z2fLOL`11YQ}wZqeBj`{x-1`bN$(&E3tcA1T1~<9PhWKms$Nfg~3ctByx7Q?yRz@ z*Y73nS_!-n&LiUs_Vd%51L{+b7b3&2D{d`s=;N3(jE|xh#eD7jz>#OJqu>W`6pU z`2j2_58(?7ul|K1+^)pgyyYB$`9ATs0m^A3QkTzd-@??v3heOGfegRs*=TO165{Hf zPotZ0L)M~5-%fgJKt2D>CqkdwJ9FvidI4nn(ah{18EQ3Qe+F}4n$pnIm7~^51b@&? zs;Kp$mGhTOPKg*Ze){vy%#u1_z`2ZGnUimqn^jQZq7drOq0{&ZC=?2u6Kttv7RoeK z^RbO}e$jbO!@r4ZkqEVN8he>7z>qb+0KaaZ?tH~HCZH#^GNM^vkT|c# z{=$!!pn`S7y!s7VLM+oaC~}VyAnGKdmn%^*`d*J>as9dX$GkLh~hi9AlR=XZtL}Ei?zeitMPZT=sqCTp8Z;? zc=-@E0(l0^8m^{^Vt<0P4;j!pP8}JB`)Z=%t?4a{$CfY|LXcKJ6LyU#VFVVjE1~z> zf+@Qw;>kJON@z{nrDg>y2BDS#`uU|(PyG37LL&@#<};_E;CNqy)x__XT@9;d0#Jv66Nx+Lmj$M ziGCjrjew#&ec@!%_bHLrluzZd+EG=LjnYtqXBXaU!g!1;Kk<4^{-Aei?g>*xf4}5q z5{cb`IvNjrQl$z-oI-VEnBWQbYNO?B9V~@cpEK5v&xNsm*2h~Sa!f(?AaISqym{TR zdF#5jf&5@us24nevAFLoUSuhx3)3o?I`X^=TRilnFj_S%o)K7nO%ePWW;=sY-sOA zG4V2_-v&G2OY!%j!C{CO4gxuB+PtaTIba`UhEq{FVX7=dv1oEsl%SFL^5DUF+aal z{_CTx_M6^;C<=25f>Y8hj6d>NI4GPb-}WxE<$B(`{iuj+L(SIkxO8QGW|V+m4XFfo zDuQIHP8B966q+ru7QbEGy)JV!(VFSQy@4qn8m}E+`sI9Cx}EoXr|-Y2Jo1fv8yR$x zOuP8EeQ zQ%`L$Dq(CqzA9m1#nU*QCa7i&?QngO!lUPZ(@+35=dr*2L>u2izZ+op!S4ssj~pgz zE>XP+7B*MU?@)`)12-N1N*X?7u8eeO?2RmlterOYZpXj-nhkQr8N?mF=KRa87^x_w z{LZFp%FdE(r68pOHHn7Z;#JyQMI)cER+idG;#wlXpA;if_Jwr%-!8-aOdfJMJjah*3@uk?8OSyks|JlLIgl1IE45EGpA=k5@j-W1c z&iOqF=Z%?FSOH66nEu$8zlQyb9*la{Nz}($q^Fz11(fqU`Edxjuah^4D#Ud&V%RVcvNA#~8J_ zp(+1id~NlJ1!usG>gf_W-~|Q?zU?~OBx%S8S&fi0{-rbwq@LI;w;{<>7!pqp<4KRi z*`I(rsLqalw(_spC)Q{8E)PvTQzF!y%)}6R5X)BakL}~0y65M2CMyHE{na_YUvI`z zlUa#67Pib64Vqe6FZ@oabbJYY!XSn};h|(CRv7U(!!LD~rd|rXbSPdhS_A(6N@wKM zg+8GmX6V@8YPM+Aj(m~-L3?)GgmTkciSuQzJ!6qs<<=sZ+mxLeGG8LgO z1BhI4ib5!B#KO5bz}iG2zrCs{gOd?ggWh6o!osunOB80Kv9#xuxzS`WWg-2x$ac5_ z!}Wu287;LBeLP2ronR$+HxBWMYSf z==sVRuM)EXEfa9za!8BqzAmi1B zDrHb(hjeq;WQ!W~^#fZfSQDMTN&WcyH}t}SYi_xB8Jf3kivAYv zSd|UcQg9&cR>$q<#sGL9#S`By9e}vc82|K2!#dX~O$KQE{6xp*13l(velozW5gRDga#cV0!Sjbt}ni)9wq)me9H*!X3~T2S89(ENH&S&cQwu_`is9T>qB6# z;J&UDl6T@-NX^)jrzG&T#szncM~pj|+pX4#IO729=HTAMb^@jSxoMFQCDS{u5Fxqwtot^{#9XOuyjb&aPvK;kL__12)DnpCN* zljrx!R1cn|$%}7B> z^c;o`eAtW%167ZX02+oU)me5o?9LsVph_h6gj{PR2H2_)ouT-Y6t^ktf>O+tA66u4 zlk*=^3#g(a$kdnzVdsdQMMM~kQwT<-{Rki-g-%a&)jd=p3d{IBS|Zs_2p4WHwinwn z21AF3$@QB++O;293j~`>@Yvsl`1gc|pr1w?>4^DTpf(>i`*TJL5rHoxUH#L#TUi-k zcLdG9JUp?Tz}aT^qtfk!kl6o(dn1dw*hMRDCQ5~!DZZ^{Lwg42u!Rx5L^VzjFJzjH z)lhZUKow1X9&slO>n;|6`g&w+Bd;Ux74p-cmt4bwJq> zpOMQz4n9(_YvBav?mLFtb2;mWRG{FGXg1h(oKd#nPZn@(3FjdHaZjqPev z2&z8+7pdsGL|}M6Jq&484&~z6cR>X1H=HnsWo{gvc5MDbH5P}L^Pd;|*2st8%@)VY zn4&EtXw9PoCOl3Ge51>*{e5kD8g-tDF_F*O%mm{I8bQ){rVbx-7H|U|fAh29a^3qu zDLFB;ajul0_g~H-l<-^L2!;SLy zLxdI>r(5^|E^u&5h%zEr$^TG!e+;j;B#-I6X=}L9A=^cMts08fYLCMOCjd+P zCU7R^V0tMO2se5Vvt3q-L0o*4t0(*L1YsN01{019h#`dmq7^W zz@c7a5Tbt$M&pDc%5sZ;umD$|@{>apsQs%+;7oW|IeR0V^cPTj_E5T!rh zBRD{>QG!g%Ce4eV98nz=#B`l*-aQe5F$(O`B8rxiY%nFuGp50Q8@YbS|HjEs{ zr->jI22A?+`~V`+<)|n(qdcc`pIh7h-1`gHchUH@7o)uAXp2>{ zBAnKP?ts0cdU9Ba+L_1ncss{qXbVO>bO98 zt51?NJgFnR8Ul@u>Tz&|p4AByc`lRp5aW3(_Qk`9i12WkFd@a^68$fm-cYCJd}_ec zRLAZwN)eb&@o_SmnKE#BHYWs3ReWk7L38CbQg>mHC5JHNSL=a-N&{EVRNNkR&6@Z$ zUu1IXz~fFXp?j;&%ACe+mJJq!y^`@E=EOJV|_OCec;bjtF5t?F{hDH zMvgihqtN=P*nbdmkifgPVv50s955m>^)*eM-*sZq-bmTgA)jy*-OpD6N?nMG=S7xQ z0c#!FryQoVa&+F~r-61LkBd(9KaKocph9XFXp71{T{N18N~6nvDP2)v=0vg%O_Xp! zs1kd@#CNyQFTb+|z9RkLjJvC!X^sQfb_l5cgR(;e#;`w=bI&?FD%ehV2M(AbgO8pA z{%P?v9c#&Y=UAogwttO_@Ol569cT>23Imtx?0}pK*YP1^a=DAzg;6JD9h73IywV}? z|KQ%YO3O0{7GiqPn9>lUGg-bl2PRYrudmX8X8TzaYr0Ay&oWfH6ggL3n4+TPB|%oT zelVi@r=L$4_t0Uh0iboM$a9oVAMBVJcCIxqWi(m($+>9L_v9`n#=(k?`=7n6QNlwr z0{_l^dBDN=ZSwqg{AL4SJ9j$dMXCPnGrx%!Aniw#P3KsnAcO z$En={XmsDri6JL+xa@}CyzvJ;I&xmp(IZZR23u?oC)3M zq3xR@sRUJI?_eP212v+aCp<1W93wO131ws*}4I z?hF!vh(G_|bqT^&4O}~b6Wpz?rkqdZPT&A*?ZNBh@6S=mD$G12U^bn1mP{rMUo&RZ zZ(BQeqxq5;%bJWzP;DePrtr2PL##5E3Mp8u~n}3VKm9KQ8Am%jpF~?ifKUO?9Lu)ffXrv z<~IBB;&&53xvxibcKt?Eu~iij?zI$YJvwGYeb)w^Jpvsvztxt546U>s&cg*o9-2UxcW=MpfWC{g8I4Y_62i zBMLyG;L ztNeM1E&;2^pE@S4IU7IC17){`Dt{mo8b>Puwx z=77OLK5MB2h$i-TeWC+lq0&bE=by+oGhU2Stxib?Od_8b;`CVvyWAY+$M)HGr+a!{ zPM*?cO4`|kq;9e@3Sc_w4f9hj<+r<1?kc)y1QeUkoZO8{rWZ@2G(Y!h{8Q|0AJmZj z`8UNmhp*+xt5wrz%+mvp-eZ1`da(mRgX+tR(RM68;LyVuWd2S;Jv*`1g>pJ_d#un+ zP6AX^>g)TGF8_LGVY3vGKHw!E&#yO}X$_khFT9)nv!KjrZAr`fP-Q;!Jh<_*m<>0X zSKZjulByBNMq+F<7quK*9!#UyOTyT*Qv0_BDZYLDI-^3bNN?8W*2xui$htzX#6X~N0FSxM-_{NrkP)v2{L$Rl*5s%r2%=|rI!gMYwfnN;3Bgpz zI4^%yW(!=OTW&YjJffSRG@p{&tUfCPs$@c?Q!sERl%7_21o&6pMN2Ya2jK zN0YQyP1Ov!=bx_LsTj$Kl4f~r8{gv~!4hz}U|9uh9qX-IWpyiqQD4$Mv+?0{KdwIu z)%82Iz5BRp4%IP89V|LV$ryQuJCq@VXE|4!vh>VU&uU?)osLHzT0APr?!z(E>T>WL z7FJlfH4|`sBRl|9FMLJunczhY{+Plb;;%4>0m6mmo3TeM)hzx-$v6Vb2;TZbDeF!L zYhCax_nzOSb;lUEAFe%z6_)}2977cCxUR~T0o%KS@ti_E*nmHk3DkR#;Eu<=-HHMq z4zOiJzhIk9q~{h|S&3jUhno71A&%!Cb5*~*d3cuF+f{Eo?N&{@AWuSW^u?WBorl#K5ZpX7hg|A_^9D_ah04>tJpJpEp37$hA9Ig!9!)vSG~ z;hv9zJ!a_&S0PT^q_Jl?M5buX&sEOLkKz!XnU(4Til^9Va9f)1eP84^m9`j(T)jY# zN{$b?iB2o2;V9!5kr6rc3vZbgvp~uC>Hf$C!}vM5YGS*DHf^mfkHDr`S^%}CQS1`j z{wkUb5_EZbvnXK|k0ZYQ4FNqKI6x5}UUj&_5f26tD^Ar@^V!P`;fE^JVZHBuBny!x zKxUr`Fwd!r&f@RSIS+abB?M>VLmDsYXn3$D<)K92(KOtyr(zU4dKd=CM&lqCOO=fQ z@e@@R%8Czx8vdINAp0O*G_hm;|4iQQKE5P{gqlKqi9nA*ZNCp3bzrFhLfh0>QQJ++-+c=uR(40PTym#9K zvj}Iv*?YT7LlO&}9B5~N2jlYsP$(B2geVym7`J19w-Qu?ba(6zJCUJ8TJx$fAw~$& z#pUO8D9HOt9WjF66}B)!V1?P3c%n^cuSkB<$*lOj!nR%dE;H1+sxT}EyPS!Jf^sQ@ zXihKLV@GnJx?gw+dExrs8R5UKpphc}SG8Hf#K@2vTO?|chEU{u@~pNHXhanC3{(Rs zKqh?A9IjN@{^VajfZ;i%RI6V0#U(;C_Vell`eS*6zXkMT6WSuLj|2(ixA)M*b6Cuu z+`CDD>}Pd~R2-ASaZec!A?#iMls_QSX%zHng=}xO{{$q+k+zN;H+jwN?gllop(&_$ zo0lNpH|m!{``o#sW9dXFAgriPLq3m6$j?$!)%Ke++eU^o=S_F{w29=;H6@znegDg3 z5GRK=UlfvAgG%x1(cdc)zsB^TBqR_eU1>?!S1hR|*vjuw6SVbFOyt^K%_EF({+8FG zy3mS#J8t^8qiTVq=bY^h@3ym5Kx=-_$eVk0m+poqFKGD{{}}pv+OOsyy7cMv60z-* zh^dG27qYrX)pBgezENFJwW*Jkia2&&M|0f!?{vSC(^7A`c8{getINuM&&P3;H)2`> za3Fxl4+wyICl{=y6Zeyv)?pd(_s{|&hNT;tP&r~ah}W9}#~YK=><^*rFpXm}=PP^F z5nSxx{ukgk*W#y#IpFpqe7^GMcuE|3Z)-ncd#(=IUnO9^NPS+ht5zq^eJ88sK8vV+ zeWa0IvJyQGEjgz_h{UYUXQQQo^p{5z ziPm^lBS^3{v%X&>Z^xm_Nd&u4!-)v2yh#in8yV@3kt+!vbeiZxTbzims~M1Gz^umQ zWwTnf%e+#`+(|}m#kuIT&h2(18znsX3NHT+aK!xC02Q?lYvjwQsbdNtXB^cfBV*gg zDu8l6=j?t{Ul zE*n79z$6eVA;nyCrd><5OW4YRxWHSO1VYX~SRYV8G+A0X)%x(N`U(T{*_AF^7zobV-8dNRk$WBR>l4Q1+s(+(A4sgG*;9 zPEgnYnwUT zHFeO178L7fM<4jZhh#)nFkWyMMCKg~9B}{NyY~cv2G_bgNo$3>Q4Pv)?h^P+hAVdz z^f%TUFXLAlex183#q^Pj|cY*)tCPvn_#U~E=6AVG_kQNtLEGzzl0?*`e#QGWn9aJ~W@S}aKA zhe#CtAR8*kfH4+wGoM3ojLm^4D(miXQ1G!7+TxTbtlWCfHS-${8AGL`D>@o-#$Usx zKG1tXTwX`MPJK3z8ks987t{L)s$>Xmb&4A_Cjn{HBvuDMcgi9p(2s0n6OR4T=Px(x zcQHO*uk*&oMCJ6e*oXvy?;3wwk&^vWpSvs-|5E_o8~SgdO0yXQ(>+JTo5e`IAY8N$ zcL#&q!CE2ftL=*O=UygR_mZ)#?iwh+f+X5Mn|#3ehc6xmLKiM&sFWd;y}x0004e*K z{EVG^GhOrzBaAux1I6B4>bj2n-^-B+t{DcI>Y26iaKvgshUTSMLOmzBzQP`838AVZ0jb5`6H%4q5m+R5ebaG3iLm<~OWvlO&v}LKc(}{wdsIw>kx>0j$}Zo!n6vG6G~Na4ijLBxveF z?KAJf@l(ZA=Oy=&eDf~cSYChA34I)PhbA!KR-d~;UzHK$uQhVXX^iAKOQmxi92O;N zRirg_en-?Ve}6BiI2v-0OO?qM)-h{71jY9%iL_-?H8db|)!kC~gM>e{La;eaBi%#p8B|F_7&bp)SwY-8p5J?WP)hP zPfJrMuNxj%G%-D^bz}3$eNgayue!Mo7TQ~m^<@xM!%JDy`~;15j%kB{XAFl8e1EOs z$q@XkGw>9;{bJNqQPqzu8-jcu3wceznP^w>oa!gD6{cf!5!pMT{N~n}cscAzTd%>G z2mA45E-&IhAn7-aRxV#6*e@Z9)^#jQ;ejRG?KUkqi9@9++gs38`yyV?h1VCjhIR;V zPGqW*KY2b{*>|@Y11s`xCanBG@9-vU*YJTOveqT|MLk;K!E>v9rURPn3dJ`<I`BV>SVHk zR`it$wT=l;&0pjsdCBjU^77j?KQDnI@(Alc6Y!r)(L^g5qs zPI^v%5}~|-|DqLYNGh6iK+|L(u?=QIib}hsP31Tu4$3T_+AhB0VuGJLr`CmClx{kB zrt5}OH7@NJiK-zSU$&k)ah+(_`YO`e?<;*nH}=pH+Nbv0z(GDQ1$h}#^`Q}<4$_;K zhaiU@&p}X=C=!?GBs6t{{cMAW4LhYqBy<=mffRd+-Lj0d0!wO7;=3J072^181r)Qu zyc8Ql`k*;|hup|_Hw~D968dP!jU_-49^zOiwekt?t!9!LYTQ;`{ zvqf%@rwM2dB9qbHDGz>S3rf3Z>RT;L}@+Av3paX?$)TU9ypq=VTIDTAs}u&i17?&!Ds>2f+6km7KS&_e+p4J zv2+_=C}zMlLTrg<8I+X4447U&axk#;S=rikSVL?*WfVryPtzIRJi%_6+E8oWJtC=D zwI3mMo8%g7dHoxZl>Lr`gW4KMy@odBLPn~{2AcD1gQx~(z|T>7PXRABg z{J0Az5;Ah|{x(}VIf-~~FB)?QoJ@)e=Lic~Vk8iU=4SKtP28K+QmZf{#S105xGGJB zE15f!H9w(c!5eW}7QbLEAjH#>SuXP;qeWGTd6P`{`5@3kJZr>n)>(#Bptmh3y~1?x zN2~Scwoex6dl_nW@@-Q?ok{kSq-2LEJk1)tMO(X){=9@sX`_@Rs5Am^V*`6ZplaJf zn54#tM^-OF-oMT0<`;>TnqVp>lfx~8=(Z_nHd7dOUnh8eIabO1> z*G~Xzz0YHUz55s!*qMRZvdEC+60WF&$TaZ-q>FPSABk&GaOoEbl7AV%txIay^E)v} zHLvmu(K83R=wMbxMy!Xu9>K8vN4vxCupT$olK?vkMv#H46-IeBdAEu*i~3W zI?&s9DS86i?lok^7(YwT66|JwVT>4(R|5tW?sRR4xZs<<6gtq|7*1(B`(=D`pD0-t ztQ6#)$ZCn{BZt>`Dk0D)frq!JQ@~^S2R=e1-*wA@yryRT8Qb)U<&sTEWb`HiWGmAG zPns_9xGw0|?_UY4FpVryV=CHdGybjAt!ZNiQndRxHJO8VEv~!a_>N1Y60yZS9889A z@bY;{NK~`7scgOn6R`$6j*-c^yMBQ`^Jko~Xy5~i#i2oyUD5FCaGIN09nkOnQXR|Eozx6KhIQC0%5sbiykz$bUv zBvwU8Q~)}_L9rwYBFR)1*1rqW8b$o*E&eM1z`B@z(Z&8dzIinpf2i7?KsV&*@nG>) zxx>Nc{<{!ffur@7jRj*07HS@GA}O6F=i8m#-S5cjFb5g3Tg1=Z>Is|v%*JZmKT=s9 zEB;t`k*FOxepT4j2MOAx;kLlM*4;iHPoP{M>@sUMy?GZ_w*0v<^I3kiiGliTDMFp) zy%C1Ejo|**1id9XlNa&fAsE26^l70g9ucJ=DlsB`Pp5nXkAx)sXLh}M)>*z{PQt=# zk2BM}#J9q$;JmEc)Of1h`-wfes`Z>UFsgTg|Maf^KfSl`Z2iJ`90ony>A{%uA#Ug@{H*7kUN(h!<9*Ug&5Ds1S`WLh^g=em#Rq$oBoYIr)~rS%Pw zX^)c*;z^yK>f5~7Qc#{e^XP}soOu%ex_MMTNQcqNXt+x8g(Ky#lb!Zh;oj%CH*j_$ zG0cVP0R5~rnlF|!0S3?iSDVtZNfpR{hjAGGSY~!vEku{AqJuCK|0^3m|5h6q1XpJB zB&FcgG0~jU|7XGkJ5XL7R_r&iGh17#o`GtpDU! z&Z}*ezhuvnRD9C@W1n%->Xv&{6H3gSV}^EC;IWpB7O>YbhL|UG_<$jbfJ%K zpuAek7wRV@`oY*4#E(pz{3qX}W{0J-AJg7OTWWl~yvIPvBqGiRrjJDCx+HM~1q z-EWmd6O7_U7HQngxG&Qt7+WS$x-dLfN00qt$O7}@8^^6l8jBntGdV}P2%|G27vhL% z;Hc(ey%Tcz54Z)aZY#t>UfpZFuF)9PTAIpgrYqDFJgG8) zktE6Xe)QsLA6HCleQE?N zVsSzGq}H8OefvA!#}YK?y=KDkwii-b#n<$Lqg~0ke{Uas=4r%DAjSBvq*fjSy_4O7 z1Q86VqsHPCL-=8}@o7bZd_|BtZLRyG+h#$#3Q6|x=YnXp_bZFjEu2Wi=Cljabp(3e z{?kTbOw9}X<|$b!sm(_ zxOFo+(7Wr9gKoH+q&Aj~5&H>CLN`UL{m?#ZJ#hQwqUK0#Ds|Y3bLhAuSkXa8kx! zPxzNHMNJeC#pre=U-ieae%{0_TlSiRsutC$OU`Z%;v&SlH!t;!45*K}Yhq3$@&tJ% zizN2-^G&FvQb7-_*?bE|9MI2o-_h~NPafkifXC=WE{jz#@ga>%UCJRWvm78@Vwl&D_B6Mk*X_laK53=~XQTG>YLoZ%%k>S$zu2#8Ato$j zooqw_#iV% z{}MRRMQdKDfMH<=iNwBs{QiKY|Hj4dd-%|w_560t%B`E7KGhV9dQk0wHR$aJbMB`R zy=8C|uipc1z5chrHzRPBZwKt`5;60NJ9h?d@#AaDqHaO1X2(Fi4%u54&?@kXhn1f1#yks(Et0UhaPKDH;C;1q;2e0T7 zxf1tGVPi=ielqrv$Qpqv3cx`ry>GHF9#=O&>H&E2h{P{7!UsY4!nbiM4Z$d%(o{Dj zJrq#Xgz}5OzcSmkx^e)q7<}NLCkYgYo07k(4J4^ylO?VZD){U;Ta?R6%xeh>nH z@>H5UKS=isMiRGOfUJ_{pk0mfjk|w|A}u8U60paLFZ1^ci3*nT>|gQN&P>wfl-cne ztQHA4e(}K8ufFHY0CyI7 zaY*Fv${H=S&<@)*)^M&DPHF2PYnTnEz1)PW-NF6KaKdlwRy=%ZwCA&Ck#=Vq_ z199rf+;-;qxr~VGZZ9`gW0E4NcfZmajoF!%>eV}q^!A0`?sDwUm~l(h>dM^yYw$NU zvTIE^i4yIj8d_ow9f)U7T@EU&b0%0?L$@fG^d27b!I8z6;K^!71WP>NuQVNkj|<<< z>_VAUS4~cXcC5*rHJEfs#~}$@H{ic#+m6aka!YY4_N>R=na@2*c6bqmo+{o|ZRm*$qk9ul&J|Mh=Aga>N((&p6GDapRq->%OSh^fi}uu75JIYVHR8Dojt7ZjTe@ zkA_N)r6dB(JF*1Zj=*`Z9E5>tT4+x8<~>yusS;DX1cLCQA4l)uf>N5Fc_XyKf7+*T z)Kq+-s@cW^i22DJN-*b7<1zaK`Xq(v&=>v+BSzzY$k5;w;B9K6ehVnC_t19?t(AkKY>EQuX@&7ZVtR<@vU*ZdB0!g}QhORo*%x?GB^w8GH8#B+)re0cM1PU8(ueKWij{%gu0jt+%+7!ptJ!!!4 zI~GJid>4L=S>yrd-=tTUXB5O`GaD{tII3_Vfa4n0z}A1xtrt_aK;nV48+S!BfE5y$ z%;(bwtT1KRsCx7$0TQDUps&G1<7CdZ5C>2`3Ykjwm88HSj|WB#Z1~W?_O<{5{%)r5 zzp@WO#$joUHq#$pKaYtd=_fw3+>p|A7cHex?adHfYT z$SsQfKN8e_`#{5n`C1g2c*iY{pnMsBsdv|a`_&4`18SEouh~wZ9sOR1ApChQw?xRZ zOJogL)aPDIRFL9)UJF7=@Gly}H(}@qpOvAJz0{-a<7-=`K4JdPNjc?t1r%MMRw0v6 z-ol4uXEfw?<^3)*`a&ZrV&OX{3%c7Ip?FKag7fabXZWaQeBdS3Pf)4N8XEwCU4s~W zUbDdo;1xd}uVtQfC;;4;&OpR9&V#=2FXrK!&IKAp(HEfNEu;0q2=)H|Oj1kK-(LLx z(>>?^3F2hfEHWV)(`Bq0bi0KSroI2_I1<3tBKm+=y#JbSyhd@>F~n1;ywblq1aAS_ z;*P~pnkAq_dh{W&E^_JH-U7J8O;o!OsJhwd9!AFfyabu8v7fy$rq?0Dhu?20P-r0c zLE&LEy9xc!h4%9Yb?L0uc$atXObA-J7^jq3_3gd~R0g>S!;&4zi!C2LF&~P+13$fA zbm%n)Rx%aLWr+BW?^f=ZRXsp2;5`$ne;%x#sxi1Oub_HRpBveSBU3qIB{U#6v$}UH zi0zGlzqqHPIO0R#PC#~ib(1YPU8~luNu3r!u+s~zj2>IcJln7Z{cA1Q`hGS192FQ7 ze{0v)*^UG>mr76~g&KL2Ikfe%wO<40?xZ8&p-%y%V^U-=AVVkG_Af$GSmy6g+|)NR z28SGTg}&0P-cFvIfHqm_KYab-iujx=F*r4!CavIdRxq{|%t7TnZMY>smp!K#56+;_ z4{FCo1ZxL6P{`u%{9a3;=3oa5?`^Hf)_d;I`{RIjb{TX^=>j`nBZD)M{JFem-a4YIOBi0X^)MaGEHWcHue+@YNWm^ccyP=p^5 zF;KA?@+tT1$$K>E00Ly=J;0Dpxr80CU5IOi=8hP%rNBsP8(-Q4)YBiXzE*u>PJuY} ze$k&PigVU;plcc%{*tprcUIZl?sDdeAGGu5WZ%A!wf{?G5CXOi|go4$9T)#pw64eI(E!J zw866e61F|Fy&~Q0(D~nS9qM*0sE0r4X)H?@chm*1>vXbI;J~`FM;i0{r7?*aR2rUv z$Y2)<5Dj?>X-PegQP=V0-qwQy^*IoCsB~{>c(ydEJQ33RUk1(!1cZ~A2H=r{yC%~6 zFr)t^L>?}sv@K`P`a_iq8b$1|U93PWfRtmYk!Og+@qT&u6Jq4`+_5f{LTkyG9EpGk zcMeqovebp>Yf8n&T?>ML%=ksxbevrpdL4+gxWVuv%kPdSD9!Oh$n#Oa_tIVjF?h> zJs1KrD*qi`XycYuZxg?`d603i|76ul=BPo?i~v))@gtX z@jzsT^p}I5w{`&xNget&yu*sY@e&OY`qVKvkf=cc^ThB>qVE8b=a9NrC4!aX9YzJjNr`83Oat%-r(8B2-baAjcm8WA>d5^EQ++pwzdtgJw?^j`wyDIR z9hfw29Vz#^i=4K6jgEg=i*j@nOOA0Z^*^@aaIc=oCkiBLU9e=7;4m7ARXn$K(H_#W zCqn8zI@*%*u@>Z-7f7RLauzWvQBUt>hvT68w7J52QNey8JVKV7+xzfkAd!V@cZVF_iPsh&617)4(NH4Ab1n0X0NNZMu*|@k#F;tx9!j%) z7j!2FuGkx3w`M`oOLvpr!L0;MQQum472G_CHdVK(04$ zcba|fmUsTdl%VE{ge!%JM_GC*Qfc(yoAcqFVAniH=$&4FET<<&d`~FnIlZ1e18AH-Yv^i% z;_(_?vJKZ{(kK}GiE3{Zk9O0UvLsb?)PbkX`(IZs@LY|rHhXf!Z>@9Uc1}h3_-n#3$!_bU?HA^Bbdl z;})sFv$#pIBEFP}P>Otr=RLlCok z?I8cMMR69gCFuS>Gio9h+$zgAYCA)K=bwt!z?A--ZA;yGdB_j?XNns<*(W9!VCkSC$zIvRE!`Axs#ubNo}1m9`4eTx$Fg27x8=Z#I5|<*GD9~M0 z=x`>WxNVA{cTe*lO>@Crz8~S=f-(cU9<(2>e&O3lt#cy@C{uPIoDb>MJ9jOS+Cm{+ z{a#08z$bEc1MdtW6p2&$*!oj^mT7cs$lE;YUhlIFQ2YWBJR+7LT(cn8zEKp;hUF^u z#yVH3OSDh$X=jRvwia|Hc=Di&4fdse(dNLc7|A4tW*oqB6KDnWeg%tUk)G%)w)Lm`dClLFxS{Vx)Tz8SsL&rJJ=ma`GIL_s{WsO2@?LJIU*lA_v&Ym#;;3 zTk1en0?zy9l_R7s^XnDqE;$5+5fJu943fAa#`ly3Hd{K@Rp~H-p+6v(M8}ET;Ct&) zH)tgNDg{CCUD^m5ofV(VA%hf1VCL0meu#iyilOjI;;RkJpB8m%+g1voW_1Iyy#{+h zrQe+XQlyp+$IRe5plo&a0$jXu)WSV+sLX^DW2yS>lO!H8mTC9q6f(fSK7|A%qswVc z3&%ebWVXU#1Cfk2EnLNrz@LvnMoqEUOsu@Sx7+YMu^2MsYW#~E0nI##p*|R>X^>8K zlFbBue_D&G5nYpEI#pABdACaPuyR4J7Scfl7_U z40bnw{JGfId6)}pbQX&3{w9cT5~GPF^JlfnbNud%2#%QTaz`7^EF3uETg8dZWNq%s z5xxCO@t*G=8xH4cnC7-D5#H0?)qjB!iP>nar|^c}Eoiec3vfRP1e<4IqXP2YNJvIo zaBx5K7i^K+M@_bb7~=A?EL)l)Tj!n>ku?K7L~V|s@5_>EA8{a1Rgvng+*i^DoGW!+ zIj*12UEFH*Geih*S&&q4Ppn9G8VpDiTj~@uz>iT{r0ywf0B2M<^V3V{sOv+$iX$bh=%xGBxI-%D6c#)r9$8gT334`LU_Bu~ z@$+zUAt$QokM1`vd2+$M`Rj}@$;bQM+wHcosp|e_`f=P*lDo3S9{^HPruz*jdCj81 z!5dt0?&KblnapgT{x9WUm*(VWyOEX1d}a_VwV_ZkQdAZpZtRAg1gMm1A5*>@YGZhYI! z_WkzuPX^}$S%fY}{%a@Bc$wwQI(zLtzW|(Tbx|w*bDA-O<7E}g=^0?NW}Chdcx#&` zWR<46k4=zhwKr7C_T{1-M^@aCc6K1bhD*+CUNc#{gz6hl7x>qADs?D8SlkV z^Rg+Ul-1kOOtQlG1Loo9Yyem&=Jk&$3nyuJCR$27pq3XKZcbuocp0!SiVawa74Zyt zlE~`JvRyxJDnt26vOl)qr}Oe&DP6xBqOC$0=f+O`S89O^hSogIKReTJ0a2__EoKO& z;D^nuAX;FMs{QP}FCjq#{c)yb)%r1=7@IOvLXdEF9Ed#Rb0~j$zDEn)C<6_ZPUP z;wkVCi2cIy!T3~ijXZ7eF$Okos}ZbfvqpXA^w=DSD?N<{M4eK)q^etzz~u~jV+Y^D z`6&#mKRZ~e&w?&&pHsnCfJmdH7Pvq71ZF26OtHgWlL7p*6|fvbS+hM3k8DfU4eh-% zLfBJuyKCD)QRZy^U)U!2%pI;JZ$A)yx&xzVqgG%%pB@zt*D>ETnX9k1@LRTVdplKy>sWhg}0*xA7JUnGO-dI zt&+GTHLj4y6{bci?~>(uLRVb0`ri16bJ6J`UQ_)coVoIsHcN-&iXy&%koxDp6cY}T zFj3Yny#~F^ByEclUXK}j3)dykDi)p*0WW z(qh?>y(t5}s9H^lc}NQsu9r(*%%ktb^a_S)ZU&yBR{dj4pHAdv3igIs=iPgtnW<@~ z|Al+~`B<|zhOjIi|H?%qxiR9Y5`u|)6SPa2@(PcX*XJ1{3}^F;^?bO5Ps=u$^KQ7G zGb8MUkG)v3q|gSDnuTHv&CmD>yjWT3d=Rs|< z$Abf}ytFh|?b~@}EtdI)1>;}Mh+z9U5Hx@WXM8*DcHs@Wu}}9$2~V(ee9cfx>fJKv zVf!+HyCvwDv_=^EtM2l=O-TTIogEoQWMp7)F!@zE$j4RTe=Io@gZl0V%8(2-)+5;d z`mbJ~md+RFL?ExwlH#3(?_sLLcEkzQqZAy_rtb!5Cc3U~5R#R;Y8&>F{cN#yh9tTM zsP)p45yrAF$I)eo7|PjNjn+>{0IsVgWn=rUAzEzivupbuXwN_dlU@!KBlOQ6f7LaRRv(o$NWdI~HSF^C0e<=1q&AMjym2ACT9(giyn&i6dp1zT>@k zMV)eI3tTRR0wCxrhuEYzDbpqVb;^en!|ZQL=^x0p)dQIP66>woB@@mZSbEA(D2r^4 zAo7>_74_PKZCKsr3@PWMfGDVa0?Qjc9d9M{pq1{K{)fGv-aVT^;0Md56cqC_=>5Y= z5D}TciBZ?7k=u$p(cJPT^M2t7<<<`qR`YQ3&sNi^|EAYJ#R>=-Wk+9$Tb>!+Hjd`~ z1piZRT$4w)(R<^~=HLFXtp9p6yCBJC)nsb%xJr*FUrotR@c!mj8jva>1m&=KAmWa^ zcP?ztsLHFhEwc^zr3SOAyHVau3^oO^e`5aha5?l);CJ_&d}Y+-HN{D;2OBz2c^J#| z5U_6-Y4gew>$M|QZ$Q>>YP@D(cY0HEipcAbWQy;9-F`-l5LX%@|G6^8hyp(1nrx!8 z@m3H^I@1xL(2wL~RsbN%dUEaH1M2*M^5*vji9Ry&fw3RgJSnHCdk|&`>l*F1&eo65 zyeNszkINw|x)XsSXO4L@M`*%S=k114((MT4eD zHi&q9cE3Yu-r(j_iys8)9POb-_83YNPm+t-@@Y^XBZEfK1;f?=fO6pKQ!QAY=v9Hq zK&Bdoie(YhAhLNNJ^3>W2}!g7R$5s@cx6Rzl)0j)H6*(r!%SRUg#<UlE0V!@|j~6C0=kltDT>bN2roK+<`aU6wJ_~KL#Oj zMerAXFIAZo2PIj&pQ?B+B=)k_X=n?>I$s6E>E8?f+hvF`y1#Q;m?(q+TWq?R0Ic(_ zrW(o~)Al;MK$4PG_HkK#UO|KCX5E_nuI(}- zme*|noz0Mk)AxU864JZ=AYujx-9mk1*NeJ{V2geLNnQ|6t@8pUuX=ZD5jnx-MMk|s z#|n8CS|4)qy5E2v-7$%}#_dxi;nXD?!XH*|t6w_0^%K%6OnkxmHA6@9;CVP zlheI-U2EjG6FdM;9I}U(aO+<{eadNoi?Y(FVf>ZrQ%qr?$K;jo?0AFtK>^pZjZLll5!)6FSg5MR*A@SQYv~Hn_3yPKd zhYYZ>bx1-f_G8C&z`d&6xu6RT!7H%@03B`|eyl^|XT6b_l6RgkaeFTlHuN}oTCcY( zwh#vZjb6Qd9U&TC$*RvlDxmB3pE>t{Xp#>XL#?C(`1$WQ?>cc#o`in9L+M-1A@AF0 zV>O2_2?6k2^1aP0Z!8-E=n~Do7M2V<2%bH`(^a`@r?@B?i;^K+ zG2kMD9P-@L$I`|b=UM~V_o2t7Mdc6$ZL`*>EXbf_!oF%%UGV>HUTBP za2^isek8lT)6W1jB(O3YU1G@qR51wzkkf8ReJt7-07Tl66%2D$c-cDQ)oh@RvnARB zqbU6e0D8cH8T9GQ9#rVaYm>_U`}aP)LK7{xW!Vt~VVV4$KS&uTZ$eE}lOaD)L5F8^ zedigh$PllhgGL9oGk5_1N=T~9#Sf{L?W;s~ebJ`m>3^?+dE#%o3W!O+`DePr={Zh$ zp4#bI5*irIQ?|Glc1t+@2;k95_pmk~V7?UR1P9SlrJ42N1tXwJ06rgVkVYqgb{(Z# zt48TdF?~aWlr-ai#`1App@RTm1{SWi3cv~zRU%I-4xH7`ir{nX<)B-F!X=mmeW9qO zCb2gRJAWwZ_T=~`@fsaY_=M5f`3E|Va+wXdBC|%60hNC9dGq@M4?FNZeg`gs35B@J zgCAjOkzS`Q+oP!SOkX_0nW>{*v=;Ah-`e3-_B<%XZY`!n6NJLVAA6~}-=W`DS-dX! zrNkx^CpHq?*`v451wrs#DT^py#)I2aIJjP^zG^70neL^Shs{nLflzU#sGN3;nllKJ zr*xrTsyM1UWt1GyFMN!qUic9Zl4hrF4p7qayxs2G{|Ip0Y-A@w(jN06_!n6kAo>Ga z{6Exn@Lu_|i+u5V`w6|ghi*Jh^n??^y}J&)#DbU8s(*HH0+5$Izr#WJ59EmbBm+p9 z03#_8<|pEO5`c6AyJH}I)}Xj45PiZM2zz2{57dvlNUge&vw*p0=MYF)j=2sb+))t9 z8cMniCXj3lw^BVA_ky4CVN)>@o^W$ybrp?H)WttP{rrbuY(Rq%t%X-BHUIk=K}?^A zY!ooBWm>#s#c})dyjpCa7f$t{X^1$ zd3XT6u0VITohc8ClR#$B(NAOFff3fdxW);jK$prdfJL;q2I%i^Uv4P#7DKM4nc-eE z2>`{K@8pNh0q*F?Y$)QMKmB-ERYKZtrLXdy(wlBEVsF0te+1NU$^0Chy#&Js7}h&&&c*?#l8EA^hjG47x6}jJh+U4n%jPo$&SuRPsu^ck^5gyhhGtLHJ;1b0#AP?%G>J_&H_g4*ZM$O_sC9te>hZ;i2p82}M&f_c!DmV)*^0l?Om&woZh?0=S|chw{^E0gTi2S z?_GbycS)E%m$aCTZBin|0w4iE0mK&7U-kS5&=3WXpod^KlXid|_*4PnOx<5Fr2%T@ zI=I~EER=u~0#aOBcX(s*bUz?1=Ty(}IouVAiNNR&Rwm2L zS+*CIiTeWdj_x-GpttZtuT%L|mIs1=eH$eN0Bgq01h`Nx2{WSZmE-#-@mw70y#%M! zuI(I=A>?AE&rla}5leAm=6^9J@X^2aa*!J0kO9aY;nbG;)=yO7g^k~kVS3PiLdFKG z7o1vRz*TEnzl?Mfy7CXJ;KcROz{qRG-no9Mh9W-6=;sofhJpi-@p9#uY+Tp)Qgy5dhGiBE<3``c0Wm%XZ4=Mz5puwJRD! zU)oN18hpnC(oAZX%q+6Jm>d@g{k$U$;M7G(1Y*|Yi|n{?)T46}*Fz9+G2@E~;5d&i zqIcS@Mjw~}LA-3hGZmPSAqVs#-91+A1b<8)l2%IWyFoO7Uh=;T!22ZTdLyA9>An{# zSwO{y3UcazyV7RKb&zX`r@(Zlx65cJGrbgZ#&z<~ywTerE>;-N-uNRH00b@N%o3s>y1sZT|xb2~B@ z`diRz#pMar>oiKxLETCvLm7$Bt!OU#sqk|NUm?ajj{Ot(?y3bZ1AbxbTn`Ph%|b>c zxy?%8BcT89qycXomPHD3SGTj=WWE@&bsE_kR zCswNm^*J@cGo*@ZVgSRq4dAE|m`cs!@ zC6|GZnm>i_f_lkuxkemAywjttNRiJoMsV>FhT}wlCjwJ<5-(hIW0TtqX85_ZM+XuZ z&`PPlTA*RWXO)M$*W|W`QODqY>#9{Cd4cY zTvS0|`jFK-@QFq_{hx<#kJyi}Yt}&kN;_2BLu+XNny9`W0X`TU$(*B9LcL(|r-lbD zJhr&0#!LOqJ)ma*|KI0-{`_uxw}Ktyd-h0{_n*e^zpt$xvEY73C6k^;?BF+b%QKy6 zO2_<=A+uhs$XqUv@e~^TK55JbUYA`A@r*vSoFQtDSd(N;{ zZXa%y@tk|k_z=&Bjsy_$_R)*yzPLlrPFlJGaP4A&#RR{jfh<~Y472BDXjUH*@bEV? z`T;Y{w>hY%uZQDL*@iJJ;UA@YI)DB_5zT$?oAzRA!uZIiZKBlY>Me~^6Y^Y4T|TKQdP_W_GSS;0Y`1l4TiF{cr zH)2&Ln5S(kpBw%D_u9g`kmAy3P)U0g0K$5lWBS7Io}Ub!|D=jF{Bj6ZYZN9l~v*Mc3!4f-s3sLUQ%~O zMG?yxsf8UL6b>7f9Qke8R;Il>1SiOcdQO&+#42HMq>t$O@VaL4Pz(SL$2{xzCB!-B z%;{BXmHW03aZG|-M_hjR!Q+-_Q> zGlmQ4`=x>NOuQv)UG(`}es5KKW#cdUU>hyR);fq-C(49OI)8x=VpR=%%y}G3n-;QD zh^Vv)kS}_aP97fESRd&1G^RG=8?+Y-f6fe;FrnpBi^>5kSDsBh)6KtZ-+S?7a(ZRyD&fm)8CLOJmrrI?r~;Hn*5TLEDUelixNkX z<|*scqv`iO?ovveHc~GRp}wyOGRA^l*VJx8g~eOkeh{2X=vvtx>rd&3H*HNfi54&tQyCVZizIU)3t?3EPe}U&< zL!|Ud-JvZ`=lEl_n}UeUHs3#}WC2=mQAhL&zItD0IaB{p zQ+~DI1!$P{pO9twr${P={40i9oqy^%7nEI zx%w#XyjObUQzp9~fx3x-l59MvS(lUAK>%by(>GYsNk&Z|EkjHAlUQK9WZMLQ_$&Kc z0R&+`K*_8fWdwGPaexv9m?rR)`QK~}$8eePl&A4V?*o)aplZ&6AQ{yt5wLED)>iwN z-TtMb`vwOR;C@7wJOK{`{JLT@L;ugrUgH;x(Zm#t?pfnosW*5Yr-)pjS}dQlGLt) z1;1^;an0%#;J7ZA8gyv&SJ<-bk{@CE zjKCa`j0PKXaKhw8C(r=Su;O7{H4xX-Q8c9ka(Kz{#4%w>aeZPMB(QT7MJ<05od_al ztO4C8!rB?bCDwP?JciYU5=IZ#VF@?Dgoh4s0k6O(W2~z!Z{5iZa58s~T^Zd0tMw#` zfd8x4|HIi^M@1EN|HJprFhh5zlt@a4w9<`qGt$i{Ej3685{gJD4GJhNNXH-oA`Q|t zh)N10jnq5(Jm2s8{_(E$TkE$LYjN+~d(S>QPV95e{%jFPH*yh%*86Z4u;wFA(&HLc z)Z!pS*&#Ip*oD-v4c57aNK^*993NYd>}vsugD?ZIC0Qj2AgVdN`&WhCl!#m1fuXRO zVJATJ=qmwoi==6R1ZjeIa*N5OVMZ*5!J3S#%K@VXI6K1I48##)H2)-e&*D*ohNb+Y z62@L%0+Eb!;K}`Z7{eJ8YSB`l4aP1X$%yFdAi=!6cIOKe-Qyr*1F7k;nK{z@md}`= z*Z4o0Chb6>i+1{qC;gR{fRD^C z)igp&QtQ!UXD%}IO#JGq#aOoB6PDj8Q&N`yRF}3w^}PjA+{qH;RQZka`Ym%6A2h4c zErX);H0l0zu_0VWAHPC?{l&f-7gbfV5vs@Rh4-@ew+RcE?3I@nLP<3Lgx`<+eZMig zyr}b0OT6670=k&;f^@~GtQb92VQ9#*{%z)cq4n$MlR^-Iu%SJ9>Q5i;5+RT8k>o#F z9%y@f?|%z%$D6qUStz)y25w*xPQ!~7O=i#q>A}D^?am9@ce2lqe)K6)?n%D+)yGAH z8D1q&;t)_L{bxT;P29~lLvS!C9ae8t{Im<40qs{tTCq_HcdTA!clq6X?`t(Qb?c-ucThZqi@K6w8Us*As8jOt^AWs$smy#RnISfK+nl3xmox$)Kr9P}7-FpD=}7pnnGMeJlIqD5Qt}(l3&78h{CDJIrAGXk zz8mN$KO`q`y)y(PUU|gmh&XL>G^4rP;+?118CK=&VmGp|P7VKjch%1l9xaEoZ`D-X#+izMJ0FvACw z*}#MKKh<1E8_jYQ?L_Y+FRI?!R8UJZO-6fHzA1~(#aN0hy>g>+(%bgzsnf4nUXJj!8jwnC5Ku6~w z+5Wm@;M&hIEDmI|{W{u;DjNT!UxF!r#&GC6wVPNkpYsDbkN^I>v7 z=JJ>#FhFVW=k;AZ@_XrGDz$k z|I}4l6ZJGg=ECK{UiQSblt1vMV@?SI#sf+2)jvl-YtRd~@1}n!jPaS1r|;c3dcnW# zdiZcG3ZD$iZ=QU)big$JhYe1E+};$v{`~H;KJDi{9%lbunY+3BZ#_A`WWOrvS!crr z7XjJ!SHP9OthL&Fqr zg@j$MQX&slPk(>^e(T}MX+X7_8<7a3zrdH|22W!*AGPLp_p2(ItnV(R2k6|n_BVqE z8)G=+{G0#Y$q?~st8`ylsqjNQ3t{Zp^flQMw0aaD+6j%z&^rBdG@PM((UNujF$8C~ zT*U^c!%Mcpo>V)G9e9b|RocCLxO^8gf=49MJa9jza++uC0ZXAJ-7p{8MIEP+B~US6 zJ|ap=IOWDjDBj6(BfW2D=LvGa8?jLE(MTlt5i7mz$67+c_k0H&XBpW0Hi_#sV&p6R z@|gwMS;yc#;j}_)*HE|5HS8kU9}B(>tZy{j{wa~vQt%FLU8Of+FN;eHq6YHdY^-$P z)VGi2WPJ*_`hB7FFfy_-9$>zp^&zc^?m6D2!tnk4X!7-mBF!WY`->iDnDI4;;^w-W z1)sjn4*{XwqqDQD(44ffG=}e4@R`ByFPiXk#Iz##&_DmOkq0W~hDG1>^|6nMI6nH- z)6;WI-+6JlvV6Q78F{?3XdiiXx|ZK5@u!@gVR6bO+N;DB^`;6SNANwh)|$q#r~pa& z@`yB8wiU+y>{eE$Dk{IHZnRQph>Qv&vZGxDq)E{r_O68P#dAXmWh` zNu*RIVX47EP=O>Mn0*jQDejF*>y zjYgHCtz4!~i^sdtJGLx2_vxRYSHqWSLq7(Fd0NHLSIn8P6Q5cjd`=-UoFEK|-5cn; zabu(%`?1|u0gJZYz7k&Oxje;QKmK`nT+wwR-tFnZCc>&vQtp$_aNx(h$mx?OId8}Q zBlq@W3ZtOkla}T;y-la=?w9iGBOT}@?m%h;=_P_}yChbOA(DdiN6{Nt`8cQ`v*;^~ z_dGf5jx5KgINh79SYA}~uRvd6GKf6&0=$in89_W{LiGb2zFFV3KC};}(4d=+3xgXR zvgMQ$Tn-ePK5m$NB7D7%_L5oom=GwSb;z=&X=E=2hY&*2_ zHZZs0JKVUg1wWxn1=%8T9H;M>hAOqJ>TP|(3N+1(^+Sc*uv1Xs_M^G6u@Q~x_JgVR zYaQ4r>yh?A|Gkg4$Cn2)#q^cDz6GDH-%|PBq9p$Fso-kM#IZ>23qTt4MMtz%OwS~( z(cLc5ByEmp5Ow#+7p5!XK(}qphTo)%tej&{HU_649FbBAw^&|i3Cs~pMQKOHZKvUK z<#?MWRQ1iFUA)@c7#c*QoOc{Keh@)YlJzBk|S9SjkKitV4sWwI`F(dxZ@%)4Y*R@gT@zjiIxt8Ep!r5 zRvRX$Q<}$9EM)K16bka{rj8gJh_n557362;pcl@UB9~w=<#G) z;aOI!qjVwl@zqKc;0_=nFX)dr%1}i$z5-~N+bHo>j?oF0xZtmE$*<6F0b>!hYKAN) zC@QV2Y<(TyqP(_qU!O|*b=Oy8hWO_N#3%&@h>6jMyjmkrN`VvoNSXxix#nw@!6Q0t zZZa7M2`BstfW86r)Xux=vjJ;* zPsqba0g`1P`l)m%bF!{Ol1Ov$y6Z|IIncU0J%~76z)+JQT~i4iI9_K_ikLE{D5D?b ztTm|sg!{gwU>5SBEJUyToZ$1Ho~!f0U53k3Kfb3$1W^x;v+XfG1RH!yH4ER|G>_+DI<7%R&o2`JohwR4%g!NN#8@g$G#L8kf@>zSiwerN`&<83-3D{J1P`)s;FC!m9}>9WfWu} zK5L&4NW29`xCLRxy|-_=xQ!`DJX5L+M7)KD^HVEtuR%}zP~Ke+#(`Is2QS8JKFO_M z2C)Re0tsOi*AOl~vEPNsYNQyuKcq*SR@aDicdoP`|NR_hG6G%$3D&e8h}5C(DlBS4F{BdCv?pMzRxV#ckC#^6s&uK#HRIq zv{q)4zEW)_Xz7_JR?JCm%^xBZDtbEBNHs zr_j-5t!5%299}2Szv`3U`wdw>&TiuFbH4VG>QrGRPfk%@26Gj0tBDjkjuEUx`xTg~$=LCwn})Ap!+P@h7M;ks=-#3luXi{JAx zza=LaBJ^3KMXuB4t5`cQg5N%tjP!Va%(uSa^VwS&kHLC2d0p{klMK4SB(S@amiNgo z_-@pUmezByL(K`*w>)XD@}5ZWPw2+xnpk7mdr6!G$G_dO{px*n1(vX~5eP9(Cc_h!zxCLX5`O)vMI3}~54v{SXU zqu##r#0nz`J}+~v7bF@ekIG8!j6=U8%&J7S(kfiT+@a5q9QqEXc={Ybbp=^1Sh_?Q z{NyOM-bG(uw^h*zv32dl7lg=f>GdUvU9up4D_{J6pE#tC;Ygjz7btE;kc}JO2DRkmUPqZ^YAOp|?fOy^)cIo2}s#==(ae==+b0 zZ>z!;2UuOX=X10wV$^l1uw%xZ#Scow1u?ETk<`B6%8xO?L<4VCQ zm%EBr3s=9Ul`j7rkv|@+9?2IL;db{2m+p3*2t4F|jn)X&<>sY_ov*~DDWaRt=;x`02@p+SGC=HghRFH}rV1vGWfuZA)gO z8mbb4%Ob@^ihZ#H8Ww#>=y^n5=jj@%Iee3kh5R6qnuH1#_%oN zjmZnv<^3g9a0mBnm0#l}Mi1X(z_8?-zg0m@sB6FRhu?`aqAiuMqNpOMDZ+?}p>evp z>P-iGvyaJdEJR9I5!IMt>@6ZgP$M)JaEq3PL83PTFNrt5CklEm6S}mI9|8KZ-aR9P zRZ9RuwX2!;jn>iDpXZsS4Fgxf>m2BxvxC?5M7^CpekD)&gFbaB&Kgop$yeN`8%*j+?p40%Q2z~oXTgq0T8|N9Z2%8Gx1~a??3nMk zW_}Akx-{SE{b6^F=H!?CQuzD>7fLH!&3LYTc!9JtUXHKY2xKod5DEr*-dbp&?~6>d zkRlBYEbOzR#SBa*v|33&sCz1Nt-VhtHswuq=)2~V=w4hz_DCl@n!TK1&!;ijA%p_s z<9uUN2*Ns-^O@eG6l!C+@kyor^}}@*!NWJBs*lv80&9(Tm?CD96#{NeXMi1te_N*{ zBrLrB@;zi9p09|PfwR99k~a~hX{IvKbtP{2NSbqzZe|SFplaFO6dM5e)wj>j7FS(T z9lV=#rPhu$ngcS31MLPvM7>p?e~pwvN4)xESh!`LErFNVhXhQCR5yV;z2Dyg^pz76 z%JQjEZ-(nwEgxIe>^q!|eda?8nmVI=<#6MR^d681NyH;3Cedn1Nw*sc^M|?qqN4#^ zSjy)a@Pfxx(ulHH&BV}4qF~RNp%R)O6(Z&F^POKvd(uxf24l(z_1BuN!|>oZIu2ge z8&B)W5?x7A+O%nbz|6+MTc8?hA;@h*gy-kdY^YKRVb{NKlSapc@4Pu(cGzvKj9DWK)k>&`<5v{P3jVGQ9Y#))G>e@dE7l^;hJx zfX=ucJEUT@;s+$_p0Ln(cDbXu&ys#+5h1kt*v=ox>b& zW8!yr9Nup2pAB^s#y0dfmm2<0k=)x|9?^?NG4x&_Nh zT|-^R>F@?ra8aI7TSwnDVVq>x@>fQwxxZW!jC^f1`gJ9U1CIZdS))7OgBO&ApmZRfiBw1QkeaA&kvf2j;il-PYo3kUT# zFE`rkAg;m{!*6L^^m{SgwP9lqyKrARPPFsf zD$qh`v3+QBT*!9-ZL2HQ2>$vl(XQAQjw$mER3H=eer>PvB|b0zipfZxa%?&fc@u4j z>o>{K2ZCcm=j><~ao6De^$pdeFQ0avlc%J=iDfJ%8XVXK{}Lp}5!CzINzunZXsm>H zpCe_fj<4yfiRJAp73an^Z3}THy2$?9JjmEr%;7F{)8CI)s>gVI$o?xW-PJ(p*IjRT zdkpy1J>Frm>#J!vpy$#M8}Gtun@ljnhm8@j;lk7i*dxW`#-99iyXQ;PD2o1a2=)5r zKr9z2{P(hg_k`IArvSu8FLNu9-^se-mSDPhg>&QyYE+I;{P*uk<&f2T0U5~_yF=y9 z6H8<-+tXB`xUg9&v3f58)c9aYcU?Qsh{NlWx2_#xEl?Hz!zNf|BRdb!Ew0~fK!=Qb zmDScJ3w~^%*9>t*t@s5UWL3Qfg#Y9Dq5ipgfK*bJ-41MqzJkm?G1O5~A+}QmZt)z) zLd$RBnl_HBdCH7c8Y6s75kQuc!zd-fA<~U{ zU^vRlud3W!QyUciR8eKQhBx3U*s*?wGMc{GW1BVpHis4Ybi&WNy_wAFsY`-b-mcwOgckN%N>NuhF5fC1%C zasRToH?w?zPy-p(>rgl3QL)Vy#Fdx?LXcSJ=9_f`a1cZD#}vyCI{r=%Dtqx-2K5U1 z!Fg_8*fV#-BC%VE&>%5JBu}puS#>|8`dsGuzal=tE-yQh_<^ZLo_L^ts(+NL}y$ zK!-8LMD~#9FR`lMM7UFrIE49d7^ot;7#g$<+} z?bU{a)RDxcV1}$B#z~A3)@!IPSET?CmgqHl<)b*3s6`48UIcbL(6;!N|l^j({S0>LQNdKp1ZH{6kHNo z9h0*HT)zSmld|i}t^J2fvZjBg^XMap{vay;5WTA}V+*A%aFae@S&Ri!jMsi!{RJx+ zWSIX12)kYT{OUvL@wY%?A8hb7WQYd*M1FT9<7t`8C|Ho}vQwWRf|e|Yx%xC8%N7B| zZ$qa&+@6ALf!H!tZ}uDZ2{V)XXQ*<^#)A9=U@g&Me{he|^E=>HUh)tng3b!A{qX_Y zSnyZE4XI#60;|V2B_2qU9vWNhV?m}dl~EN)^`9DLh5`Z{vq?g;!OXk1Tz;y1f@ z$U8X4PiL@?oAo1#hk(_HvW7XBuQA!+x$kqFydAd_VKQ1f+mhf?p+q1*;d%6(Tgj1Y zwm-N)^@JxB@IWSpw9safnhoWd5_5P{>1x{d?C-c{$8hEVDmEn6ANK>EyRZ}3BMwDv zYx3Ruij)Z5aM()ce1Iy&o^$d=={c)0rljaHYFxNu)(g27EQ)y9E!b@4~^ugv3G zHl!VLQWmwO($DXlz#Hc>(D;A}Gf3(f@$DX;<49B+J=Ec-R^OBngIUD8b94}b5_n9J zgzwh;Qm!2)>mlB%+_D{-&W&lDj*M+$eG&F58FapvHESL7DVt_G_+Iv`1Wx_EGizj6 zvgG?t;3(g6Wow`)lbJzi_sR7DaFRb@WFaPlb1~I>PFmn1E(Gl3_a}GBfO1&HeiAHI z_Lwuj;2_P%o2l2vkLvuu*5Yr;ItMKXD$Ag<*7y+Ml{E#evWuW37ZGwu z)_8=y-U_`?-49GJ_!Y=>?*n~sRi6Tmk|Ig$bUs_KbP$~lOzq^LXkF=QXV2@+wqX;5@39YqA2 z5Tkm2+>;;WWLWOMeSesQj0F4{H*33~87@UZ&-6l}(c)tfEVfKLkV*ODO;Gl*n>ADc z@hTC*(w_;IN41m^>@&)mKxxc#-baa`AN#S}jAx9<_(xZmk0{4Oa!8LW{!^PJpp?&v zUEP+z2d7rh=O%O^`;ME%UDPkKJ78=IyIOe>;Fxp0wGDUPUx_ zH#UeFa@d5%mxU1ApxKNC6@xsVv>!*HbQj7q8x#8OZhzW`obj#3CD%=Rb*| z6Ph)quv)0UxJwL<_MGTj#!vfJRa$J>!X)|CyJgW^)L3UJq8bi4+CN=jFism(M;$3_hmmp>sMgncr zr%@JY+#rrCup+9Vm8hmB=(hJ?kfmB-7KA6HOZ1wE5Fk_V%_Eo%Bl-&>xyng|RJ&Pz z#xUriY^3m*rt%3y{&|;R>cnfAQEo~^v(vy(<>OgOl&4%RnFv`mumJ0qF$INiU;p|s zxo9Y@d->X&Eu0abg$VN)he#h(ZLT5b9Y0tbYJi@wgZky{X( z^|JB^x5`lxAYvBotdO*^QsP5aLxkmY^DwnCdD>1Sa+rA0b|{Yy&{iHjFBU=DPU}}f zvcFu%ro83ovrf%Tze&o(yx zDd-w0)}ZrZZ$D`H;(WkYX=N2&QupO`ipP}Dx~p16oGYll?Gf@=_@RqR1L42X2OY7r z&olq5$aD)RRuoUxfvw|93GJw%_IuF6t~G3pMq0D(md5&Ot(;e?u?m}YoKDA z#`+h3CzNMNlqrhOKl+(NCWnmQK>KtpiO3F7Nv45PEBT2ix;123$p3c~5NZtg8KGnX za08`iuObzuGvf5--az#UzneA1$CAppAsmuWQf=dAH+ZSyfBaNQEjaQ*oaOf+2G?EB zEN?FkBy@|=sIO!v<3pmN^8Jhcm_)Z2QZ5lM7$6$N17rGl?B)vkPU%9LfNTD#&h;2x zw4!!@_0@Bl_Vh;p6tF_lV0e=oM777X?_d47x~l{s0or8=u-qZ@zn%38neU*o(Zr`w zmo|HMF7pE}TCJh<@2Sg0@tVM(%px)9Xu|x&q5(P5p9(<3Tbk3L zEQjx3k`qOo*32d{9x#KwOY9I5e-D{k=-b7WFuOC);zujwARL4vwNTgVKA`;~#dm~= zAtVqI6fpht?;mv00nb((VuRzv-xEP?)(Gf z6gRZZ9p_rPJD###2FCo7u-0tk=m&i1a8AUWMF)N-N95yLe_PcI$=_PWI9haXROx9U6T8;=?v$L487eYn{c^B^Ml$)~zuOfk-L z{_B{`Sp=~mQkF3X^T)#I%-uSbg^D2y8kRZ|_AeI9H&?#KEY6M1e7GTzVN3D_(1GCQ zkFS#t?IB6mGDlc4?U9KRTleBbUAznX#*zJvR`*MbXN^NUaT_3kUu-eAh&j$0>X^;* zyM+qfXMc2|H}q{-!7`KM3BslAj)u~XI9zpma22Vnq*9&Wos9Rm4tvzJ56HRZ37^`H zX4(rQnY#&ZX1@=9HsAE^Vi(w*3bQq13UwnjGy5xyQ9oqU$Ui%L*i1RE%vr;Ei%Tw-35D|0~qw`_hjPN%)g2QDxHw?-`TiK;A}|5M0xHkN7!55re> z{a@LPekm>|tG_@+KbTB24JKlCmlknVGdQk+t!tL%qU%~^|EE~@_CZL+9x#%1MT3Ft zB;TRIL3xN$a2R2}?dBW#eIR~_|H6Vq@e*JTqQt03O(RK%)#SF>8_t--Iiw&IVMPC1 zC$(4nm$I;-tA%$D&2)~SYeM4W1@;sA+Kh;;rgzT8!7B2hQ9J$IEBGxvwYPfPMYZ}! zC?~~6`(p+^H%OKiC#)KIJ}}`myP=1H#+Dk;2n}5VjdtPBnq=22sAnR|%|hE|cQ-w3 zDW%Y#igqrkijpoB(ZVm@W}03{I*Xj!fzR~O@4+PdIL99h$bYm`MEi& z^6P}(yUpU3Uasi_#yQc^w@1s)*0D*2a0gi3<;{Ev;&n2QRbWR4XGVIH!Ot>3W}UMl zwra*-rxj~I${U6*FeUZ6klmz}%+j-A^`A=c7FZGgdQ+q%?>W2LS75$k?O?i@!1D+2 zbdy#vIQLP+)%$!UN5${6?j4rH;M>LL&k>FUI2#MYEy=XpFS6bvK++TJDW9#w>~PQl zRZtHi0@@3=MpU#GoWMHV{{ygNkl;T^IgQeP!wj`a1}DL1wYd4|skJ08T%&h;)e4mx zK(@ShWJvIn5;a#?21;4XP1-+*h^x0k1xz&wq38QA6n;rYR<>mBxBx7MIsWngL!Dz! z@#i}@MX`J}79XfBcwPZL`p$l`C5O4^>iI4($%pm0Or0_a#XZiqrI&gT8 zp#{3Y`t2c(u1Bwb!ab(5w~&Hol#=NEWSRJ(XLXc)?~J&-xET?@`vIM;pCh0dZfPUm zTBy|yAEH71j%^T{Q~Xi|x8$awIy^=a*(Qo!1Gb9<&}%y2umNNmx?QnPIJ9w>h$x(L z%0WOont{tz;7fX}pXk3b7u``x;eXCg_xtj<7j@hOOj-JV+e_&gXp-}lG~_ys%ikD^ z9&bzIanH_B9FLK3Cx$;^ufn6fO9Q)o|3`08Vk>`Hwg9Ka0)Z`onraw|-0-d;g$-{! zJHaDn`aE$heYO(!^53aPVUt_#a?LJ~z2l7Ugh0Rh>Q{mir$^edJWnW!M~xM#wObx`5{FR9q!YMJQQ?U z801D5FJr+S;Tk*(DK8Xl3y2WMFBT_buPKJMZJPj&y+^wcLG{s)IkwwZ0jQz03e3^> z;AvcG8EYp;w~LL|lv<9L#$ZjyfiYr)*kq3;K$<)%6c$my@wY_WI_Thb&zemuolJCL zEhO1dNul^9OV5{xTLl*bfJT|diGX5EfHTUqp=7LLgurThjV*cmbgNvM?^m8pp(7Uw zZV{{#?}TTX98+#@X$!~)6Og{#eqYLwaCizB(AwUQAq6qQWpQ0jTP*An&%l!2%9k$YS8E z&fTh@N{yo4H@y3}1D$p@Pxjt1O4Hgr`x}hVA!Q3-jkmFxdU-v9uUPSvBmo2uwshot z$&Ww~F9R63Nr)`)RA4%6X6#NEw?f{!TsVAMHno<-Gy2UBDrOYa<4Q<)t$;4*_&1OD@Zz?CC{LW7Jrw zEmhR#9UtL8rLiROX@oYr&!ZYGZYN!d+2nYF8%!~(VJ!>=5=DoXKu7~WfXA5lM*@Ke!XKF9~0zzF?g=9 z_yfR2VXQ&CI94`Ifjo9IUA*Kbc60QT&Z#gg3u@(t&!SB}EpI9|5Q;E`4(L`9Acy0k ze&@E~j?g`5Ai%+qi*cS`3IiFX99k$}Y3Z zSPuF1VY=gVWvjX~!uI(1vI7u4TX1q=M}Nr&I#d%N!+IMQxV-ZKL#rsY$ksd_Mt8c1 z2!Dooc(XMXYYRt^n(L(k11&8sxW!=(GHbTBw}|?d@k_4vx{xqECOoY15O`27EdM6* z^kezA)(bh=mVm8;?d=WM{PwM*#h_)EtB520qiOt+`5^L6SNQ5kbIvPSe6t?Pz?p5I zTDJ$x@2KQlhme?L*-}G}mS9rY%WaXi({#-er$rpfKod^CK#l+&-GqCdTmDlOokgQC*E*TpVObhYpeq z$4Yt(f=Td<<3+Paa1gmg(fvNKBFaL-4Rqi`$WrY4Fr!R9UgMgiLde#Xrzl{Vjzedc z4&IUpFzLxSCZs=5m)CEDC*$Nl-JPB+fu^^8GX4QJ<@NPtE*BeN4cG358@d{8)c``5fdXYhlg?cAV?1N6lO z&zI{?P3cnK25-iN<3w^PW5qDfV~KirF?(2Z_a(Pf^1MVje4jFa`qgy$p-DTFg@XV? zxgQVqTZco3G7&3KZr6E(lG#`Iy_1{?wi41Tamd^!4swN>+^na*32j};-S&}r;zH^0 zfl>)YQ_DM6M257p1(H6^5!XDnKxv63==$^Rnz+_D8Ejk77p06pS9lBcG7GBXYbDl< z{dH-$=&Cx}Ve;Tpy%bv1{PV7!vakFrY-!s{Qn1aIB<^@nS~3Ir&k%!ZLteJ1#X>+4 z)TWroFvtdu_yNDTZ32=1LkeVdoe2Q?!qgU5ur~XV+}q0?;m6@OD)Tzmjuc88?c^2y zoPOU)YxOCOZ0RIN$JWGA850H21Jd^s)u=J1$_eT-Qf3H_mMdO3E_3tK*`;oiKM)dx3>PJzqRv@^mRe!omn>rb9zeVd7ttB?X-?#ZRL+8_xaqqTd*>UdO`R~-_j{_t6(VkiA_bUuoFRoi zXB47_wMkyaraOIFwW`J)J9z2!2{@8^8rjce(cZ{KQdwQjg1Fv5fOhi+ZM3)iI7C~G z6acauRC_(Gc+haF2xWcwh9I!zQ_-PO;Sk}^`W$!~5e-DFq%^YQ(OrJ4l(SR5(mx4B zdl3w^tZi?f(&sC-9)6?D*2!Ozm6cWa^OhW)z*+FN9M$r1jC1Gb9l!>}ymB0k3aGgW zR8@h7BuKcP;6os9MjNo<7=8x#2Xwo>$n@Odx(?9w+7CzZpf|L4P2&QZzV53d|<;%^TVqSS@~Ofo{$!(s9r2?mCyDT&}JfaX+ze|Y#Vsgq4G@i+CO zt^l3ZE}!fkKV?16%UcRRUUV&OOPeUociAQE9Fo0U zUq6{w)IggRxw?LH=^|?FDI!F+fk+?vigF};y%jGkvIrunD)jj2 zjGdCi)z3e}vH@nT;&fA@DSaBwO+3%o^&kEy>5s%b%Y*sg(OEsCSS-_6;ypf+sU+j; z8>Fm=GbW2Ie9gCRfLDcDLgOe{QwPNya9DKdp55G( zC`w&NbX~{<(((3)5-It}qzM-+@-Xf7ALus8=8nrh<;~%gR}Yjpl`vx%pYK4C@iPK* zS&M{rjyGT2c=A_!^7s;Knw%5g>7X);C*c*pPRArQ|2F3!yzmF*laz_K&yRj@5Uw82 zPamd5jb%5IWR$QuOvBJB3l3wX$OPT}ka1jq`e$kDq4gbKQtvjV$-tsl4GZ1|)YAx8@VyZ-;n*`bQXqh;}>iPAm|jq_b$Yx?iX z25CtmdE)P8G(|e8lUq3GYyp9*{%)G`WDhjrVHQFiQr6$n{1_qegS(y_tvLwJ5ET<+ zj<&UJq4jRmn5tVwpUBW(07Xq;hI?x2eBH{%Uk7Kjwi|a?gl&R3Qi>ZbuhlNOY*lxh zd@HY(tJX@m5_4uz?ymoNho^Pr;+kTNTK_AM;ebQ%MOdogr^X3rO_uGg?aNxg9kL*) zvG?plzsY1{1H#NN{Z6_C^FG%ppWE!!>q5IH&j-$WH0(u!UbcH3ex6 zJrs`Q?J2wNt8rp3tj5zU*BtJ$g^R_pCdjQ zNC_3fSe}y#4BT|p1_h60ldisyp7u;gR!`-!NxVAK;k4mG;V&fJ`#khkRiVknbyEwa z(Mb$MJRv+^GX7S6oYiTtval4KaNNsW9d2o8{VbkcB*6|iiOI)diYJx$=n^I2e6KP{e8kC~5P6;%1MzmeTez*a78^12blk77+Ij z3*nBLh0%GR+;1-J!DR ziN`yMJHihQns_Bc6L;@qqgUJAp3}m`gPn(NoDp`HK&qr+>WNuSfkdF_*6i_>uLgC3 zV=77Pi=V-Ho&kfL#M07Q!}!pOjthXA_BIoO_)PY>$V5@>b7a)}e47*%xw2jO;o$yGm+V_CaR75s&xR*D;ru)HMoDD9Ik6 z{3%%S?WOiAR$zVqi9G(BfX*;kZYXYz+k3UmVPHk^11kJnn-9d%CuDEoYz zV}G03xOOM?kcerB1JxYc4s@qm z%R1B{VZ-i8MMrlj!t`f)7t;3ZuK$)ipp+r7tJVO=={_V&OM+UHLp%TC; zI;gH%{bIZd$8U9(xBgryPX)NLT_H_D9vbhd=|s^?I9{_%4z7sv!A=q4|H})IIDJn%7G3n|5f@_J-y6iI#)3Zu5N-!AuVWApMRaJMHG0&= zcApL@241^2Ld+{3Dg@#ZxG4*OS1M?L-~cRO_4-FcV>?-oh1&p`#{4r#JCjqlkR zy2X3)@qgYD>$(khWO4iX^4e6j^FTS1y@Y~;uk1bTksFU*1i>KX(W z&CgrGfKlqgh51uL&nZN3SOWJBN1!<`Xd<*zc_WI;9gDZWDL(|2O3Ciy1de+eunS#a zbSz$U{R?7Icw!Guk&z=Am5#iAyZ*hbDOo|_fDtHJ70@sFYo1*nO~o@B$sL!0V8ndi z3S%}}^mnX`3|^a21${8;XZC@ir2KQ&-Ugsb|1j2XFT4^$Wz2mRtbOh#y92CmSWNuH zIOdot{wmk+v0$ij22z z$k5<`DOCH&v7>Oi&nyhHGNLZOG9R+J4KzuKoS_Z>WI7Iz*NE;UIT0KT-m4UbA+~9r z&`-U+hGD(|wl!Gi=KQ7+T5Q)w2f3KYt@X}_qpJI`Z>~o*X_824-4QaKqc`(Xk`rn^ zA|Ajw@Gtn)rbA-lPD=uv^`eTLgqQo@T*DMuo_YvB?3k-sRsJiD#b`j7JJ!S4;j?^q zvK>Ctc+?q_@^pN9r6OuN0(Fs|YI<`X3OF*mj>8>XMu?G9@zDF0z$-bmfzFyeeHe0W z8yaRDZ6Hq6^o7CODL|JS{QB!M;t02c`6w7X66Wir7|F)2X5ZN$Ls`Yjwn>JfeS}9% z&q17i<5R97hWODt48K||yULk^wbz_q0y63T3%=~K5vX~Gi7w_*i_1MBV`0IKIeIks)MYyIKw zxhj7t70ggr#hd9TVa+`8f#4+$edVtPL>^3tCrF&#O}KsSqhGCVm3FDt8!jSLX#|SC zT(IHB`wWJ4i@TqKIbaxdGnRTmb|Fs7ETNM?FvXyD>OCV*qxWKnFgRy+cqs?< zVUaL+?(3kG*;FSkv3%jpvFE&jp;1fSD}S3#3puF&#Ve^kL=@870+&zM8MKEsi8(rZ z;vu&2gNZN;@w~k{S8CLR&9Kct^Hg5_WVwY`uBeQGKj2c?Pq1y~ihL#+p^`szSK2iM z!O2%p)wwuwWPbMmx^4f^$@%vtE6V!Vr0xuOaH~v3+4RFNI|jrz`aSBq6rIoPGl{;G zypEzS4zV6Hw`^;TxL2|Bh;8!EbtQDKt&qT)@)XNg^>JuP;8x2f?n&>cE=O@^TbQ>* z2NCjP&Xm=Z8#CsspO-?~b>vECZb`8VSFaKX|I$xKWx2obPKa)a1Pl2 z%sG9iCb>WdcuO?8kXAr!geC8G@LBFoobaRLI~%pv=A_WkbPfD_RGK@8@!IX z`ejLW8x7zur;R*iL=+inE8asfB4mqtHE{3ca3(v#Ey%vXEH1^B(0lkuUU*gq^#vNB zjx{;B%tw8oCcVn0Qo;3iUG(9De}4rax+GX=FYb~K%Hl+V#NuF53VQ&2Mkq@diO5|y zQS|Lz03SD!&{&ZmpNXQoaO21S`Be>atnP4aF?~mP>T{Y0BQ=?dU0p4*Y_f2f69z=l zsB9q0py$<5pC|0$!769>P?Ds~&M_4KtqQ9g`qXCj z^GCnjS~2(bn($h3&MgV09%w#Xl8Z0nSA10L7(lT3{KaBAQ+9VtmSSQV~ z>p`RM{X84cD&7Cc9K^PVZfI>20Wz02^j`lzw0(6zR9*M(8HR32SJeTk{U$1yWx)S`+dKA@BjDyHv?zZUbWBOXYKQ>2ko4Ma2wui znu~OT4hjx`^G@;jZ6Tjw_OGIv?5HBjCw{eA>XXwwHYqLJ-{bSTc*k6%HM75?gcp2C z+7>Y%+wFH6GjeewcwGBo9bk3W_ zOBoCX%k>-jgEiby9qBbD`aeJ2k~mVWJ#G4i8~K4?T7DxeJ#uC+1X8{@AWlcQ<FtQ-$gHO8#_{6)e}>fR#IPP_av{)GkP4TJeSUZIGznM6?%hc_gCMP`E5+SV=pgs0mIq;^7nR3dpvRq3)7NWQtlwBhxNVvt*wPxvxIw1>!D-l4%+aGjIKv#GexkA_@`C)l|hA%b#AyuxH<@%PQ=z zrL(Z0mCKZ2gh^3GK2=d;`=%ra1LdXlOtp*@y3l=zf5HyT*MqQ*-0TXu?fTeUIAHG( z&KdhP9>N5(NHVN2U8MzyehKn|dbNn4W`LxAeVekLW#8~uG#H*IhjWem8r2|KL08XZ zG`FMnUqZCe<(nXf|0Y0Ku*;drCvz(nvighpSN%KPY%t;HF3h9L!a_vjfn9#8$D8}v z!oropx~~8yVz$cMUIM%EfYGQRrFb*d9A?R{@0N@(t>HRFk2t#`hsxybE;GqH!-+ql zXucn)K~jg9?t4=+n0(ORDE20sn}+hR;&_}zd3{#9LbJ! zHz^sSGXLhp1C!!c234J3X5jYKBNYlE6sDDirK(LsiBp~$bGNsZ(5CX_F~PJKkQ+Sp z+r4D0XR(joy?*nwT-ph;pf(n;f6TnaKRm7k>7#l&?$Wnuvri1|0LD5-Lh$$q>jx%@ z;dj9hq`UjAS=O=bKTh?SONej>F9K?W#brxW(|~??aZ(G0-oq)dHk`I8(J|}WHa@2; zn_c+9I={A$C+`|wnCyxT8kSK> znUp`4hW3>S3y6RoDgz!DeDErAdmObvdV%Qfok5ttm=ZXti+ZdR9Cd7T&5NsDl=qJ( zLB0o91*^2A%Y31A7Ov6td$$AcKjr0;>`Qn-P7RCZSNa<1EB7bmAy!!ri0)p7i7j6I zFDiG7B-Rotm>|Oyyp)vrhoHRphas?Zxx!Wu2Tb)4bP%Q){wJ;+S^JH1h%7_(!%Gys z8}XPzNgB)zSt^6!DY2MBHxOw%*;EQNVHjo0m34=tNd-lJn-z9{$nI_uj;x}#Hu({( zu#F%s!x8I~|Lj3zBV{z`))7Et^H^c@A&h?v^iX_D8?&MmCiqBjje_zLq<4ev{uqQw zIE%qVI6ykBt$r@omyUp4xq|Ht8C4A1->D{tn@v-Ar(i-S zoFKO=I&|!!NgHC`+YQc*`g`jOADVBtJU&h_)J=@;qA#q`j~|PDw=fWStOnoto;5jL z?_Kr|oEfEx5t|op0+*d7Ff9g9TkC}QMioyu^0WXR7X~M-vkj&Wo9*Xp(Nb*UFs9#! zWO(Xf(^%IQ-gPzFz7q%4D%2;F`A8LKH1LN@qST6{jIVmKsu;s&Wz(_9!J((gNI5IL zLOd*6wi+A*g5x^phoF)urcPQ;m~>)?Wb1`3z{dt94>{eKVCM z2ow6pG=>JT@($1;H`O4AocNyYdxTu?J(J;Y2B zRSDcC(wQYpQlWP0QC)mNPlb152`3uaq9@u|JHULxfX9VeImA7r5yXV^1grKGMgLR5 z0ixGc)EQN;S$g>Q&-|TpIXN*yUkZJR6t1uEEHY6ZZbom{1<&#IvJtNK`s?bKn2U2V zsM(8^~!B`_pS6Tt_su>M{ZEh(D^|NfE51xJ7lgkO(0A`vwt@J|WNo z72K!K>gJ%(E5+im*ug$Z<{M_fie~7zZx)Rmbcz{bc~^kFJV^FkoSa@jJb;K8{+Nvh zdPtH)VJ4i=y_M_l!pq~7M_sBABJ=a12(x_KA>g==h9+mV!51j}EFy6e5dxUj?>Ko~* zK0>p_$j2s8s6jQ7@?a2Y!UAm|29$Qr{TY%o-c9&dR9r1(wV!*y#{h93E!w1Kn^3}YI%isGUq@P=YNXh;{3k6PDGIe8!c zNFugmmvk`NZzb?(e0?=#m8&vuFSN#I#pOm!>u#SGFG%3?A650Jgph`w^$v73`~>Ut zK9hOT7F$_Vn8EVqwx-y>hS5L!9?AHuKBI@QUm`8cuk8l(UU?@Mz-RIL>Ccn4(8EO(7!&Qmhlv1DUR$%)@ERp zC2YA;6+1Yn3PN`e?jgO@wMW$_*%;P@GE)Kke!(qd1zjE#c^dtCkbZJ@Ii<;C9cr!x zonDL2q6Ww04%K2w@>)`kklV2EUtjQfcAm3f^Uw=#GYG2WGHo-2SfW}7W3f^2-jnDf zw&jxON6~xiO>Fbbd7{oh{I&HZ4C{HZ@j zJn3yP&GaSnnRxAXVb9E~7W5~UIhp&F`K!74DSeyS;T|3UR~-M2v)dPJKk{ECS9{mL z4{W0H5SHF*CKgcL(mQvbd<3h+rEZZ*bEEQ*tcdGE9&HazLkU}d0|{X&I+^ltBEr1O z?{BdJ3HXSDVe6~lcsf$t%E4d1QedU5}bAwhP~`#^p(G9`*!v5&Jpo2j8LZ88}ST zx4p_Ji=Ea9G1yuHsxwQkexriF=#jj)QNEpkX|Sm)3Fu1*%v3yZOYsvdSI6IZfP*pt7M5UiR&Bz-)pR{8V<1!WFNXgf2ICP)}HQT)%^k7ORqR_ffqGsDw| zG!^Artgn}wEpImlxAt9bhmD>lnO)C!QK z_M_cDR<(Ew(YZs@%bUpbVUL1I(t5%lJP<^kXUAP3Z~$xENHoU{mAc9i4;(Ct5C2&R z&{nprporABH1$hfZkOp-oVgu4#CkLn$RISjSBK<a|g-3Xtr<3DCLKz@U4Zku&*4GPo1P)`W)V0;p9Z-i}D|Gn9 zC2H0IZjj^>M1XTKk4{I4&QPif_77dd!o1Ee)WuEPLQZ$5FFPCE7Jify1hAH1$CZF{ z27z_zuT(OV7xGgLB2~b3q~auM;-@zdY!T4GWFof)CB=*W?T6p%TiPRIwLHZddA8ON zZXF#^=ow}pwDUs%Jvo%_%nsRKwzD>QQqmBrk@)x=jikHXD7bE#nvT!{(TX6kgB9uS zP7o!8qSLH?&8;Kw{-&fnyV1?9<8FKBe0ui!B3)?*rS1fKSC_qf_pV=ops8cyl`5hO zUgX&`heT&2FHaWUVu`pz2iSMc@6*HIm&5U*KRU^|Qo8pKBUEFueveCD%*gWO?AiwA zP)DmI(dV_(t3ZTtb~;K!l~knot58DOa^u=JbM30ZB3M`Ydg#vA;V{G zVS5?(H??M+VM_-0zNc|jH{}xYuf*O-==H0&s$Q_@H5||r{5V9L@LlXT;xzdtxxFV^ z9ZZ40tmd4{jDttLFbG*e@@`%>Ya=sZA;adwD4i_4eri7WqBDrL@{nRe>4mHMk71LX zM?q_b9vdyZ!2l}ppySf_FJueHxJ)wm7dM(a@|@mlLDnoi@;gs7`;st)4+-EIbHQZr zf-TQUeo_M?ezl0kt3Ni%y<{OAu);$Nh#5o?J~=;6dl-73niz7vu(a7%+gYzt$ad&t zGLW%C`!S5CNH0xWZ>!^tupj|Dqu0w;^rFotC-1-Dl$6YBQ`q6BN%`B*AT_-wF~RCv zM>yZwX3qj*B`_$@9u$W=IEUn0lxT@E$L&X(13fHpdR?m-k-4Q713_Flnx_ zv-Sjjpg^T9VtvSvu=%bb1M%=*cqom2Wasze-sR#Tv3fx|^zL{sab;wrLs4tltlp^h zYsJY=S6447x6~YZu8@mgRunT8Q_Zx;8KdzwHaKTk@A+% z+0mf-E0U0%ad6dAP)~Y-#)|RA+5(HP<1u$91{*$Q&TQ4#UhH!>49FPv+P?w_#}V0Z z$uZDGBzI9&5G)+#DQ8ywH+diFV6PE1{Rfet*UNdPeo|5o7YB`jfL?A_5(&iY;5g|u zD&+UuC+3K^y+7jmZ%hb!R^1}!0CmPuN9;0R0DID!gHAUx4;T02lb~Mfy2oM2jE7u_ zS~?HwnAGCzg=xESlx2cyx2QF9ya{Q-^_!tj8x3=!D14Swq@bO7e$1mM-DJ6=hc*I# zm5B!FrCN+(LA&JbG+GTO4v|F&P$s@b&Vo~43}U!nP~}r~gdtU#fLrb{VIjtTf>8f! zpqkWruM}w9Q_TwU@&utP)2_FWHVnd3PDwq)?mQS@MBBVJ?K&aJjMjuD?|Wb#t$9Sg z!#sMf1=5Ss)K$z2MUmw8p>uT9fN=Vh^m^q8L)IxYAlXq^rsN*qC$M-J@uqgXrx+Yi zNqO%vf0=#kWzlSVGvjGNb)N@1RLx_#40j|~PAf*+37|7VWgQDurgihMZIw;u_w}L} zdXE5HPRoQ6!~4G=iU@f=>~W!C$Fb`Av!pdM4JJJp(3P+1)F!WF(~WeVT2)b+SB}{W zQ;Nnx-xq1WwZamSLLS@OF^KML^j}riM>M29rf@R zeb_rW8v*6r6eni3WWEne5s!9g#?x;V75q?Ao+&h_V;7_)G2OmS?)8MEcb^K1*afe? zf_${_4kPG8SNTZ>wiM_R%*iAP>oS^v@s>0rDsNwbL@b0(BJsb3m^L{Ex;nSpo(=2H ztycT*Z*lt7%cNuel_G_ZvMS^V3biEb4q8a>MG9m8m~zpaj(DU+L~{=Dgc&vY6Xohy zANfaGRZ(s;pOI(F0^Azw(F z?>ONkU%I}LggZa(D~J-JgoYRtj|v`A^HT;wi}OeGKf56gqVAeDN8v;brqmwUvTt>Q zWafefs;m(|7_Ej27^zdQwXORT!;0P0aAF)a?cUQ!Y=<}R5j=4CK z@0KBMGd+)aA>jOW5e!O$sgi8)+mk09ITPb`vpLvC??ba!>Bg0!0u(l<|Es;6@AlXaA z&I%Drff^}y$lH8U_`|c1(&-=S%k!e!F5f+oBpAN{>OE*k!RSqzuYXv+t+I6AE~3}2 zu!Z>WtGkn$ALj7qBX$OepxRjCC_#LTsHBMDQxi56`9z?fSmmVfE>^hhGg!X{q|pPh zpU6!}{b^LBfN22EYG;K%IY+L*MjX0OUxbrk1Rx# z9f($Qm1{MxTt=G}1BJxpBExCA>wEt^Fl*N-YqE;S%%O`0( zj>idgwmCi7Pql)H;EW#gLy^7+&X*Fx-%_v~XR2bJA4JsrHIzT|xc0xafA*~P{Jr;P zKxrG!SYo)9(zTPV~r_XOCfyu}0Wy1&_GLDQ4xaNU*CD#+z zK7TFTM3UKT>_Esji^;yKy9xOyJ=YqM8Wqlm-QCafK}MAx8JYcH2L)9^_U(aj6TA23 zYG4Y98?)Rq*T`^H!Bgo`X49zfMR0e-P z2bCB80mB_-Vpa%)ucuZ6$yflyv*MqNOeUA51mej+82SkrVQ30K`T{aItB!;%>w{#> z2ja;CG(TQTnU8%SjL=VM6`EnmsYhp$Msh1zixINH| zdl=@Z9xuu9?7}_~n1>;g{UibTDnjlF%;}7f=g2`9N|1180&_d$Ia(0vHwDQ5n~QqQ zpL*6hrV$K&NyR|gdk@?)!pJflQx58!Fn_MJLwU5v61 zJ+aR_{jYuN`qZbjnN#BJ71O_3ANl~&LQZOLelY|bKGv|-=zgqd!s57Sl@9iR&KG4v zp+KPGXvw*>g+5C8X@sFbul#`b$fPpCBUm{^=NW8?6SUkIsJm;S4&j$TChPu&b#x{U zOGd1t%?~fgwd^_54z&ri%64yl0;3p5tU;IGvYUt@9(Pt?(HKz_l+-_vt_{oRIIgM< z8dp_iq)23ax?!F{<)v3U4RKPkr@)d1X-MP&r_a*s(kYh^XKaUT+ZZwVh`@(JYl%(1 zn)aI?s0+9-=OBo##LD)b4^X=gvc;}e2Dk`;xMk-6$230;S)H5L4I0D&f7)q_Y5_$b z8^f2N*DEhI630L1NFKVkybpj_gy!a2*%g0UGgEaiQF!y^n90gprBI#};>hyLGeS$X z4_Y>$`Xx5Ae%8@c?++@xu%pTuuO@-Y1i889GUA0LihCabE65UbYWH3N5^N#l27n7; zk5)@+n>R@0wdX}uj;`tnj%c9LHx=y~MInVUdqBTaTa|VmNMvL+uUT01MisIbZGq^H zvFQfNu>PhCz%s2s=Ib~1O~y5jv(~}|W&5l=_Zo*{9Br@PzG4qS%6Crvz>jKP^rt|b z67FBtKA-l}UjM}678%9>f^OlY`*E>Lpt*C?G?ge?&S;Bx+PSK4gGqb0HoWu84W|ar zymwhROMI~V&YMYF%i2-XJ;OzRS~v@!)_l|31xXg~@MP#LJ9MMuDpIbJN!rR%yd0;t zKad#yu4H5vK0Q`P-tk(_om=qKi_sAr{5%oDcP>&pqjre{4<-1SVq~r#shK5QPJm+n zVbGa(8s(-aC^T~oP)pyZ-v)nrCB4Ax0sls%iR~GRdt}0nJ{1?=z(rk1P-=|UC7vv> z|HiupbhSa)#)rWm6N6?zh@|c~EIYDRkv%#v9L!^b#Km0yyx1G!S@yAgBt9HD_LEt% z7p^-)vE+PO%m;^^IVlhnkpO{%mE+tJ;3NDakNl-GdhIMc_#hu zU_T9eQoU_lKI00z%M+rr_f+&&_;>{+O>tW?nRQyFV38CF$11G+5zq!>cTO2e5Wo{B zLaz=>*~tLbEzoqJ*XItBuZ04(sh0Rmiuds)i0)i*T4+m=XgyArjnaR9JpXhi5cNI zsHGcd_I^@0^ha@*0-HEg*zH^Z*;z-5$j~(GZ7kqM=B#$QAMuLR+~xA4<@ZoOQ-J%L`yK7`qS-eN*>{xcJxtU_J}~(O<){Fy{1Fp= z5eKwxgCJbfqA-n6Zi-rTT_;Jeo3rh%YbL-QdIMBc0gT4x_= ze(bQF`Gz0|>#)cI7MtiI&uuL<1gf*%7##Je3B6ZC+j?z2%LZ~}BRXN2ShH`<1RuF0 zx6(D!FZ1;i9`2xD3G7q^`5+I?D8Z~EinE~K!my4|WJvAtpZ#?|TD1zmb+ZRp2?vZx zKu_%PQY4!>leXgPxMA;e!Ap+&C(!vhJ?b*;Eog2VnIp;I|(F0Z(y+HeOk*8!x=>(`$DPD^+ zAmb7VN7tVLe}F^~5mWl>vJ(`rtN_~C@67b3)%0bnTrp4v)f!Mezy_RTUqU!}M9ekZ zK9_vKu);!vwl#Nao$I(fhj!E6rW3b^3z{6JMpGVLwycDh-J|J`|)Kno`on-SYlr* zwG!?Xh9&zW4jLSY-+}zS^&bL? zk@hcjn6R&ytf~~aNLE(bn9a}z3AX0w)>W9zr7g+ zR$D9Ob0Z7bQ$5?GCEj#-X@U<|dF|N!pp2&#yAY5|GoZOo`OX*xUq`H|pN;!6 z7{3u{h@LVP3)J=fGN9~L0fs(cW$Zn_z@Q-;=L_Py^b-#!@9>}E_MX3?B%52SmNOsUb?vD!SdOcp z^q68FZ6@g39MZIVOpNAlW3<_8(ILN00{kBrFyVQ)cwxWIuKfEFfo?^kO|wK$%=3li zcb-Qj>+L@~h;3S3PZoS#6|Uzk9m58YVVa0pd{I*gJggqsg%aI?rLrE{aZyo+Is!8? zB!h`j$sSMJF_Z1pAd_K+%ZaA`WZkTzn%lvLv`Wei1IQVBBDj133V+w1t!d!V*Z&IV zXn1wi&0jQ11sD>;lf3rW@N2%SrDdI&w~Jbf6~W*R99~0zHW)O4mB@HERrBrg@kGLW z!)ngQ6z_r_bo9`O0$U00TVKZwyTmc&;S0xwFZ3Oy)bv$@w)`_z-JZsvJ&J8+<~h#1 zWpzPS2-21Klpt-eOd0kAe62vMhFAli!lY?K(aH~T!+HnRB_K4x{_awtHjn2=_*3B# zczGD`i{evTEqu*i*zcZ;a~Q)9L8KRvW}u@`R$%#23X@Oz{7$?gbhD(uY(P4EcNZ_E zy2~HX!&=dh3J!tv_v-*^T(J_+Q>Oa?LYjm0`R)Fi}=1fMnYfo#LBbzp>P>aVkDyKAX?MPhp)cA=Mv_Ktv zuOO^u?vVC{<%o#M>{Vd+?j@L=`SbF_EqY|ot>myM-INg81BmCj(YdFOni=8Xly+$` z8uRBA{OusIY8|z>Aj?k|!cZu@YV&O2nte@OwBmfi?D6TKY8hg>xMx+L;INxQ2=@S8A;;$4R|l)Y`$YF zlR4EKC7zNH-6+jC7reT)td_xqDY=A}Cyq;q`=1KZBZyFlx|w_Xf?;1Jru> zwH5p%OGZaDSz*hLW9#3$nt5yD^2 z+sB<;5N{^Uzfi4^lF>pOkYdUIjr0>ZZ^>HqUfjXU3JCD}PsM$_ZH`~MZuiE)T=&mc;=)yyzT3eeQ}1NbzSb{+Wy@cQg9f`>{RbC<;dsC2}3rfmqa$f zNOzjOKu-Z-6Y+0DGKS)v;kV>;9Ez6tC4*i;7Wzhire363HTF#D$8)~~>g{;BHqq|_t&dH+ zq9MMaVxSAX2v=@U;^fHck}m;+C4qt#k3J;K2OCBWMvrB3iBJvtp|AP6`{i=^!aF9+ zOtjub&J4%bBED9PEvZ)4WkRM_SpUh$%>-OrG7K7w`zrKR7Hv!HEP1RU3omnq`F$q7 zFdo>mXQqn;m21GMSpE1fl3keb&QpXA_r9ToPqO*_o^CApibVIz*?QQ04n$GV z>J^8D1!Bt-aD*=rDcnx9#K`EA*;|tKwKqh58u$2;AYWDTsmx%b^ECe1q$M08g^#nFtZ>c;8dTZLSw-`X; zqzBY?*xet>|Wt08Oc+)6Q*qz7ytBkt!k zyD2wU_S?2cr9ONR=jcC~(gC_ycD^v&(|cymbe3;42{r9a`YRD52gAMAnz=qjqb)~fo)iNu(?k}qB3$)@gVNuQ*)=%$JB)MK8|3}FV2+&H~=y?bk zrN*ERd;N?NdzmR|iYIe2y@e>zGy1;8hCJlcDe-iV?Yh3uK#|riIyk&5@O6q71*M^@Zt$(*09$NB)izR;0EIiT*pihm&C8*iFy6@xWZ1 zH57d_lL=Z|Mrg9IVeyB^`nROldlQFyZp*{_i6~V{&v@LbHeNvE#}HwEBd23=gq>&oZ&w6k-MlapRclKTY@N}n7Tn5IT-w1AKTLcvSmDR= zM^e#pNC>_if4`zp-o~vObTyzApals}d$y!wivXJ-Qk` zk(ved6Lb+|S@V3w7w=8q$HtN(x|%;(>-QHLk3-|_z)TE0$C)p|#?P^hBO5#kE+`CA zY!Eg$Svnm{6UgUmJ<2qafgt_V#vgk{9Y_D)(;(ZAf(SZrd0arWt)mH__fx$q{97)e5pN~W|M99(us54#FH zc~HFyee}Bfv9{1?wiI@Hv7e1reX!E;$aHxv8^J5%#hO$}F#YZ7ZEix@IFfVwm#jt5 ztAZYqYoO=j_E!yEpg58me%>;X8t!9=M)xk}H4~6su1pC8Pjy=|DTC$t`6!tAn6(iH zo#;vu1_5N|AlE?h{jHJ3L3#ZXL&7rKFHV%+Z9hKB`8^nucOGh&JxKW2U z8J<5}fD1>U%9%bZ+(k0rz>@(>rlERn-ye9jA0NWI(DarO>CVj62w%Jv$$#|Qm&Va! zAdjOK^bkbY;FG%z&VB_!ZfcH@3sgHAC4X~U$v=k-J#ioI<`_7~LPamri( z1yscTl>A(rkwQhc_EU;e-5cr;+Sy`|At}9k!dpG+IgVC+^Z+X3ckvNiR&s>QcBnZN z)k=dlZ|}ywHW9uaER@Ea(CR6rQ?j=@c$s}Yb3v^e@p>t}TygRq^dLgS5|x77y2cO# z7scrNu;TOM;e>f>(q$YJ6$vYLzbd{z)YS;O`w=SfP= zX!Rn@4d*}oTVx7#_SPvVb1XLmufGc$!u>k@11Nr)1HjNJ-S06OyRV?uA&uFdya z&Y?ZyF09skBg-P;7u~mG6;s?;Y-DUtLF}Z=#e12OQ{$l=6u(gBcF6tE<__FwrMDMQ zP}kBHfGrW+M5l{%v@4-(9KOEhE+!bJ?Y6B0ag+Y@G`$i#S+!7VnIb9b^OtxsV(-SW zn?76iWnL}vCCx_F4YaXXrC3v#o)2b1D)l8Ocl;=6;YMU$j9$SJ zpQm_P1=2o4Evv)H??9`bM=_Utu67J%?W^e$YbxBqGJZqiRI~?=VYcs&f$@jnG`$Fo zEdv}$AVmsN`MKbv8e6=2yFgH;P$~`vdh_j5c;edi;T}~JUcxG9!yh8rI7mqRyhbMV z2Um4Khb9M+P-@By7bICY5)vdu$ zT^?=c8m7k_kCGetu_ObR%7ai3;(C_RZ!osx{pK!aqjf&!7fHCuFL07pos0(i5KURC z^MJUDZp7Dv$}{6olCzio@n&r#QE)OuQ$(~3uXZv~%ZypovKiHCLh$bZ-~K%|SgH3y zj6YqdUToGO2D}Dd-&zYmv zRM~&}&2GDW1Z#BNxDyHd(EQoj@^-7Az%PSwZvK_d9d3hlRE=mM5Ui^$d~9TdntAIa z@@EI2MZa%0@(iY|d_fEOAHgP&&6R{B0w(y6RtdMy{=CR#%QN_J_fXEf)fMhOX4m-V3LU~L`xyC8 znuS9BqQxELEy((4JGM+&ke|d?yu^3mE{sHfwcq<{5eeIvijSZF%B8V}a*mm6z9eM+ z6W6?gOJ*^)hgfufOzPhU;;3GJDMi3I`*%TlmSEq{U~ zvBR54AO8fG?wvH<9@?Xt7Q}Ss&jf z860i}iA{a_7QkaM|J3=o2oB6!$&>E5y{}cKqVeFSK zth!|Vo8*`r1a?|m`2z69#*WlX2`s~c&2v*a;J`ds^2+G0{;Sd_0Nk!gnqDX(WgNV- z$}_{(wX<-IL`W;D#DUjHBTX(;xju$#WP2BNr?I*Z7cz4-xuYW0g=NAUSrMv)7~&KZ;4L>Y z%|F1d4Ro<(^3JuR@5IyY(TnZpd>y#iJc5`oNCM9ZB_IuB{#)elicF*yf*+ zlHIWRlC$&}YmYGl=T_K$r{^Wx%%i=Ws>c9VFlQg_OM&ZrDRTA2K``a+^M{beCzGnW zVO~CPewY{RdIWe<%C-?{i#R)G_S|KuIG4A!1YkRGF3l`S-f_aR zzu}E~9dqL^OkESIhR!pt-o6adl)`ummZ?2oeE%Z)~I-9+i0*zLNLc z$|_yL?ZTFv3Ic4KT*iWXv{cAe`Bm9l=-tV(r6|sS*v$hVtex*yA1u{gK0yFRi^^2M z64ySFe<{w#AF&V&=9hl~&O+iKRL9}3%60vB0*J5P)xhNQf8o-bpufN3K)sUsKfjkf z)?*A3dt~3z{RP|lV>@j8OR#=Hm+`S)->aiBf*-}n(|^ll6_ ztCy^Do9|Sb6trDz^Cnq$N57JXDg$8Db z%E?3lejDg(-;j-CC0pNvXKCG#+O~|EnfN%S;!(|s!*ywfeiTuQn`G)8JTW@XayU1k z3z+YCU{dkF`DT)pi;qlUUYv?q9)@$Ith$GG<({+>D-MHs&Os}G^S~;+;-o($93&y+~Zo;Zy?*F(gqlDzK zsRE_~N{hm4=#fL_?6pH%vD|U}88hE;K_aa$ zk?yE|)>D+;=ZR#;sD~lVeJBb;dFe<9P{4t$;9CPz9H{o^lr0HQh=K?+zFlfL8{*_MstnP?qKQHIAgR#fLrozVf+dRM zAP%s*73k!J`3CF*O#zVHSH2*rJ0w$Au<>BTb%NQ1)pm`ATJ;-7;a+6@0Gwwrcbh9a8Ho;R13Jh*=tg zS4D4Q1zZ}-wY#eUlTy~3$U{k4z!HxH1t;>Wif+;wH5k* zC6vG0j(^kWtnkKQPo@I{TLp?bXH8*#>HyKLKeH}Gd(Lq8x%WdD8xckuu6LUZ(;p=} zVF%xwzzV-%{sZXDyM1Z4bvy`w1UBafcWC-3}&*QnW! z_`qAED=t)qHk(vqK5aHkcIK>~Lk=6p5GEak$%8A(iqWCqWTH2nm`9Mp8U->EM85vzA8Pr@2tJ0|fYB@}SO@qfI_!NPTmHU1f3 zZLejGZC@W-QsfceZWUeZn~WYDhaHNmJK6c{Mqaia_K@A@|7Kv;3fdfkXu@ArF=Z7$ z%g-s+Z2&M+Sp}~JB`90_aX@~C1L@8V>7Y;~mQ_XSvW>0cba zmGsJAPMysa1(mAc1?}YqxhJ;!&vjZR-h+Rol6%WEzM1;Pb8sq}kvGI5vv`HGHgx(E zxa=^(g#HpJQ=V`^7U`V8^9m5^R!N=&w@D@*JYu?kc7d$WDr#1oXMs$m0e$>fIYkt` zNuZZfPjGjOL;#S#7l0iSlEat%I6->!$2-}1c_Ekg>DAxqu(*~KA-XjH*GA3N7syr_ z4ZJ`TWw7G369?*n*+Ta#_l<9i2p{cw7N{!LB0s11Ln-JQ4B4Qp3JmYaSjQSii)}|R z54S!?aHKEEL3G`N!>pye&O+2#^jqSAwd_jufP1{XE6d}K0RA6(8>VwR1_mo-irtSM z5Z32oTW;BL(5br!XKwZxaTJlpRGGr6s|H7fvIKs+qb>?F>9!89IsP2EfCzyesX<)bi+K2)Po0_Z)ot{m~GHvO{Wv<`G%v0 z=|kwvjkj_6vA-UP{*ER4z`)yPL}&j3F8c)nl99B6w(u^2*N6`P){w*ZxS-{wM#7JCcABo}m=IKMiJHPjgA7RZb)*{ zteL)ZDi#|$r2q*Nka{$|!fxySh>ACC*Aa3r_jt3o=)U#5T>u8=$BN1%noU1UUh$p~ z?-KodkKnOnksb$(VI}sMkc-ov^lGh;-5^61+(>D4MMDq%@sk4pD zGYIvV&p>0!Uk}zr05ZoKe zHS9B$`-eieyvK)|w_4Vxo76~q4Ki9SA zOc`)X5jN1b-jKPLKSGu&e7YZ+EAt`Q5K zDT?=d2cuBg_qIKhNJGtx0bZg&*vkMZlDj>=#!Jg!)3UaZeyaGRW#xtcntAt+jJ~A0 zpJ1KiF2{$@)(su8d;kU`po1C1FrJS55~-%dd+zJwMT>L$A69-9$*~??2K8mFhX-EH z^PCkPxPlLSi)=s;#b`L%AOagP1^yRDV7@;aPi`64e*9*E&9zL!wpL>a9`ASlu7A4g z%2+qPnX0sumtXxWScBB9ef^o48;Oq)BuF;waYGP&LXH1-u3UVCQ|C@}Zog>YFxr3L z#M%_gJ3^ssPkMGem`&AtI4?_cr}>|_I&wKva;DgQ*s+@l> zSslGVShU#{N7C4JZx_ra>v_`{7n_&Y8HYCLFcY_hGm-exICI9xl-bm+1=TS>H?67> zBd8(ojn2`lL>bb!K~7^L&C^GZ)xP#c+NP~9CQZu8?omsSCe2=Wfu|i_Eam;#k_&w~ zrSN&fkik0@+?LJ97`~``_TQ6-urBQZpz+@k@v$K|El`3ophp|2{SOAMUx)om#sDOLk0?su_o#>^i4X!WK@a6 zFxPH9^Zt#)6~lGxcmH&yjsf~#k?{>oi|N2`Bf!2ENtTb>jIC(_RZX(jRgTcp7K;Q_ z?eVeu`+Wja2iw~h^VSvCE8P1AC9!#OdsK%Auv4=ep4B_FOoN44GJV09mzL%dn(ET0 zb_nR25fdTo(n`KQi(59l)5ONn7kJ5Zj?7bdb}aMO`SW*KjBK6_NZ>kjBp!l#D4G5) z=LD^mo_z>`3oYHYGy*lC3kYm9uFlYuCy{Esf@4B5W$4eV45Jm4i0t5hp7=f4F4GP5 z$D8DI)oW`~_~TcCYomJ677qBMfi(S!RYv7Tb(h_=h@cb@R6k+GC$Q#1>ET-%4NOH9 zXm_-2u&({0q;zentjnn{hVcHksY{L%*R?=GJ9oZaURS);9e1uZXqKZDdw|=US7_bf zY}l#^g4FzKM<~rRe46NL=Ozb3AOeD|ISoX?H{(T2ZBE|^Ou0T4hF2lf>p``Hhe-2# zZ#U@~dgPTbai|;l4ZjXzu8`{M)%b^?Zn)R*3yGVw*U`juTUDIb!&vIw+2jFs4G#?r zQd;kd)CE+U7Z4`L`zTZKW5S2+hj9F|t&ron*FM0!Icw*d`x|obg6NN2R{;a1rBrT- z*`z^Gt=zLf>AUJ&J^EMA=_mgcl%-&{`?i1}_ZR^ihpY*v&^@==RBKdcm7Y)F_5iFU z&JyZdc^polkH|ALHd|Q;i z1B;uMZYck#tFMpny3}Hg0nAw;twG~vXA(wv8BGf4{mi?K>WGdU&K%%sQh0uUgb(+$ zv)@qVl&87+yyk$Qg02uewDS2%e*W9BmN2cs?FdBwRN$4W(l6J&IP1#VzZzJ*V{GjTY zeC4BduV#Qb0!Xkl7no0eW<3YkYi}T2d3`d|;_iN-u zOv8IXt((|eY$S;F%SO8J;B)trfU#DNYlV4v934pj8-dA*{zT+~?3xr#nRH`|Vwq+9l=P=$`U%7IgL>w!&Iku^bt-)}swwz^)xD1rq*VjQE08t9Xt7Fq zJP#QmU#*THba^*0a7T%ifEVxCJ&+oe7L%+A&Et2^qNCMl(p6D`v}Wk?)+qkCBzJkb zOqsRLMWK+NiolJ4Q6SHlUY_S+rR>J{IK6I{Ba(prAh5e zf8h1k*H*9L6T4A0YoD%3#CuvLgDez4AI|!$bN)o;ZqbX&h1K!f zP60I|thDg;3zA&fMnB1Dsy!gu2@11bWX*tn?-71DEeKSa;CtZnm+)VGgNJhzo&Ulw z@UnKqE`nY~&1Q3)1ylv!maIaw-$`f>Lmb%@v$CQEUwN%m9bU5Tv{5Z?p*qlNi4ywdEx>s;8>A+B?$YPB5%eehO&%q(p2<3}63u|H7qvMEw7m?9 zg2rYQ$Gy3DB&xKhWSrRLrjsE<`l7NzOPrpbmaLfzwi?TE`M^Rq&t%~sKBb4H3G0do z)I8$hm@-_jad73K>X-BvrGt`ae~Ir?ah&9{a$^>S?76=*Y=}Ih^=O9KJQS3O&^-v^ z#68m_DTFzxj}$jD2UL_1Wx(icP)I0%!y-W~n#NyLL4yo*dx?oGHpS+sPqxjG4G^Qp z`RF3Rc`$`3z>(Eo-ljls)_`UIN%QPD-ckyyxd8Di12!N%<$cH+P>*7iH%r2(S^Ey0 z5bKez3F;zf0fqfDr2ZX&EhF|ckuELfielEHaSWHp%|TB*l{jZR9&@HDUNeO zx)0^s4cFTob&F*AU2uwoli%6uI1Eu&fO#Fy4dc0sM%*34iTz25(KjP**?7od3JNu= zo)C-na^fPoy+rJkzj&|FO;vs0jmiMQnChmK#cO^PTg8lvR1b~+e69C167#!5>?D0~ zxq3&LWH0N$U-lUCI#T6>M@^?9Nz?`5A?PF@VVs&fe#n2Jvyx)KXOHSs^sCuky<8+` zua{<#8p=_nD&4d0#+ZA^aK86pOO|7S6t;od;X8FEEn_{8_llOu`?l>=wVT|^vsIA$ zhA>O&QsL)=wA~m|UxydIWny}6?To;QBQ$y5CDyT%DPXbA{BXeScgI%~{B+EFBu`2N zzV`b^4_o@B53q2*xOr%P((MDlynfffpL?3(5TMd#|=Y4y+2B#nbwWB z^s7#zheuP_zF^1(N&DlHRZ8105xDt~)TG!)fM*DoRvSu}Myz%cJb#n_vJ_n%txigF zL5fNciVDOrQG^zqwek+^+Y+_sLVs8JI&*t6TxnSpxDDU0)iQEB0<)?5Ah#mpE4xp_ z+!q<(I4Tj8L|xrZRKNPwQ8GfLBJBWjU29MV{Egw>Pr+a~nOlt1nIcA7iV6DcWn4C~ zcq1;SdT?vZsa3-2(%SwDpO3f9@#9YMl_kGld*R2CxEMH27~qj5zX7$Qligxm1hmL@ zZ(qHbhlbZ{0Iq4A^7{+Nm|0!$S}Yv5jd?3el1ml6ify(fJD?fNoOx)I=W+jz$dQ7C z+V@$R>e4~5?X>Kk+=+&#W;-%Km>N^vkqJIw$_b8BBZ69rXfUo32f~#8|L(m>;MeIT z{D1&LoZDSk85eWF>}>w;j)dP#95DvS|F~Wp)O*PHVtPwO6yTw0)SXAW4cLUVx>vIW e9QGTxvTWV