Skip to content

Rebase gui-qml on bitcoin/bitcoin, include qt6 and cmake #472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6,401 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
6401 commits
Select commit Hold shift + click to select a range
ecaa1d7
qml: add CaretRightButton component
jarolrod Feb 1, 2023
8e75223
qml: use CaretRightButton, bind to Setting state color
jarolrod Feb 1, 2023
94024cf
qml: set BlockClock mouseArea cursorShape to pointing cursor
jarolrod Feb 6, 2023
d357478
qml: capitalize the BlockClock component's state names
jarolrod Feb 6, 2023
531cb43
qml: move BlockClock confirmation colors into Theme.qml
jarolrod Feb 6, 2023
f09b368
qml: set and expose the current network name from the ChainModel
jarolrod Feb 7, 2023
15a6aae
qml: introduce amber color to our Theme file
jarolrod Feb 7, 2023
7082fba
qml: introduce NetworkIndicator component
jarolrod Feb 7, 2023
c3e67fd
qml: use NetworkIndicator, change layout of NodeRunner to accommodate
jarolrod Feb 7, 2023
3ccf30a
qml: replace the current export icon with the export-outline icon
jarolrod Jan 31, 2023
e398774
qml: make external links follow the specs in the design file
jarolrod Jan 31, 2023
de6dfbe
qml: fix sizing of info and gear icon used in navbar buttons
jarolrod Feb 12, 2023
66da08e
qml: allow to specify background for icon button in NavButton
jarolrod Feb 12, 2023
7080e07
qml: allow to specify icon color in icon button for NavButton
jarolrod Feb 12, 2023
57d360a
qml: correct color & add background for OnboardingCover info icon
jarolrod Feb 12, 2023
699a272
qml: fix NetworkIndicator font size and padding
jarolrod Feb 10, 2023
c6ef36e
qml: fix CaretRightButton padding
jarolrod Feb 9, 2023
9707175
qml: Add Disabled states in Setting and ValueInput
jarolrod Feb 1, 2023
a9abf41
qml: disable prune target setting when prune is disabled
jarolrod Feb 1, 2023
369b700
qml: wire up logic for block clock connecting state
jarolrod Feb 9, 2023
65deb12
qml: fix NavButton padding
jarolrod Feb 12, 2023
7b870ee
qml: remove rightMargin value for element placed on the right of navbar
jarolrod Feb 12, 2023
c7c5c4f
qml: introduce Separator component
jarolrod Feb 14, 2023
f3d6a31
qml: use Separator component to separate settings
jarolrod Feb 14, 2023
aaacdd5
qml: Make ValueInput a TextInput instead of a TextEdit
jarolrod Feb 10, 2023
f385f3e
qml: Give up focus on ValueInput when editing finished
jarolrod Feb 10, 2023
bf84646
qml, doc: Temporarily remove links to CI build artifacts
hebasto Feb 13, 2023
eee015e
qml, doc: Re-add links to CI build artifacts
hebasto Feb 13, 2023
e1b95ea
qml: Introduce the Peers page
johnny9 Feb 13, 2023
ab994e2
qml: add Looking for peers footer to Peers
johnny9 Feb 15, 2023
2dc6a81
qml: introduce proxy setting components and pages
jarolrod Jan 25, 2023
d9bca6c
qml: rework SettingsConnection page to include Proxy settings
jarolrod Jan 25, 2023
e49aec3
qml: remove redundant MouseAreas from controls that are Buttons
jarolrod Feb 21, 2023
11d2db8
qml: add EMPTY state to ValueInput
jarolrod Feb 10, 2023
cee4c51
qml: introduce CoreText control
johnny9 Feb 22, 2023
ca37e5d
qml: inset NavButtons 4px from borders to give space for focus outline
jarolrod Feb 14, 2023
48168b7
qml: Introduce FocusBorder component
jarolrod Feb 17, 2023
165128d
qml: add FocusBorder to Focus-able components
jarolrod Feb 14, 2023
b23bf6a
qml: use Estimating as the default string for remainingSyncTime
johnny9 Feb 27, 2023
506d295
qml: fix capitalization on BlockClock Please wait string
johnny9 Feb 28, 2023
4f0e886
qml: Add sorting bar to Peers page
johnny9 Feb 18, 2023
dd2f3f4
qml: introduce the shutdown icon
johnny9 Feb 19, 2023
82efed2
qml: introduce the Shutdown page
johnny9 Jan 25, 2023
2f0257f
qml: only show Onboarding if settings/conf file is missing
johnny9 Feb 5, 2023
b9e3913
qml: format BlockClock progress percentage according to the design file
jarolrod Feb 28, 2023
9cd3d91
qml: Allow to specify subtext color
jarolrod Feb 11, 2023
869aa0d
qml: Allow to show an error text below Setting header text
jarolrod Feb 11, 2023
5843319
qml: Expose minimum and maximum valid Script Verif Threads values
jarolrod Feb 22, 2023
ff913b8
qml: Expose minimum and maximum valid dbcache values
jarolrod Feb 22, 2023
18597ad
qml: Validate input for dbcache, threads, and prune target settings
jarolrod Feb 11, 2023
2c638fb
qml: move setting of default prune setting into StorageOptions
jarolrod Feb 2, 2023
e3efc4e
qml: expose currently loaded detailItem in InformationPage
jarolrod Feb 2, 2023
5f87028
qml: Introduce Storage OptionButton that represents custom prune target
jarolrod Feb 2, 2023
173e248
qml: Only "click" setting if released within its MouseArea
johnny9 Mar 6, 2023
1cd5776
qml: Use Flickable instead of Flow for Peers ToggleButtons
johnny9 Mar 13, 2023
ccd700a
qml: Add connection animation to block clock
jarolrod Feb 13, 2023
4eba1f8
qml: Add timer to control BlockClockDial connecting animation
johnny9 Feb 20, 2023
63f46da
qml: add "grow" animation to the blockclockdial
johnny9 Mar 5, 2023
559eec6
qml: add easing to BlockClockDial grow animations
johnny9 Mar 10, 2023
a39cddd
qml: fix std::bad_optional_access in ChainModel
johnny9 Mar 9, 2023
d80b91f
qml: remove unnecessary line breaks from Onboarding pages
johnny9 Mar 7, 2023
1bd6cf1
qml: show onboarding if user has passed -resetguisettings
jarolrod Mar 13, 2023
afb16be
qml: add ability to get total received and sent bytes from NodeModel
jarolrod Mar 10, 2023
d240962
qml: allow to specify the background radius in ToggleButton
jarolrod Mar 13, 2023
04a6f15
qml: setup NetworkTrafficTower
jarolrod Mar 10, 2023
58b8b1d
qml: introduce and register LineGraph control
jarolrod Mar 10, 2023
a420312
qml: introduce NetworkTrafficGraph component
jarolrod Mar 15, 2023
7130bc3
qml: introduce TotalBytesIndicator component
jarolrod Mar 15, 2023
a557526
qml: Introduce Network Traffic node page
jarolrod Mar 10, 2023
9827bc7
qml: expose assumed blockchain and chainstate size as to qml
jarolrod Mar 1, 2023
3018b14
qml: smart storage values based on assumed chain and chainstate size
jarolrod Mar 1, 2023
770903f
qml: fix TotalBytesIndicator Text
jarolrod Mar 15, 2023
4f6c7d7
qml: consistent color animation
jarolrod Mar 2, 2023
98d25da
qml: add requestShutdown method to NodeModel
johnny9 Mar 25, 2023
f94b1d2
qml: handle Android Back button presses
johnny9 Mar 25, 2023
ddcdfd2
qml: stop the peers indicator animation when paused
johnny9 Mar 29, 2023
e719bda
qml: reintroduce QtQuickControls1 as a dependency
hebasto Feb 4, 2023
1c39a19
qml: import QmlSettingsPlugin
johnny9 Feb 8, 2023
744371c
qml: setup QSettings registration
jarolrod Mar 31, 2023
f754da6
qml: remember window geometry
jarolrod Mar 31, 2023
4863db6
qml: remove broken implicitHeight on InformationPage
johnny9 Apr 10, 2023
603d592
android: patch getDrawable in QtActivityDelegate.java
johnny9 Apr 6, 2023
c94e3dc
qml: fix width/height binding loop in Network Traffic page
jarolrod Apr 21, 2023
6f71b59
qml: fix un-initialized paused value in peers page PeersIndicator
jarolrod Apr 21, 2023
a457948
qml: fix "Unable to assign [undefined] to int" warning on peers page
jarolrod Apr 21, 2023
81c16e0
qml, doc: Add `qml-module-qt-labs-settings` to runtime dependencies
hebasto Apr 21, 2023
9bb26a1
android: configure toolchain path for libc++ based on arch
johnny9 Apr 14, 2023
630f065
qml: remember network traffic graph scale
jarolrod Apr 21, 2023
b387581
qml: add proper versioning to About page
jarolrod Apr 22, 2023
0ebd0f7
qml: move backend models into models directory
jarolrod May 26, 2023
5125a70
qml: add missing topMargin to Navigation Bar middle detail
jarolrod May 26, 2023
54d230d
qml: marry BlockClock and NetworkIndicator
jarolrod Mar 29, 2023
92891b6
qml: allow to customize blockclockdial's pen width
jarolrod Mar 29, 2023
314efc7
qml: allow to resize PeersIndicator component
jarolrod Mar 29, 2023
edaac58
qml: introduce new bitcoin-circle icon and in larger dimensions
jarolrod Mar 29, 2023
d5caea5
qml: set BlockClock size values as a ratio of the parent width & height
jarolrod Mar 29, 2023
140a887
qml: allow to set blockclockdial scale
jarolrod Mar 31, 2023
ab4fe2c
qml: remember blockclockdial scale factor
jarolrod Mar 31, 2023
4bfdae4
qml: introduce ThemeSettings page
jarolrod Mar 31, 2023
a020555
qml: allow to load an image in an OptionButton
jarolrod Apr 23, 2023
676194d
qml: introduce block clock display settings images
jarolrod Apr 23, 2023
7f2df5c
qml: introduce Block Clock display mode settings page
jarolrod Mar 31, 2023
a387443
qml: introduce Display Settings page
jarolrod Mar 31, 2023
1f746ab
qml: don't use hover effects when on mobile
johnny9 Mar 14, 2023
e79b615
qml: remove setting link to developer documentation
jarolrod May 29, 2023
becf7a7
android: use node model state to update notification
johnny9 Apr 23, 2023
662d26d
qml: setup AppMode in initerrormessage
jarolrod Jun 3, 2023
54ae34d
qml: add looping animation to Estimating state
jarolrod Apr 19, 2023
4cadad0
qml: set implicitHeight on InformationPage
johnny9 Jul 4, 2023
4cc1f32
qml: make entire peers page scrollable
jarolrod Mar 15, 2023
4a4e114
qml: add page title to peers page & update description
jarolrod Apr 20, 2023
6efec1d
qml: make entire peers page scrollable
jarolrod Mar 15, 2023
3cddeff
qml: add page title to peers page & update description
jarolrod Apr 20, 2023
6efa79f
qml: allow to configure when to show the header text in header control
jarolrod Jun 4, 2023
3f5e053
qml: standardize settings page titles to the navbar
jarolrod Jun 4, 2023
2883ca8
qml: add Icon control
promag Aug 23, 2023
d1f13c9
qml: use Icon control
promag Aug 23, 2023
3a89a12
qml: drop unused last property from Setting
promag Aug 25, 2023
9d67d0e
net: Notify about connection number by type
hebasto Jun 1, 2022
39bdf9d
qml, build: Update PE_ALLOWED_LIBRARIES for Qt 5.15.2
hebasto Dec 24, 2021
163867a
build, qt: Enable OpenGL for Windows static builds
hebasto Jun 3, 2022
83f47ae
ci, qml: Add required Qt Quick dev packages
hebasto Aug 29, 2023
d36b3ae
Adjust code according to changes in the main repository
hebasto Aug 29, 2023
48333cf
Fix `modernize-use-default-member-init` clang-tidy warnings
hebasto Aug 30, 2023
720f0c9
ci: Disable the ARM task temporarily
hebasto Aug 30, 2023
30f0f65
qml: disable CaretRightButton
promag Aug 23, 2023
68380ee
qml: rename to CaretRightIcon
promag Aug 23, 2023
d8a65c6
Updating install doc for Debian-based distros
pablomartin4btc Jul 7, 2023
c714103
ci, gha: Build macOS and Windows artifacts
hebasto Sep 9, 2023
b6bea56
ci, gha: Build Android artifacts
hebasto Oct 25, 2023
9920840
qml: add NavigationBar2
promag Aug 27, 2023
cc351cf
qml: use NavigationBar2 in Peers
promag Aug 27, 2023
21ba3be
qml: use NavigationBar2 in NodeRunner
promag Aug 27, 2023
0a22105
qml: use NavigationBar2 in SettingsTheme
promag Aug 27, 2023
bebadea
qml: use NavigationBar2 in SettingsProxy
promag Sep 12, 2023
4666d22
qml: use NavigationBar2 in NodeSettings
promag Sep 12, 2023
a37fdf6
qml: use NavigationBar2 in SettingsDisplay
promag Sep 12, 2023
7aeabdd
qml: use NavigationBar2 in SettingsBlockClockDisplayMode
promag Sep 12, 2023
0a577ff
doc: update documentation around CI artifacts
jarolrod Nov 10, 2023
753d120
qml: add interactive color states to peers table
jarolrod Nov 10, 2023
babfb9f
qml: remember user's peer sort preference
jarolrod Nov 10, 2023
f52db6a
qml: dont call update during paint
promag Nov 30, 2023
748489a
qml: improve peer delegate
promag Nov 30, 2023
5f932cf
qml: change peer delegate layout
promag Dec 1, 2023
d7ed451
qml: fix the BlockClock's minimum size
D33r-Gee Dec 22, 2023
0603f94
qml: Fix possible QSettings init failure on startup
pablomartin4btc Aug 31, 2023
338692e
qml: remove implicitWidth from Continue & OutlineButton
jarolrod Jun 3, 2023
f61a5ea
qml: introduce external link warning popup
jarolrod Jun 3, 2023
0c001a8
qml, component: correct ProxySettings behaviour
pablomartin4btc Mar 22, 2024
ecafd62
qml, control: new IPAddressValueInput
pablomartin4btc Mar 22, 2024
446fdd4
qml: Add walletEnabled property to AppMode model
johnny9 Mar 27, 2024
1a59cdf
qml: Introduce gear-outline icon
johnny9 Mar 27, 2024
553d658
qml: Introduce singlesig-wallet icon
johnny9 Mar 27, 2024
cabee7f
qml: Introduce DesktopWallets page
johnny9 Mar 28, 2024
8d29f99
qml: Add property to hide NetworkIndicator on BlockClock page
johnny9 Mar 28, 2024
8310484
qml: Shorten the DesktopWallet NetworkIndicator
johnny9 Mar 28, 2024
14817f2
qml: Remove Done button from Settings in Desktop Wallet
johnny9 Mar 28, 2024
49ef687
qml: fix file location path in Controls plugin for Android
johnny9 Mar 5, 2023
da00205
qml: statically link QtQuick2Dialog and FolderListModel plugins
johnny9 Mar 16, 2024
259242a
qml: UI only. added setcustomdatadir() method into the options_model …
D33r-Gee Mar 27, 2024
bb7172f
qml: UI only. Added initial custom datadir functionality without wiring
D33r-Gee Mar 28, 2024
523f57b
doc: updated the qml/README.md with qml-module-qtquick-dialogs
D33r-Gee Mar 28, 2024
3527c01
qml, component: Fix labelling on ProxySettings
pablomartin4btc Apr 8, 2024
2347d2d
qml, refactoring: Separate guiconstants from QT
pablomartin4btc Apr 11, 2024
24d443c
qml: Set OptionQmlModel initial property values
johnny9 Mar 29, 2024
efb3b6d
qml: only write options after onboarding
johnny9 Mar 9, 2023
ff42922
qml: Introduce Tooltip for the BlockClock navbar button
johnny9 May 1, 2024
be4929c
qml: added getting custom datadir for display
D33r-Gee Apr 11, 2024
e30b3b8
qml: UI only display datadir functionality
D33r-Gee Apr 11, 2024
9449436
ci: Set `IN_GETOPT_BIN` environment variable for native macOS job
hebasto Jun 8, 2024
4fc605d
qml: Add color properties to ContinueButton
johnny9 May 27, 2024
62a6dbd
qml: Add DISABLED state to ContinueButton
johnny9 May 27, 2024
e91fca2
qml: Introduce AddWallet page after onboarding
johnny9 May 28, 2024
cd45e99
qml: Introduce Create Wallet Single-Sig flow
johnny9 May 28, 2024
53855e3
qml: Introduce the WalletBadge component
johnny9 May 19, 2024
508335b
qml: Introduce the WalletSelect component
johnny9 May 19, 2024
30d1c18
qml: create wallet: set focus on TextField
MarnixCroes Aug 5, 2024
65b8d6a
qml: uncomment DebugMessageHandler install
johnny9 Aug 8, 2024
4956646
Wallet creation flow font weight and color tweaks
GBKS Aug 30, 2024
6296995
qml: Put BlockClock into an Error state if init fails
johnny9 Apr 22, 2023
2d91fa4
qml: add scrollbar to wallet select list
MarnixCroes Aug 12, 2024
e6257e9
upnp: add compatibility for miniupnpc 2.2.8
theuni Jun 13, 2024
ff22c87
qml: Introduce minus icon
jarolrod Feb 21, 2024
644df60
qml: Introduce KeyValueRow control
jarolrod Feb 21, 2024
4316505
qml: Add PeerDetails page
johnny9 Jan 20, 2024
0567518
qml: signal based navigation in onboarding
jarolrod Oct 19, 2024
9c93f2e
qml: use signal based navigation in settings with subpages
jarolrod Oct 19, 2024
068a714
qml: use signal based navigation in CreateWallet pages, introduce wizard
jarolrod Oct 19, 2024
e49a9ff
qml: Use signal based navigation in NodeSettings, don't alias nav elems
jarolrod Oct 19, 2024
a36e701
qml: rename backClicked signal to back
jarolrod Oct 19, 2024
b7f3144
qml: Introduce PageStack control
jarolrod Oct 25, 2024
af5e71e
qml: declare OnboardingWizard file, reintroduce as PageStack
jarolrod Oct 19, 2024
c9b127f
qml: Swap existing StackViews for PageStack
jarolrod Oct 25, 2024
eeee2c2
qml: Swap existing SwipeViews for PageStack
jarolrod Oct 20, 2024
799fab4
qml: Introduce WalletModel and loadWallet functionality
johnny9 May 31, 2024
615c1f2
qml: Move setSelectedWallet work to worker QThread
johnny9 Nov 27, 2024
39e3d9d
qml: Protect m_wallets in WalletQmlController with QMutex
johnny9 Nov 27, 2024
042c3f6
qml, proxy: Allow IPv6 and move out UI validation
pablomartin4btc Oct 31, 2024
a0a5cfc
qml: Implement createSingleSigWallet
davidgumberg Feb 18, 2025
65b2278
doc: Add missing fedora dependency
davidgumberg Feb 12, 2025
8e42bac
qml: Fix handling of load wallet in controller
johnny9 Mar 8, 2025
2cb94ae
qml: Introduce LabeledTextInput control
johnny9 Nov 22, 2024
ec4737c
qml: Add copy icon
johnny9 Nov 22, 2024
9a81865
qml: Add flip-vertical icon
johnny9 Nov 22, 2024
c939037
qml: Add pending icon
johnny9 Nov 22, 2024
c5bb21a
qml: Introduce BitcoinAmount
johnny9 Nov 22, 2024
5441073
qml: Introduce RequestPayment page
johnny9 Nov 22, 2024
2299852
qml: Introduce AddWalletButton
johnny9 Aug 24, 2024
9645496
qml: Start AddWallet flow when AddWalletButton is clicked
johnny9 Aug 24, 2024
00d1998
qml: Introduce the Desktop Wallet Activity Page
johnny9 Jan 23, 2025
c054b71
qml: Introduce Send pages for singlesig, sigle input/output send
johnny9 Feb 20, 2025
130ac66
qml: Update triangle-up/down icons
johnny9 Mar 25, 2025
f42cf10
qml: Simplify imageprovider
johnny9 Mar 25, 2025
d52c416
qml: Introduce Lock icon
johnny9 Mar 25, 2025
3485890
qml: Introduce Ellipsis icon
johnny9 Mar 25, 2025
b538ef9
qml: Add CoinsListModel to WalletQmlModel
johnny9 Mar 25, 2025
a978871
qml: Introduce the CoinSelection page
johnny9 Mar 25, 2025
b89d3ca
qml: Return 0 when recipient amount QString is empty
johnny9 Mar 26, 2025
d169159
qml: Move CoinSelection list header outside of ListView
johnny9 Mar 27, 2025
d379451
qml: Put CoinSelection ListView in a ScrollView
johnny9 Mar 27, 2025
51a9789
qml: Initialize total amount in CoinsListModel
johnny9 Apr 3, 2025
893b2a0
qml: Don't allow Coin selection if there are none available
johnny9 Apr 24, 2025
604ac66
Change PageStack easing type to InOutCubic
GBKS May 18, 2025
60d1e09
qml: Add QRImageProvider
goqusan May 20, 2025
8246fdc
qml: Add QRImage control
goqusan May 20, 2025
be979cf
qml: Use QRImage in RequestPayment
goqusan May 20, 2025
d8fb299
qml: Add initialized property to WalletQmlController
johnny9 May 20, 2025
d6ea098
qml: Fix walletqmlmodel.cpp include order
johnny9 May 20, 2025
74eb395
qml: Introduce Skeleton.qml
johnny9 May 21, 2025
d3e1b08
qml: Add Skeleton loading animation to WalletBadge
johnny9 May 21, 2025
75b43d5
qml: Add fade-in animation to WalletBadge
johnny9 May 21, 2025
79e0bae
qml: Explicitly stop Skeleton Animation when not loading
johnny9 May 22, 2025
da10493
qml: Disable Send/Receive forms when loading
johnny9 May 23, 2025
d9a55ad
qml: Add caret down icon
johnny9 May 31, 2025
88b834b
qml: Add targetBlocks property to WalletQmlModel
johnny9 May 31, 2025
4469d7a
qml: Introduce FeeSelection to Send
johnny9 May 31, 2025
8f28790
qml: Cleanup QML properties in FeeSelection
johnny9 Jun 1, 2025
4729e51
qml: Remove unnecessary Layout property in Send
johnny9 Jun 1, 2025
fee5a4a
qml: Use content item on desktop wallets
goqusan Jun 1, 2025
a4821e4
qml: Fix layout in activity view
goqusan Jun 1, 2025
90be07a
qml: Remove anchors from node settings
goqusan Jun 2, 2025
a50bae2
qml: Remove inner stack view from about settings
goqusan Jun 2, 2025
8eb635c
qml: Add Skeleton loading to Activity
johnny9 May 31, 2025
9ac45f2
qml: Cleanup QML in FeeSelection
johnny9 Jun 4, 2025
67a1fe0
qml: Hide tabs and show Select Wallet if no wallet is loaded
johnny9 Jun 4, 2025
7794632
qml: Show Add Wallet in WalletBadge if none are found
johnny9 Jun 5, 2025
c08bf12
Visual tweaks to the fee selector in the send form
GBKS Jun 5, 2025
f4539b1
qml: Add Context to CreateWalletWizard
johnny9 Jun 6, 2025
ab294fc
final merge conflicts
pinheadmz Jun 10, 2025
f5be211
fix: icon.color -> color
davidgumberg Jun 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
127 changes: 60 additions & 67 deletions .cirrus.yml
Original file line number Diff line number Diff line change
@@ -1,61 +1,78 @@
env: # Global defaults
CIRRUS_CLONE_DEPTH: 1
PACKAGE_MANAGER_INSTALL: "apt-get update && apt-get install -y"
CIRRUS_LOG_TIMESTAMP: true
MAKEJOBS: "-j10"
TEST_RUNNER_PORT_MIN: "14000" # Must be larger than 12321, which is used for the http cache. See https://cirrus-ci.org/guide/writing-tasks/#http-cache
CI_FAILFAST_TEST_LEAVE_DANGLING: "1" # Cirrus CI does not care about dangling processes and setting this variable avoids killing the CI script itself on error
CCACHE_MAXSIZE: "200M"
CCACHE_DIR: "/tmp/ccache_dir"
CCACHE_NOHASHDIR: "1" # Debug info might contain a stale path if the build dir changes, but this is fine

