Legal
Data processing agreement
This agreement governs how HYPERLINK Solutions GmbH processes the personal data from the instances of a workspace on behalf of the customer who holds the workspace. It consists of the standard contractual clauses the European Commission adopted with Implementing Decision (EU) 2021/915 of 4 June 2021 under Art. 28(7) GDPR, in their official wording, and of their Annexes I to IV, completed for peckaboo.com.
- The options for Regulation (EU) 2016/679 (General Data Protection Regulation) are chosen.
- In Clause 7.7, the general written authorization applies, with a period of 30 days for changes to the list of sub-processors.
- The optional Clause 5 is not used.
An owner concludes the agreement for the workspace with one click. The conclusion is recorded with the person, the time and this version, and counts as the signature under Annex I, in electronic form under Art. 28(9) GDPR. How peckaboo.com otherwise processes personal data is described in the privacy policy.
This English text is provided for information. The German version is binding.
SECTION I
Clause 1 · Purpose and scope
(a) The purpose of these Standard Contractual Clauses (the Clauses) is to ensure compliance with Article 28(3) and (4) of Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation).
(b) The controllers and processors listed in Annex I have agreed to these Clauses in order to ensure compliance with Article 28(3) and (4) of Regulation (EU) 2016/679 and/or Article 29(3) and (4) of Regulation (EU) 2018/1725.
(c) These Clauses apply to the processing of personal data as specified in Annex II.
(d) Annexes I to IV are an integral part of the Clauses.
(e) These Clauses are without prejudice to obligations to which the controller is subject by virtue of Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725.
(f) These Clauses do not by themselves ensure compliance with obligations related to international transfers in accordance with Chapter V of Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725.
Clause 2 · Invariability of the Clauses
(a) The Parties undertake not to modify the Clauses, except for adding information to the Annexes or updating information in them.
(b) This does not prevent the Parties from including the standard contractual clauses laid down in these Clauses in a broader contract, or from adding other clauses or additional safeguards provided that they do not directly or indirectly contradict the Clauses or detract from the fundamental rights or freedoms of data subjects.
Clause 3 · Interpretation
(a) Where these Clauses use the terms defined in Regulation (EU) 2016/679 or Regulation (EU) 2018/1725 respectively, those terms shall have the same meaning as in that Regulation.
(b) These Clauses shall be read and interpreted in the light of the provisions of Regulation (EU) 2016/679 or Regulation (EU) 2018/1725 respectively.
(c) These Clauses shall not be interpreted in a way that runs counter to the rights and obligations provided for in Regulation (EU) 2016/679 / Regulation (EU) 2018/1725 or in a way that prejudices the fundamental rights or freedoms of the data subjects.
Clause 4 · Hierarchy
In the event of a contradiction between these Clauses and the provisions of related agreements between the Parties existing at the time when these Clauses are agreed or entered into thereafter, these Clauses shall prevail.
Clause 5 · Docking clause
This clause is optional. The Parties do not use it.
SECTION II · OBLIGATIONS OF THE PARTIES
Clause 6 · Description of processing(s)
The details of the processing operations, in particular the categories of personal data and the purposes of processing for which the personal data is processed on behalf of the controller, are specified in Annex II.
Clause 7 · Obligations of the Parties
7.1. Instructions
(a) The processor shall process personal data only on documented instructions from the controller, unless required to do so by Union or Member State law to which the processor is subject. In this case, the processor shall inform the controller of that legal requirement before processing, unless the law prohibits this on important grounds of public interest. Subsequent instructions may also be given by the controller throughout the duration of the processing of personal data. These instructions shall always be documented.
(b) The processor shall immediately inform the controller if, in the processor’s opinion, instructions given by the controller infringe Regulation (EU) 2016/679 / Regulation (EU) 2018/1725 or the applicable Union or Member State data protection provisions.
7.2. Purpose limitation
The processor shall process the personal data only for the specific purpose(s) of the processing, as set out in Annex II, unless it receives further instructions from the controller.
7.3. Duration of the processing of personal data
Processing by the processor shall only take place for the duration specified in Annex II.
7.4. Security of processing
(a) The processor shall at least implement the technical and organisational measures specified in Annex III to ensure the security of the personal data. This includes protecting the data against a breach of security leading to accidental or unlawful destruction, loss, alteration, unauthorised disclosure or access to the data (personal data breach). In assessing the appropriate level of security, the Parties shall take due account of the state of the art, the costs of implementation, the nature, scope, context and purposes of processing and the risks involved for the data subjects.
(b) The processor shall grant access to the personal data undergoing processing to members of its personnel only to the extent strictly necessary for implementing, managing and monitoring of the contract. The processor shall ensure that persons authorised to process the personal data received have committed themselves to confidentiality or are under an appropriate statutory obligation of confidentiality.
7.5. Sensitive data
If the processing involves personal data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, genetic data or biometric data for the purpose of uniquely identifying a natural person, data concerning health or a person’s sex life or sexual orientation, or data relating to criminal convictions and offences (“sensitive data”), the processor shall apply specific restrictions and/or additional safeguards.
7.6. Documentation and compliance
(a) The Parties shall be able to demonstrate compliance with these Clauses.
(b) The processor shall deal promptly and adequately with inquiries from the controller about the processing of data in accordance with these Clauses.
(c) The processor shall make available to the controller all information necessary to demonstrate compliance with the obligations that are set out in these Clauses and stem directly from Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725. At the controller’s request, the processor shall also permit and contribute to audits of the processing activities covered by these Clauses, at reasonable intervals or if there are indications of non-compliance. In deciding on a review or an audit, the controller may take into account relevant certifications held by the processor.
(d) The controller may choose to conduct the audit by itself or mandate an independent auditor. Audits may also include inspections at the premises or physical facilities of the processor and shall, where appropriate, be carried out with reasonable notice.
(e) The Parties shall make the information referred to in this Clause, including the results of any audits, available to the competent supervisory authority/ies on request.
7.7. Use of sub-processors
(a) The processor has the controller’s general authorisation for the engagement of sub-processors from an agreed list. The processor shall specifically inform in writing the controller of any intended changes of that list through the addition or replacement of sub-processors at least 30 days in advance, thereby giving the controller sufficient time to be able to object to such changes prior to the engagement of the concerned sub-processor(s). The processor shall provide the controller with the information necessary to enable the controller to exercise the right to object.
(b) Where the processor engages a sub-processor for carrying out specific processing activities (on behalf of the controller), it shall do so by way of a contract which imposes on the sub-processor, in substance, the same data protection obligations as the ones imposed on the data processor in accordance with these Clauses. The processor shall ensure that the sub-processor complies with the obligations to which the processor is subject pursuant to these Clauses and to Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725.
(c) At the controller’s request, the processor shall provide a copy of such a sub-processor agreement and any subsequent amendments to the controller. To the extent necessary to protect business secret or other confidential information, including personal data, the processor may redact the text of the agreement prior to sharing the copy.
(d) The processor shall remain fully responsible to the controller for the performance of the sub-processor’s obligations in accordance with its contract with the processor. The processor shall notify the controller of any failure by the sub-processor to fulfil its contractual obligations.
(e) The processor shall agree a third party beneficiary clause with the sub-processor whereby - in the event the processor has factually disappeared, ceased to exist in law or has become insolvent - the controller shall have the right to terminate the sub-processor contract and to instruct the sub-processor to erase or return the personal data.
7.8. International transfers
(a) Any transfer of data to a third country or an international organisation by the processor shall be done only on the basis of documented instructions from the controller or in order to fulfil a specific requirement under Union or Member State law to which the processor is subject and shall take place in compliance with Chapter V of Regulation (EU) 2016/679 or Regulation (EU) 2018/1725.
(b) The controller agrees that where the processor engages a sub-processor in accordance with Clause 7.7. for carrying out specific processing activities (on behalf of the controller) and those processing activities involve a transfer of personal data within the meaning of Chapter V of Regulation (EU) 2016/679, the processor and the sub-processor can ensure compliance with Chapter V of Regulation (EU) 2016/679 by using standard contractual clauses adopted by the Commission in accordance with of Article 46(2) of Regulation (EU) 2016/679, provided the conditions for the use of those standard contractual clauses are met.
Clause 8 · Assistance to the controller
(a) The processor shall promptly notify the controller of any request it has received from the data subject. It shall not respond to the request itself, unless authorised to do so by the controller.
(b) The processor shall assist the controller in fulfilling its obligations to respond to data subjects’ requests to exercise their rights, taking into account the nature of the processing. In fulfilling its obligations in accordance with (a) and (b), the processor shall comply with the controller’s instructions
(c) In addition to the processor’s obligation to assist the controller pursuant to Clause 8(b), the processor shall furthermore assist the controller in ensuring compliance with the following obligations, taking into account the nature of the data processing and the information available to the processor:
- (1) the obligation to carry out an assessment of the impact of the envisaged processing operations on the protection of personal data (a ‘data protection impact assessment’) where a type of processing is likely to result in a high risk to the rights and freedoms of natural persons;
- (2) the obligation to consult the competent supervisory authority/ies prior to processing where a data protection impact assessment indicates that the processing would result in a high risk in the absence of measures taken by the controller to mitigate the risk;
- (3) the obligation to ensure that personal data is accurate and up to date, by informing the controller without delay if the processor becomes aware that the personal data it is processing is inaccurate or has become outdated;
- (4) the obligations in Article 32 of Regulation (EU) 2016/679.
(d) The Parties shall set out in Annex III the appropriate technical and organisational measures by which the processor is required to assist the controller in the application of this Clause as well as the scope and the extent of the assistance required.
Clause 9 · Notification of personal data breach
In the event of a personal data breach, the processor shall cooperate with and assist the controller for the controller to comply with its obligations under Articles 33 and 34 of Regulation (EU) 2016/679 or under Articles 34 and 35 of Regulation (EU) 2018/1725, where applicable, taking into account the nature of processing and the information available to the processor.
9.1 Data breach concerning data processed by the controller
In the event of a personal data breach concerning data processed by the controller, the processor shall assist the controller:
(a) in notifying the personal data breach to the competent supervisory authority/ies, without undue delay after the controller has become aware of it, where relevant/(unless the personal data breach is unlikely to result in a risk to the rights and freedoms of natural persons);
(b) in obtaining the following information which, pursuant to Article 33(3) of Regulation (EU) 2016/679, shall be stated in the controller’s notification, and must at least include:
- (1) the nature of the personal data including where possible, the categories and approximate number of data subjects concerned and the categories and approximate number of personal data records concerned;
- (2) the likely consequences of the personal data breach;
- (3) the measures taken or proposed to be taken by the controller to address the personal data breach, including, where appropriate, measures to mitigate its possible adverse effects.
Where, and insofar as, it is not possible to provide all this information at the same time, the initial notification shall contain the information then available and further information shall, as it becomes available, subsequently be provided without undue delay.
(c) in complying, pursuant to Article 34 of Regulation (EU) 2016/679, with the obligation to communicate without undue delay the personal data breach to the data subject, when the personal data breach is likely to result in a high risk to the rights and freedoms of natural persons.
9.2 Data breach concerning data processed by the processor
In the event of a personal data breach concerning data processed by the processor, the processor shall notify the controller without undue delay after the processor having become aware of the breach. Such notification shall contain, at least:
(a) a description of the nature of the breach (including, where possible, the categories and approximate number of data subjects and data records concerned);
(b) the details of a contact point where more information concerning the personal data breach can be obtained;
(c) its likely consequences and the measures taken or proposed to be taken to address the breach, including to mitigate its possible adverse effects.
Where, and insofar as, it is not possible to provide all this information at the same time, the initial notification shall contain the information then available and further information shall, as it becomes available, subsequently be provided without undue delay.
The Parties shall set out in Annex III all other elements to be provided by the processor when assisting the controller in the compliance with the controller’s obligations under Articles 33 and 34 of Regulation (EU) 2016/679.
SECTION III · FINAL PROVISIONS
Clause 10 · Non-compliance with the Clauses and termination
(a) Without prejudice to any provisions of Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725, in the event that the processor is in breach of its obligations under these Clauses, the controller may instruct the processor to suspend the processing of personal data until the latter complies with these Clauses or the contract is terminated. The processor shall promptly inform the controller in case it is unable to comply with these Clauses, for whatever reason.
(b) The controller shall be entitled to terminate the contract insofar as it concerns processing of personal data in accordance with these Clauses if:
- (1) the processing of personal data by the processor has been suspended by the controller pursuant to point (a) and if compliance with these Clauses is not restored within a reasonable time and in any event within one month following suspension;
- (2) the processor is in substantial or persistent breach of these Clauses or its obligations under Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725;
- (3) the processor fails to comply with a binding decision of a competent court or the competent supervisory authority/ies regarding its obligations pursuant to these Clauses or to Regulation (EU) 2016/679 and/or Regulation (EU) 2018/1725.
(c) The processor shall be entitled to terminate the contract insofar as it concerns processing of personal data under these Clauses where, after having informed the controller that its instructions infringe applicable legal requirements in accordance with Clause 7.1 (b), the controller insists on compliance with the instructions.
(d) Following termination of the contract, the processor shall, at the choice of the controller, delete all personal data processed on behalf of the controller and certify to the controller that it has done so, or, return all the personal data to the controller and delete existing copies unless Union or Member State law requires storage of the personal data. Until the data is deleted or returned, the processor shall continue to ensure compliance with these Clauses.
ANNEX I · List of parties
Controller: the customer for whose workspace this agreement is concluded.
- Name: the customer, identified by its workspace on peckaboo.com
- Address: the address the customer states; peckaboo.com does not ask for it
- Contact person’s name, position and contact details: the owner of the workspace who concludes this agreement, with name and email address, and the other owners of the workspace
- Signature and accession date: the conclusion in the workspace, recorded with the person, the time and the version of this agreement
Processor:
- Name: HYPERLINK Solutions GmbH
- Address: Ringbahnstr. 42, 12099 Berlin, Germany
- Contact person’s name, position and contact details: Andreas Wieser, Managing Director, [email protected]. HYPERLINK Solutions GmbH has not appointed a data protection officer.
- Signature and accession date: the provision of this agreement in peckaboo.com, effective upon its conclusion by the controller
ANNEX II · Description of the processing
Categories of data subjects whose personal data is processed: persons whose login, name or initials appear in the address of a connected instance or in the names of its repositories, branches, workflows or steps, typically developers and owners of the controller's repositories.
Categories of personal data processed: the address of each connected instance and the token of its metrics endpoint; the full names of repositories with their owner, and the names of branches, workflows and steps, as Woodpecker CI writes them into its metrics; the status, number, duration and failures of runs and steps with their times; the availability, version and restarts of the instance; the alerts derived from them.
Sensitive data processed (if applicable) and applied restrictions or safeguards: none.
Nature of the processing: polling /healthz and /version of each connected instance every
minute, and with a token /metrics as well; storing what changed since the last poll; aggregating
into daily values every night; displaying it on the dashboard to the members of the workspace; alerts
by email and in the bell of the application; export at an owner's request; deletion.
Purpose(s) for which the personal data is processed on behalf of the controller: monitoring the controller's Woodpecker CI instances, with their history, availability and alerts.
Duration of the processing: as long as an instance is connected. Raw values are kept for 90 days; after that, daily values are kept until the instance is removed. A removed instance disappears at once, and its history is deleted in the background without delay. Alerts are deleted 90 days after they ended. When the workspace is deleted, the processing ends after a grace period of 30 days, during which an owner can restore it and export its data. Copies in the nightly backup are deleted on its schedule in Annex III. Its periods follow one another, so the last copy is deleted after 2 years, 4 months, 8 weeks and 23 days.
For processing by (sub-)processors: the subject matter, nature and duration are stated for each sub-processor in Annex IV.
ANNEX III · Technical and organizational measures including technical and organizational measures to ensure the security of the data
- Measures of pseudonymization and encryption of personal data: Every connection between a browser and peckaboo.com, and every poll of an instance, runs over TLS; peckaboo.com does not accept an instance without HTTPS. The metrics token is stored encrypted with AES-256 and never shown again once it is saved. Passwords are hashed with Argon2id, and sign-in links and codes are stored only as hashes. The nightly backup is stored as an encrypted archive.
- Measures for ensuring ongoing confidentiality, integrity, availability and resilience of processing systems and services: The data of each workspace is separated from that of every other by row-level security in PostgreSQL, and every query of the application reads only the rows of the workspace it runs in. Every outgoing poll of an instance checks its target itself, refuses private, loopback and metadata addresses, and follows no redirect. A poll takes at most 10 seconds and reads at most 25 MB, and at most two run at once per server. Errors and performance are monitored continuously.
- Measures for ensuring the ability to restore the availability and access to personal data in a timely manner in the event of a physical or technical incident: Every night, a backup of the database is stored with DigitalOcean in Frankfurt, apart from the server. Each copy is kept for 7 days, then one per day for 16 days, one per week for 8 weeks, one per month for 4 months and one per year for 2 years.
- Processes for regularly testing, assessing and evaluating the effectiveness of technical and organizational measures in order to ensure the security of the processing: Every change to peckaboo.com passes an automated check before it is deployed, with tests, among them tests of the separation of the workspaces and of the rights of each role, with static analysis, and with an audit of the dependencies for known vulnerabilities. Dependencies are updated continuously.
- Measures for user identification and authorization: Accounts with a confirmed email address; sign-in with a link, or with a password and a code by email, optionally with a second factor; an email on every sign-in from a new device; an overview of sessions from which other devices can be signed out. In the workspace, the rights of the roles owner, admin, member and viewer apply. Support signs in as an account only with a stated reason, with an entry in the audit log and an email to the account at the end.
- Measures for the protection of data during transmission: TLS for every connection to peckaboo.com and to every instance; email is sent through Amazon SES over TLS.
- Measures for the protection of data during storage: The database runs on the server of the application; the metrics token is encrypted; the separation of the workspaces by row-level security applies in the database itself.
- Measures for ensuring physical security of locations at which personal data are processed: The server is located in a data center of Hetzner Online GmbH, which operates its data centers under ISO/IEC 27001.
- Measures for ensuring events logging: An audit log records who changed what in the workspace and is kept for 365 days; every sign-in is recorded with its time, way, IP address and browser identifier, and kept for 90 days after its last activity.
- Measures for ensuring system configuration, including default configuration: The server is managed through Laravel Forge. Only what passed the automated check is deployed. Credentials and keys are kept only in the environment of the server, never in the code. The default configuration is the safe one: a new instance is connected only over HTTPS and only after a successful check.
- Measures for internal IT and IT security governance and management: The management of HYPERLINK Solutions GmbH is responsible for peckaboo.com. Sub-processors are engaged only under this agreement (Clause 7.7).
- Measures for certification/assurance of processes and products: peckaboo.com is not certified; the automated check of every change assures its quality.
- Measures for ensuring data minimization: peckaboo.com polls only
/healthz,/versionand/metricsand stores only what changed; after 90 days, only daily values are kept. - Measures for ensuring data quality: Values are stored as the server delivers them; a restart of the server is detected, so sums and rates stay correct across it.
- Measures for ensuring limited data retention: the periods in Annex II, which the application enforces itself.
- Measures for ensuring accountability: The conclusion of this agreement is recorded with the time and the version in a tamper-evident ledger, and the audit log of the workspace records who concluded it, as it records the other changes in the workspace.
- Measures for allowing data portability and ensuring erasure: The owners of a workspace can export its data as a JSON file at any time. A removed instance disappears at once, its history is deleted in the background without delay, and a deleted workspace after the grace period of 30 days.
Measures by which the processor assists the controller: The controller answers requests of data subjects itself, with the export and by removing instances; the processor assists on request to [email protected]. The processor notifies the owners of the workspace of a personal data breach by email without undue delay and at the latest 48 hours after becoming aware of it, with the information under Clause 9.2.
ANNEX IV · List of sub-processors
The controller has authorized the use of the following sub-processors:
- Name: Hetzner Online GmbH
- Address: Industriestr. 25, 91710 Gunzenhausen, Germany
- Contact person’s name, position and contact details: data protection, [email protected]
- Description of the processing: running the server on which the application and its database run, as long as peckaboo.com runs there.
- Name: Laravel Holdings Inc. (Laravel Forge)
- Address: 60 Broad Street, 24th Floor, #1559, New York, NY 10004, United States
- Contact person’s name, position and contact details: privacy, [email protected]
- Description of the processing: managing the server and deploying new versions, with access to the server; transfer on the basis of the EU-US Data Privacy Framework.
- Name: Amazon Web Services EMEA SARL (Amazon SES)
- Address: 38 Avenue John F. Kennedy, L-1855 Luxembourg
- Contact person’s name, position and contact details: data protection officer, [email protected]
- Description of the processing: sending the alerts by email, which name the instance and what happened.
- Name: DigitalOcean, LLC
- Address: 105 Edgeview Drive, Ste. 425, Broomfield, CO 80021, United States
- Contact person’s name, position and contact details: legal department, [email protected]
- Description of the processing: storing the nightly backup in the Frankfurt region, on the schedule in Annex III.
- Name: Functional Software, Inc. (Sentry)
- Address: 45 Fremont Street, 8th Floor, San Francisco, CA 94105, United States
- Contact person’s name, position and contact details: compliance, [email protected]
- Description of the processing: error reports of the application, which can contain the address of an instance or the name of a repository, processed in Sentry's EU region in Germany.
- Name: Facade BV (Flare)
- Address: Kruikstraat 22, Box 12, 2018 Antwerp, Belgium
- Contact person’s name, position and contact details: support, [email protected]
- Description of the processing: error reports of the application, which can contain the address of an instance or the name of a repository, stored on servers of DigitalOcean, LLC in the United States; transfer on the basis of the EU-US Data Privacy Framework, under which DigitalOcean states it has self-certified.
- Name: Laravel Holdings Inc. (Nightwatch)
- Address: 60 Broad Street, 24th Floor, #1559, New York, NY 10004, United States
- Contact person’s name, position and contact details: privacy, [email protected]
- Description of the processing: monitoring the performance of the application with the timings of requests, queries and jobs; transfer on the basis of the EU-US Data Privacy Framework.