New Blog Draft

This commit is contained in:
Sarah Jamie Lewis 2023-07-12 12:29:21 -07:00
parent b325ffb20b
commit 356a46ad22
712 changed files with 2916 additions and 2572 deletions

View File

@ -0,0 +1,64 @@
---
title: Cwtch UI Reproducible Builds (Linux)
description: ""
slug: cwtch-ui-reproducible-builds-linux
tags: [cwtch, cwtch-stable, reproducible-builds, bindings, repliqate]
image: /img/devlog1_small.jpg
hide_table_of_contents: false
authors:
- name: Sarah Jamie Lewis
title: Executive Director, Open Privacy Research Society
image_url: /img/sarah.jpg
---
Earlier this year we talked about the changes we have made to make [Cwtch Bindings Reproducible](https://docs.cwtch.im/blog/cwtch-bindings-reproducible).
In this devlog we will talk about how the Cwtch UI are currently built, the changes we have made to Cwtch UI to make future distributions verifiable, and the next steps we will be taking to make all Cwtch builds reproducible.
This will be useful to anyone who is looking to reproduce Cwtch UI builds specifically, and to anyone who wants to start implementing reproducible builds in their own project.
![](/img/devlog1.png)
<!--truncate-->
## Building the Cwtch UI
The official Cwtch UI project uses the FLutter framework. The Cwtch UI deliberately tracks the `stable` channel.
All builds are conducted through the `flutter` tool e.g. `flutter build`. We inject two build flags as part of the official build `VERSION` and `COMMIT_DATE`:
flutter build linux --dart-define BUILD_VER=`cat VERSION` --dart-define BUILD_DATE=`cat COMMIT_DATE`
These flags are defined to be identical to Cwtch Bindings. `VERSION` is the latest git tag: `git describe --tags --abbrev=1` and `COMMIT_DATE` is the date of the latest commit on the branch ``echo `git log -1 --format=%cd --date=format:%G-%m-%d-%H-%M` > COMMIT_DATE``
All Cwtch UI builds also depend on two external dependencies not managed directly by the flutter project: Tor (implicit as part of the fetchTor scripts) and libCwtch (defined in `LIBCWTCH-GO.version`, and fetched via the fetch-libcwtch scripts).
The binaries are downloaded via their respective scripts prior to the build, and managed via a separate update process.
## Changes we made for reproducible builds
For reproducible linux builds we had to modify the generated `linux/CMakeLists.txt` file to include the following compiler and linker flags:
* `-fno-ident` - suppresses compiler identifying information from compiled artifacts. Without this small changes in compiler versions will result in different binaries.
* `--hash-style=gnu` - asserts a standard hashing scheme to use across all compiled artifacts. Without this compilers that have been compiled with different default schemes will produce different artifacts
* `--build-id=none` - suppresses build id generation. Without this each compiled artifact will have a section of effectively randomized data.
We also define a new [link script](https://git.openprivacy.ca/cwtch.im/cwtch-ui/src/commit/3148a8e0642e51bc59d9eb00ca2b319a7097285a/elf_x86_64.x) that differs from the default by removing all `.comment` sections from object files. We do this because the linking process links in non-project artifacts like `crtbeginS.o` which, in most systems, us compiled with a `.comment` section (the default linking script already removes the `.note.gnu*` sections.
## Help us go further!
We couldn't do what we do without all the wonderful community support we get, from [one-off donations](https://openprivacy.ca/donate) to [recurring support via Patreon](https://www.patreon.com/openprivacy).
If you want to see us move faster on some of these goals and are in a position to, please [donate](https://openprivacy.ca/donate). If you happen to be at a company that wants to do more for the community and this aligns, please consider donating or sponsoring a developer.
Donations of **$5 or more** can opt to receive stickers as a thank-you gift!
For more information about donating to Open Privacy and claiming a thank you gift [please visit the Open Privacy Donate page](https://openprivacy.ca/donate/).
![A Photo of Cwtch Stickers](/img/stickers-new.jpg)
## Stay up to date!
This is not all we have planned for the upcoming months. Subscribe to our [RSS feed](/blog/rss.xml), [Atom feed](/blog/atom.xml), or [JSON feed](/blog/feed.json) to stay up to date, and get the latest on, all aspects of Cwtch development.

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3080],{6502:s=>{s.exports=JSON.parse('{"label":"bindings","permalink":"/blog/tags/bindings","allTagsPath":"/blog/tags","count":4}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3080],{6502:s=>{s.exports=JSON.parse('{"label":"bindings","permalink":"/blog/tags/bindings","allTagsPath":"/blog/tags","count":5}')}}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1174],{3170:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/blog/tags/cwtch/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1174],{3170:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/blog/tags/cwtch/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[4704],{4674:a=>{a.exports=JSON.parse('{"label":"cwtch","permalink":"/blog/tags/cwtch","allTagsPath":"/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[4704],{4674:a=>{a.exports=JSON.parse('{"label":"cwtch","permalink":"/blog/tags/cwtch","allTagsPath":"/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8793],{4990:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":17,"previousPage":"/blog/tags/cwtch","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8793],{4990:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":18,"previousPage":"/blog/tags/cwtch","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6971],{3157:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/bindings","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6971],{3157:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/bindings","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1598],{5814:a=>{a.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","allTagsPath":"/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1598],{5814:a=>{a.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","allTagsPath":"/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6946],{9048:a=>{a.exports=JSON.parse('{"label":"cwtch","permalink":"/blog/tags/cwtch","allTagsPath":"/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6946],{9048:a=>{a.exports=JSON.parse('{"label":"cwtch","permalink":"/blog/tags/cwtch","allTagsPath":"/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[198],{4978:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch-stable/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":17,"previousPage":"/blog/tags/cwtch-stable","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[198],{4978:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch-stable/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":18,"previousPage":"/blog/tags/cwtch-stable","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8017],{2306:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/reproducible-builds","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8017],{2306:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/reproducible-builds","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[9072],{6271:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/repliqate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[9072],{6271:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/repliqate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -0,0 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2535],{5641:t=>{t.exports=JSON.parse('{"title":"Recent Logs","items":[{"title":"Cwtch UI Reproducible Builds (Linux)","permalink":"/blog/cwtch-ui-reproducible-builds-linux"},{"title":"Cwtch Stable Roadmap Update","permalink":"/blog/cwtch-stable-roadmap-update-june"},{"title":"Cwtch Beta 1.12","permalink":"/blog/cwtch-nightly-1-12"},{"title":"New Cwtch Nightly (v1.11.0-74-g0406)","permalink":"/blog/cwtch-nightly-v.11-74"},{"title":"Cwtch Developer Documentation, Cwtchbot v0.1.0 and New Nightly.","permalink":"/blog/cwtch-developer-documentation"},{"title":"Availability Status and Profile Attributes","permalink":"/blog/availability-status-profile-attributes"},{"title":"Cwtch Stable Roadmap Update","permalink":"/blog/cwtch-stable-roadmap-update"},{"title":"Cwtch Beta 1.11","permalink":"/blog/cwtch-nightly-1-11"},{"title":"Updates to Cwtch Documentation","permalink":"/blog/cwtch-documentation"},{"title":"Compile-time Optional Application Experiments (Autobindings)","permalink":"/blog/autobindings-ii"},{"title":"Autogenerating Cwtch Bindings","permalink":"/blog/autobindings"},{"title":"Notes on Cwtch UI Testing (II)","permalink":"/blog/cwtch-testing-ii"},{"title":"Making Cwtch Android Bindings Reproducible","permalink":"/blog/cwtch-android-reproducibility"},{"title":"Notes on Cwtch UI Testing","permalink":"/blog/cwtch-testing-i"},{"title":"Cwtch UI Platform Support","permalink":"/blog/cwtch-platform-support"},{"title":"Making Cwtch Bindings Reproducible","permalink":"/blog/cwtch-bindings-reproducible"},{"title":"Cwtch Stable API Design","permalink":"/blog/cwtch-stable-api-design"},{"title":"Path to Cwtch Stable","permalink":"/blog/path-to-cwtch-stable"}]}')}}]);

View File

@ -1 +0,0 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2535],{5641:t=>{t.exports=JSON.parse('{"title":"Recent Logs","items":[{"title":"Cwtch Stable Roadmap Update","permalink":"/blog/cwtch-stable-roadmap-update-june"},{"title":"Cwtch Beta 1.12","permalink":"/blog/cwtch-nightly-1-12"},{"title":"New Cwtch Nightly (v1.11.0-74-g0406)","permalink":"/blog/cwtch-nightly-v.11-74"},{"title":"Cwtch Developer Documentation, Cwtchbot v0.1.0 and New Nightly.","permalink":"/blog/cwtch-developer-documentation"},{"title":"Availability Status and Profile Attributes","permalink":"/blog/availability-status-profile-attributes"},{"title":"Cwtch Stable Roadmap Update","permalink":"/blog/cwtch-stable-roadmap-update"},{"title":"Cwtch Beta 1.11","permalink":"/blog/cwtch-nightly-1-11"},{"title":"Updates to Cwtch Documentation","permalink":"/blog/cwtch-documentation"},{"title":"Compile-time Optional Application Experiments (Autobindings)","permalink":"/blog/autobindings-ii"},{"title":"Autogenerating Cwtch Bindings","permalink":"/blog/autobindings"},{"title":"Notes on Cwtch UI Testing (II)","permalink":"/blog/cwtch-testing-ii"},{"title":"Making Cwtch Android Bindings Reproducible","permalink":"/blog/cwtch-android-reproducibility"},{"title":"Notes on Cwtch UI Testing","permalink":"/blog/cwtch-testing-i"},{"title":"Cwtch UI Platform Support","permalink":"/blog/cwtch-platform-support"},{"title":"Making Cwtch Bindings Reproducible","permalink":"/blog/cwtch-bindings-reproducible"},{"title":"Cwtch Stable API Design","permalink":"/blog/cwtch-stable-api-design"},{"title":"Path to Cwtch Stable","permalink":"/blog/path-to-cwtch-stable"}]}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1],{2638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":17,"previousPage":"/blog","blogDescription":"The latest updated on Cwtch development.","blogTitle":"Development Log"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1],{2638:e=>{e.exports=JSON.parse('{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":18,"previousPage":"/blog","blogDescription":"The latest updated on Cwtch development.","blogTitle":"Development Log"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1367],{8595:e=>{e.exports=JSON.parse('{"label":"repliqate","permalink":"/blog/tags/repliqate","allTagsPath":"/blog/tags","count":2}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1367],{8595:e=>{e.exports=JSON.parse('{"label":"repliqate","permalink":"/blog/tags/repliqate","allTagsPath":"/blog/tags","count":3}')}}]);

View File

@ -1 +0,0 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1713],{3457:l=>{l.exports=JSON.parse('[{"label":"cwtch","permalink":"/blog/tags/cwtch","count":17},{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","count":17},{"label":"planning","permalink":"/blog/tags/planning","count":4},{"label":"release","permalink":"/blog/tags/release","count":2},{"label":"developer-documentation","permalink":"/blog/tags/developer-documentation","count":2},{"label":"nightly","permalink":"/blog/tags/nightly","count":1},{"label":"documentation","permalink":"/blog/tags/documentation","count":1},{"label":"security-handbook","permalink":"/blog/tags/security-handbook","count":1},{"label":"bindings","permalink":"/blog/tags/bindings","count":4},{"label":"autobindings","permalink":"/blog/tags/autobindings","count":2},{"label":"libcwtch","permalink":"/blog/tags/libcwtch","count":2},{"label":"support","permalink":"/blog/tags/support","count":3},{"label":"testing","permalink":"/blog/tags/testing","count":2},{"label":"reproducible-builds","permalink":"/blog/tags/reproducible-builds","count":2},{"label":"repliqate","permalink":"/blog/tags/repliqate","count":2},{"label":"api","permalink":"/blog/tags/api","count":1}]')}}]);

View File

@ -0,0 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1713],{3457:l=>{l.exports=JSON.parse('[{"label":"cwtch","permalink":"/blog/tags/cwtch","count":18},{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","count":18},{"label":"reproducible-builds","permalink":"/blog/tags/reproducible-builds","count":3},{"label":"bindings","permalink":"/blog/tags/bindings","count":5},{"label":"repliqate","permalink":"/blog/tags/repliqate","count":3},{"label":"planning","permalink":"/blog/tags/planning","count":4},{"label":"release","permalink":"/blog/tags/release","count":2},{"label":"developer-documentation","permalink":"/blog/tags/developer-documentation","count":2},{"label":"nightly","permalink":"/blog/tags/nightly","count":1},{"label":"documentation","permalink":"/blog/tags/documentation","count":1},{"label":"security-handbook","permalink":"/blog/tags/security-handbook","count":1},{"label":"autobindings","permalink":"/blog/tags/autobindings","count":2},{"label":"libcwtch","permalink":"/blog/tags/libcwtch","count":2},{"label":"support","permalink":"/blog/tags/support","count":3},{"label":"testing","permalink":"/blog/tags/testing","count":2},{"label":"api","permalink":"/blog/tags/api","count":1}]')}}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[10],{1892:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch-stable","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/blog/tags/cwtch-stable/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[10],{1892:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cwtch-stable","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/blog/tags/cwtch-stable/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/blog/page/2","blogDescription":"The latest updated on Cwtch development.","blogTitle":"Development Log"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/blog/page/2","blogDescription":"The latest updated on Cwtch development.","blogTitle":"Development Log"}')}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3213],{3260:a=>{a.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","allTagsPath":"/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3213],{3260:a=>{a.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/blog/tags/cwtch-stable","allTagsPath":"/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8292],{4572:e=>{e.exports=JSON.parse('{"label":"reproducible-builds","permalink":"/blog/tags/reproducible-builds","allTagsPath":"/blog/tags","count":2}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8292],{4572:e=>{e.exports=JSON.parse('{"label":"reproducible-builds","permalink":"/blog/tags/reproducible-builds","allTagsPath":"/blog/tags","count":3}')}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8581],{4437:s=>{s.exports=JSON.parse('{"label":"bindings","permalink":"/de/blog/tags/bindings","allTagsPath":"/de/blog/tags","count":4}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8581],{4437:s=>{s.exports=JSON.parse('{"label":"bindings","permalink":"/de/blog/tags/bindings","allTagsPath":"/de/blog/tags","count":5}')}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2833],{6317:e=>{e.exports=JSON.parse('{"label":"cwtch","permalink":"/de/blog/tags/cwtch","allTagsPath":"/de/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2833],{6317:e=>{e.exports=JSON.parse('{"label":"cwtch","permalink":"/de/blog/tags/cwtch","allTagsPath":"/de/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1118],{3099:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/repliqate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[1118],{3099:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/repliqate","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[7970],{9712:e=>{e.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/de/blog/tags/cwtch-stable","allTagsPath":"/de/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[7970],{9712:e=>{e.exports=JSON.parse('{"label":"cwtch-stable","permalink":"/de/blog/tags/cwtch-stable","allTagsPath":"/de/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3727],{9074:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":17,"previousPage":"/de/blog","blogDescription":"Die neuste Aktualisierung der Cwtch Entwicklung.","blogTitle":"Entwicklungsprotokoll"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[3727],{9074:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":18,"previousPage":"/de/blog","blogDescription":"Die neuste Aktualisierung der Cwtch Entwicklung.","blogTitle":"Entwicklungsprotokoll"}')}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[7495],{9212:e=>{e.exports=JSON.parse('{"permalink":"/de/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/de/blog/page/2","blogDescription":"Die neuste Aktualisierung der Cwtch Entwicklung.","blogTitle":"Entwicklungsprotokoll"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[7495],{9212:e=>{e.exports=JSON.parse('{"permalink":"/de/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/de/blog/page/2","blogDescription":"Die neuste Aktualisierung der Cwtch Entwicklung.","blogTitle":"Entwicklungsprotokoll"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6862],{2511:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch-stable","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/de/blog/tags/cwtch-stable/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6862],{2511:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch-stable","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/de/blog/tags/cwtch-stable/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8959],{2103:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch-stable/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":17,"previousPage":"/de/blog/tags/cwtch-stable","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[8959],{2103:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch-stable/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":18,"previousPage":"/de/blog/tags/cwtch-stable","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +0,0 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[5045],{8415:e=>{e.exports=JSON.parse('[{"label":"cwtch","permalink":"/de/blog/tags/cwtch","count":17},{"label":"cwtch-stable","permalink":"/de/blog/tags/cwtch-stable","count":17},{"label":"planning","permalink":"/de/blog/tags/planning","count":4},{"label":"release","permalink":"/de/blog/tags/release","count":2},{"label":"developer-documentation","permalink":"/de/blog/tags/developer-documentation","count":2},{"label":"nightly","permalink":"/de/blog/tags/nightly","count":1},{"label":"documentation","permalink":"/de/blog/tags/documentation","count":1},{"label":"security-handbook","permalink":"/de/blog/tags/security-handbook","count":1},{"label":"bindings","permalink":"/de/blog/tags/bindings","count":4},{"label":"autobindings","permalink":"/de/blog/tags/autobindings","count":2},{"label":"libcwtch","permalink":"/de/blog/tags/libcwtch","count":2},{"label":"support","permalink":"/de/blog/tags/support","count":3},{"label":"testing","permalink":"/de/blog/tags/testing","count":2},{"label":"reproducible-builds","permalink":"/de/blog/tags/reproducible-builds","count":2},{"label":"repliqate","permalink":"/de/blog/tags/repliqate","count":2},{"label":"api","permalink":"/de/blog/tags/api","count":1}]')}}]);

View File

@ -0,0 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[5045],{8415:e=>{e.exports=JSON.parse('[{"label":"cwtch","permalink":"/de/blog/tags/cwtch","count":18},{"label":"cwtch-stable","permalink":"/de/blog/tags/cwtch-stable","count":18},{"label":"reproducible-builds","permalink":"/de/blog/tags/reproducible-builds","count":3},{"label":"bindings","permalink":"/de/blog/tags/bindings","count":5},{"label":"repliqate","permalink":"/de/blog/tags/repliqate","count":3},{"label":"planning","permalink":"/de/blog/tags/planning","count":4},{"label":"release","permalink":"/de/blog/tags/release","count":2},{"label":"developer-documentation","permalink":"/de/blog/tags/developer-documentation","count":2},{"label":"nightly","permalink":"/de/blog/tags/nightly","count":1},{"label":"documentation","permalink":"/de/blog/tags/documentation","count":1},{"label":"security-handbook","permalink":"/de/blog/tags/security-handbook","count":1},{"label":"autobindings","permalink":"/de/blog/tags/autobindings","count":2},{"label":"libcwtch","permalink":"/de/blog/tags/libcwtch","count":2},{"label":"support","permalink":"/de/blog/tags/support","count":3},{"label":"testing","permalink":"/de/blog/tags/testing","count":2},{"label":"api","permalink":"/de/blog/tags/api","count":1}]')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[4814],{3986:e=>{e.exports=JSON.parse('{"label":"cwtch","permalink":"/de/blog/tags/cwtch","allTagsPath":"/de/blog/tags","count":17}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[4814],{3986:e=>{e.exports=JSON.parse('{"label":"cwtch","permalink":"/de/blog/tags/cwtch","allTagsPath":"/de/blog/tags","count":18}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[5508],{3783:e=>{e.exports=JSON.parse('{"label":"reproducible-builds","permalink":"/de/blog/tags/reproducible-builds","allTagsPath":"/de/blog/tags","count":2}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[5508],{3783:e=>{e.exports=JSON.parse('{"label":"reproducible-builds","permalink":"/de/blog/tags/reproducible-builds","allTagsPath":"/de/blog/tags","count":3}')}}]);

View File

@ -0,0 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2535],{5641:t=>{t.exports=JSON.parse('{"title":"Neueste Logs","items":[{"title":"Cwtch UI Reproducible Builds (Linux)","permalink":"/de/blog/cwtch-ui-reproducible-builds-linux"},{"title":"Cwtch Stable Roadmap Update","permalink":"/de/blog/cwtch-stable-roadmap-update-june"},{"title":"Cwtch Beta 1.12","permalink":"/de/blog/cwtch-nightly-1-12"},{"title":"New Cwtch Nightly (v1.11.0-74-g0406)","permalink":"/de/blog/cwtch-nightly-v.11-74"},{"title":"Cwtch Developer Documentation, Cwtchbot v0.1.0 and New Nightly.","permalink":"/de/blog/cwtch-developer-documentation"},{"title":"Availability Status and Profile Attributes","permalink":"/de/blog/availability-status-profile-attributes"},{"title":"Cwtch Stable Roadmap Update","permalink":"/de/blog/cwtch-stable-roadmap-update"},{"title":"Cwtch Beta 1.11","permalink":"/de/blog/cwtch-nightly-1-11"},{"title":"Updates to Cwtch Documentation","permalink":"/de/blog/cwtch-documentation"},{"title":"Compile-time Optional Application Experiments (Autobindings)","permalink":"/de/blog/autobindings-ii"},{"title":"Autogenerating Cwtch Bindings","permalink":"/de/blog/autobindings"},{"title":"Notes on Cwtch UI Testing (II)","permalink":"/de/blog/cwtch-testing-ii"},{"title":"Making Cwtch Android Bindings Reproducible","permalink":"/de/blog/cwtch-android-reproducibility"},{"title":"Notes on Cwtch UI Testing","permalink":"/de/blog/cwtch-testing-i"},{"title":"Cwtch UI Platform Support","permalink":"/de/blog/cwtch-platform-support"},{"title":"Making Cwtch Bindings Reproducible","permalink":"/de/blog/cwtch-bindings-reproducible"},{"title":"Cwtch Stable API Design","permalink":"/de/blog/cwtch-stable-api-design"},{"title":"Path to Cwtch Stable","permalink":"/de/blog/path-to-cwtch-stable"}]}')}}]);

View File

@ -1 +0,0 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2535],{5641:t=>{t.exports=JSON.parse('{"title":"Neueste Logs","items":[{"title":"Cwtch Stable Roadmap Update","permalink":"/de/blog/cwtch-stable-roadmap-update-june"},{"title":"Cwtch Beta 1.12","permalink":"/de/blog/cwtch-nightly-1-12"},{"title":"New Cwtch Nightly (v1.11.0-74-g0406)","permalink":"/de/blog/cwtch-nightly-v.11-74"},{"title":"Cwtch Developer Documentation, Cwtchbot v0.1.0 and New Nightly.","permalink":"/de/blog/cwtch-developer-documentation"},{"title":"Availability Status and Profile Attributes","permalink":"/de/blog/availability-status-profile-attributes"},{"title":"Cwtch Stable Roadmap Update","permalink":"/de/blog/cwtch-stable-roadmap-update"},{"title":"Cwtch Beta 1.11","permalink":"/de/blog/cwtch-nightly-1-11"},{"title":"Updates to Cwtch Documentation","permalink":"/de/blog/cwtch-documentation"},{"title":"Compile-time Optional Application Experiments (Autobindings)","permalink":"/de/blog/autobindings-ii"},{"title":"Autogenerating Cwtch Bindings","permalink":"/de/blog/autobindings"},{"title":"Notes on Cwtch UI Testing (II)","permalink":"/de/blog/cwtch-testing-ii"},{"title":"Making Cwtch Android Bindings Reproducible","permalink":"/de/blog/cwtch-android-reproducibility"},{"title":"Notes on Cwtch UI Testing","permalink":"/de/blog/cwtch-testing-i"},{"title":"Cwtch UI Platform Support","permalink":"/de/blog/cwtch-platform-support"},{"title":"Making Cwtch Bindings Reproducible","permalink":"/de/blog/cwtch-bindings-reproducible"},{"title":"Cwtch Stable API Design","permalink":"/de/blog/cwtch-stable-api-design"},{"title":"Path to Cwtch Stable","permalink":"/de/blog/path-to-cwtch-stable"}]}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[9178],{7186:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch","page":1,"postsPerPage":10,"totalPages":2,"totalCount":17,"nextPage":"/de/blog/tags/cwtch/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[9178],{7186:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/cwtch","page":1,"postsPerPage":10,"totalPages":2,"totalCount":18,"nextPage":"/de/blog/tags/cwtch/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]);

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6900],{4444:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/bindings","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[6900],{4444:e=>{e.exports=JSON.parse('{"permalink":"/de/blog/tags/bindings","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2849],{8263:e=>{e.exports=JSON.parse('{"label":"repliqate","permalink":"/de/blog/tags/repliqate","allTagsPath":"/de/blog/tags","count":2}')}}]);
"use strict";(self.webpackChunkuser_handbook=self.webpackChunkuser_handbook||[]).push([[2849],{8263:e=>{e.exports=JSON.parse('{"label":"repliqate","permalink":"/de/blog/tags/repliqate","allTagsPath":"/de/blog/tags","count":3}')}}]);

Some files were not shown because too many files have changed in this diff Show More