# A self-hosted machine(s) can be used via Cirrus CI. It can be configured with
# multiple users to run tasks in parallel. No sudo permission is required.
#
# https://cirrus-ci.org/guide/persistent-workers/
#
# It is possible to select a specific persistent worker by label. Refer to the
# Generally, a persistent worker must run Ubuntu 23.04+ or Debian 12+.
#
# The following specific types should exist, with the following requirements:
# - small: For an x86_64 machine, with at least 2 vCPUs and 8 GB of memory.
# - medium: For an x86_64 machine, with at least 4 vCPUs and 16 GB of memory.
# - arm64: For an aarch64 machine, with at least 2 vCPUs and 8 GB of memory.
#
# CI jobs for the latter configuration can be run on x86_64 hardware
# by installing qemu-user-static, which works out of the box with
# podman or docker. Background: https://stackoverflow.com/a/72890225/313633
#
# The above machine types are matched to each task by their label. Refer to the
# Cirrus CI docs for more details.
#
# Generally, a persistent worker must run Ubuntu 23.04+ or Debian 12+.
# Specifically,
# - apt-get is required due to PACKAGE_MANAGER_INSTALL
# - podman-docker-4.1+ is required due to the use of `podman` when
# RESTART_CI_DOCKER_BEFORE_RUN is set and 4.1+ due to the bugfix in 4.1
# When a contributor maintains a fork of the repo, any pull request they make
# to their own fork, or to the main repository, will trigger two CI runs:
# one for the branch push and one for the pull request.
# This can be avoided by setting SKIP_BRANCH_PUSH=true as a custom env variable
# in Cirrus repository settings, accessible from
# https://cirrus-ci.com/github/my-organization/my-repository
#
# On machines that are persisted between CI jobs, RESTART_CI_DOCKER_BEFORE_RUN=1
# ensures that previous containers and artifacts are cleared before each run.
# This requires installing Podman instead of Docker.
#
# Futhermore:
# - podman-docker-4.1+ is required due to the bugfix in 4.1
# (https://github.com/bitcoin/bitcoin/pull/21652#issuecomment-1657098200)
# - The ./ci/ depedencies (with cirrus-cli) should be installed:
# - The ./ci/ dependencies (with cirrus-cli) should be installed. One-liner example
# for a single user setup with sudo permission:
#
# ```
# apt update && apt install screen python3 bash podman-docker curl -y && curl -L -o cirrus "https://github.com/cirruslabs/cirrus-cli/releases/latest/download/cirrus-linux-$(dpkg --print-architecture)" && mv cirrus /usr/local/bin/cirrus && chmod +x /usr/local/bin/cirrus
# apt update && apt install git screen python3 bash podman-docker uidmap slirp4netns curl -y && curl -L -o cirrus "https://github.com/cirruslabs/cirrus-cli/releases/latest/download/cirrus-linux-$(dpkg --print-architecture)" && mv cirrus /usr/local/bin/cirrus && chmod +x /usr/local/bin/cirrus
# ```
#
# - There are no strict requirements on the hardware, because having less CPUs
# runs the same CI script (maybe slower). To avoid rare and intermittent OOM
# due to short memory usage spikes, it is recommended to add (and persist)
# swap:
# - There are no strict requirements on the hardware. Having fewer CPU threads
# than recommended merely causes the CI script to run slower.
# To avoid rare and intermittent OOM due to short memory usage spikes,
# it is recommended to add (and persist) swap:
#
# ```
# fallocate -l 16G /swapfile_ci && chmod 600 /swapfile_ci && mkswap /swapfile_ci && swapon /swapfile_ci && ( echo '/swapfile_ci none swap sw 0 0' | sudo tee -a /etc/fstab )
# fallocate -l 16G /swapfile_ci && chmod 600 /swapfile_ci && mkswap /swapfile_ci && swapon /swapfile_ci && ( echo '/swapfile_ci none swap sw 0 0' | tee -a /etc/fstab )
# ```
#
# - To register the persistent worker, open a `screen` session and run:
#
# ```
# RESTART_CI_DOCKER_BEFORE_RUN=1 screen cirrus worker run --labels type=todo_fill_in_type --token todo_fill_in_token
# ```
#
# The following specific types should exist, with the following requirements:
# - small: For an x86_64 machine, recommended to have 2 CPUs and 8 GB of memory.
# - medium: For an x86_64 machine, recommended to have 4 CPUs and 16 GB of memory.
# - lunar: For a machine running the Linux kernel shipped with Ubuntu Lunar 23.04. The machine is recommended to have 4 CPUs and 16 GB of memory.
# - arm64: For an aarch64 machine, recommended to have 2 CPUs and 8 GB of memory.

# https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks
filter_template: &FILTER_TEMPLATE
skip: $CIRRUS_REPO_FULL_NAME == "bitcoin-core/gui" && $CIRRUS_PR == "" # No need to run on the read-only mirror, unless it is a PR. https://cirrus-ci.org/guide/writing-tasks/#conditional-task-execution
# Allow forks to specify SKIP_BRANCH_PUSH=true and skip CI runs when a branch is pushed,
# but still run CI when a PR is created.
# https://cirrus-ci.org/guide/writing-tasks/#conditional-task-execution
skip: $SKIP_BRANCH_PUSH == "true" && $CIRRUS_PR == ""
stateful: false # https://cirrus-ci.org/guide/writing-tasks/#stateful-tasks

base_template: &BASE_TEMPLATE
<< : *FILTER_TEMPLATE
merge_base_script:
# Unconditionally install git (used in fingerprint_script).
- bash -c "$PACKAGE_MANAGER_INSTALL git"
# Require git (used in fingerprint_script).
- git --version || ( apt-get update && apt-get install -y git )
- if [ "$CIRRUS_PR" = "" ]; then exit 0; fi
- git fetch --depth=1 $CIRRUS_REPO_CLONE_URL "pull/${CIRRUS_PR}/merge"
- git checkout FETCH_HEAD # Use merged changes to detect silent merge conflicts
Expand All @@ -79,18 +96,15 @@ task:
name: 'lint'
<< : *BASE_TEMPLATE
container:
image: debian:bookworm
dockerfile: ci/lint_imagefile
cpu: 1
memory: 1G
# For faster CI feedback, immediately schedule the linters
<< : *CREDITS_TEMPLATE
python_cache:
folder: "/python_build"
fingerprint_script: cat .python-version /etc/os-release
unshallow_script:
- git fetch --unshallow --no-tags
lint_script:
- ./ci/lint_run_all.sh
- ./ci/lint_run.sh

task:
name: 'tidy'
Expand All @@ -101,41 +115,32 @@ task:
env:
FILE_ENV: "./ci/test/00_setup_env_native_tidy.sh"

task:
name: 'ARM, unit tests, no functional tests'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: arm64 # Use arm64 worker to sidestep qemu and avoid a slow CI: https://github.com/bitcoin/bitcoin/pull/28087#issuecomment-1649399453
env:
FILE_ENV: "./ci/test/00_setup_env_arm.sh"

task:
name: 'Win64, unit tests, no gui tests, no boost::process, no functional tests'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: small
env:
FILE_ENV: "./ci/test/00_setup_env_win64.sh"
# task:
# name: 'ARM, unit tests, no functional tests'
# << : *GLOBAL_TASK_TEMPLATE
# persistent_worker:
# labels:
# type: arm64 # Use arm64 worker to sidestep qemu and avoid a slow CI: https://github.com/bitcoin/bitcoin/pull/28087#issuecomment-1649399453
# env:
# FILE_ENV: "./ci/test/00_setup_env_arm.sh"

task:
name: '32-bit CentOS, dash, gui'
name: 'CentOS, depends, gui'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: small
env:
FILE_ENV: "./ci/test/00_setup_env_i686_centos.sh"
FILE_ENV: "./ci/test/00_setup_env_native_centos.sh"

task:
name: 'previous releases, qt5 dev package and depends packages, DEBUG'
name: 'previous releases, depends DEBUG'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: small
env:
FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh"
FILE_ENV: "./ci/test/00_setup_env_native_previous_releases.sh"

task:
name: 'TSan, depends, gui'
Expand All @@ -156,25 +161,13 @@ task:
env:
FILE_ENV: "./ci/test/00_setup_env_native_msan.sh"

task:
name: 'ASan + LSan + UBSan + integer, no depends, USDT'
enable_bpfcc_script:
# In the image build step, no external environment variables are available,
# so any settings will need to be written to the settings env file:
- sed -i "s|\${CIRRUS_CI}|true|g" ./ci/test/00_setup_env_native_asan.sh
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: lunar # Must use the lunar-specific worker (needed for USDT functional tests)
env:
FILE_ENV: "./ci/test/00_setup_env_native_asan.sh"

task:
name: 'fuzzer,address,undefined,integer, no depends'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: medium
timeout_in: 240m # larger timeout, due to the high CPU demand
env:
FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh"

Expand All @@ -197,10 +190,10 @@ task:
FILE_ENV: "./ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh"

task:
name: 'macOS-cross 11.0, gui, no tests'
name: 'macOS-cross, gui, no tests'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
type: small
env:
FILE_ENV: "./ci/test/00_setup_env_mac.sh"
FILE_ENV: "./ci/test/00_setup_env_mac_cross.sh"
12 changes: 6 additions & 6 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ insert_final_newline = true
trim_trailing_whitespace = true

# Source code files
[*.{h,cpp,py,sh}]
[*.{h,cpp,rs,py,sh}]
indent_size = 4

# .cirrus.yml, .fuzzbuzz.yml, etc.
# .cirrus.yml, etc.
[*.yml]
indent_size = 2

# Makefiles
[{*.am,Makefile.*.include}]
# Makefiles (only relevant for depends build)
[Makefile]
indent_style = tab

# Autoconf scripts
[configure.ac]
# CMake files
[{CMakeLists.txt,*.cmake,*.cmake.in}]
indent_size = 2
8 changes: 5 additions & 3 deletions .github/ISSUE_TEMPLATE/good_first_issue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ body:
id: useful-skills
attributes:
label: Useful Skills
description: For example, “`std::thread`”, “Qt5 GUI and async GUI design” or “basic understanding of Bitcoin mining and the Bitcoin Core RPC interface”.
validations:
required: false
description: For example, “`std::thread`”, “Qt6 GUI and async GUI design” or “basic understanding of Bitcoin mining and the Bitcoin Core RPC interface”.
value: |
* Compiling Bitcoin Core from source
* Running the C++ unit tests and the Python functional tests
* ...
- type: textarea
attributes:
label: Guidance for new contributors
Expand Down
19 changes: 19 additions & 0 deletions .github/ci-test-each-commit-exec.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
#
# Copyright (c) The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

export LC_ALL=C.UTF-8

set -o errexit -o pipefail -o xtrace


echo "Running test-one-commit on $( git log -1 )"

# Use clang++, because it is a bit faster and uses less memory than g++
CC=clang CXX=clang++ cmake -B build -DWERROR=ON -DWITH_ZMQ=ON -DBUILD_GUI=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DWITH_BDB=ON -DWITH_USDT=ON -DCMAKE_CXX_FLAGS='-Wno-error=unused-member-function'

cmake --build build -j "$( nproc )" && ctest --output-on-failure --stop-on-failure --test-dir build -j "$( nproc )"

./build/test/functional/test_runner.py -j $(( $(nproc) * 2 )) --combinedlogslen=99999999
Loading