Message ID | cover.1731844485.git.maxim.cournoyer@gmail.com |
---|---|
Headers |
Return-Path: <guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org> X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 95D9827BBEA; Sun, 17 Nov 2024 12:04:28 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.6 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL, RCVD_IN_VALIDITY_SAFE,SPF_HELO_PASS autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 8891F27BBE2 for <patchwork@mira.cbaines.net>; Sun, 17 Nov 2024 12:04:27 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <guix-patches-bounces@gnu.org>) id 1tCe0e-0003IW-AQ; Sun, 17 Nov 2024 07:04:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1tCe0Y-0003HG-N9 for guix-patches@gnu.org; Sun, 17 Nov 2024 07:04:04 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1tCe0Y-0003Bd-62 for guix-patches@gnu.org; Sun, 17 Nov 2024 07:04:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:Date:From:To:Subject; bh=Jq48+aJoGN1umRmH9wMo5jpUtTFp5B8LSSkz9B56dvk=; b=IF5suH9FK9+FEfcrMlHqNhLz524JMFzmAkzNbzJRiJGnZCDkUUi1/9Oc34HIyBdFsDSKEkve50fRPQWF5fsaPyDAQqG5MXKnyOj0+EhepcpWU5TwO6EVtNkTuEvovjcA7Q9hFixfRDw9Wscc7B/4pcomNKOOCsR7gwZVXtcFlx7jRjRKVUhSGwecbgSIicxsN1sNaEpoQydacq7Yzunb7ogPtB2Clit4Vsy1CgiG0cUWPhvJ/LXU/Zb00HGIJVnv13kk0FMUQoEJAQ3GuaSMnEfJOArnCQahG/mrHJjrN2OMzUf5QJPY3+ozdtA1Uyt0TEVG1O6K3Iauk4ppNMhg7w==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1tCe0Y-0006LI-06 for guix-patches@gnu.org; Sun, 17 Nov 2024 07:04:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#74394] [PATCH 0/2] Skip slow tests by default and run 'check' in Git pre-push hook. Resent-From: Maxim Cournoyer <maxim.cournoyer@gmail.com> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces@debbugs.gnu.org> Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 17 Nov 2024 12:04:01 +0000 Resent-Message-ID: <handler.74394.B.173184503224362@debbugs.gnu.org> Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 74394 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 74394@debbugs.gnu.org Cc: Maxim Cournoyer <maxim.cournoyer@gmail.com> X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.173184503224362 (code B ref -1); Sun, 17 Nov 2024 12:04:01 +0000 Received: (at submit) by debbugs.gnu.org; 17 Nov 2024 12:03:52 +0000 Received: from localhost ([127.0.0.1]:56137 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces@debbugs.gnu.org>) id 1tCe0O-0006Ks-6F for submit@debbugs.gnu.org; Sun, 17 Nov 2024 07:03:52 -0500 Received: from lists.gnu.org ([209.51.188.17]:35094) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <maxim.cournoyer@gmail.com>) id 1tCe0L-0006Kj-7Y for submit@debbugs.gnu.org; Sun, 17 Nov 2024 07:03:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <maxim.cournoyer@gmail.com>) id 1tCe0K-0003Bk-AN for guix-patches@gnu.org; Sun, 17 Nov 2024 07:03:48 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <maxim.cournoyer@gmail.com>) id 1tCe0I-0002mn-5V for guix-patches@gnu.org; Sun, 17 Nov 2024 07:03:48 -0500 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-20e576dbc42so22657375ad.0 for <guix-patches@gnu.org>; Sun, 17 Nov 2024 04:03:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731845023; x=1732449823; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Jq48+aJoGN1umRmH9wMo5jpUtTFp5B8LSSkz9B56dvk=; b=l+/SYIMIhftHdcA6ZuHqfKqRPZgezmp8AEGhx3PaQVPagf2cBsDdW1R61ec5xvM8Px SawILaOStQtgJhI33fR1iyF2upauDHQ5gQP6mRt220HTl8WFvy/JvjXuYkbI4j9tIbPz 8UO7ydFo5AZ8CWWoqY1fyTb7VL/eiMkHOsWApJc5L7a5rfIN+Amy3yQ0+FfMdFf1jPvl cXJ13huV6I1rL+5nEcbTRF3Vu5LyMZYq/pRypmNJpjM+1GveMTpUDVi/IX5tAzjhhFR0 SmXsK2GYJBFaQffvaL5I4SIgFPSom6JFj7F2PVyMCn/Wt7ipn8daC3D4iv0zaGcqNVnq F2Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731845023; x=1732449823; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Jq48+aJoGN1umRmH9wMo5jpUtTFp5B8LSSkz9B56dvk=; b=wISY3Vu9SlSzFuHg8PG6TbBRDNdRTae+dEA3vCOuYpJq+wf5hx4zuzfrmzabCjmJrO W638mWQYfcmKjvjqcAPjr4ZcwTGLEMMbArlQq/crWEES3WQ5LUqGxskpNvDIlcx3MqQ/ nQMo7JoHPOJcGRuOddZS1VIpn12B1zDBMT7BWhNfw/F6RdtpeZReqDKev0njNgmCqua1 UDBg2WiYw2EB3HPg1KZUwy6GScpn0k2bvNvOaRMflmPT+t7WYNaiEK+rWqyYwhkfLxz1 GsutCrdP1HVPeBNB26evtKbGYDvOQG+DIqbMCJ788VBR+mtsYcWfrkvd9GcNqALPpoTh zk+g== X-Gm-Message-State: AOJu0Yz0coAaWO0Dbzeyz2OR4OKD8gTz62q0qJ1XQgRSi5a7HMbiZcCn XXk/BwxQ62dfxgt+0KIG4sIGjubJS2VyXXOQX9Q4XKYR3+dmNKRzMKKISg== X-Google-Smtp-Source: AGHT+IH9sCBhSxevKNOS1EteuiXDCD+RcQVIB5U3/A4gnpRPkY9hjzDjVp8vQFKekvwN/X/v2LZkqQ== X-Received: by 2002:a17:902:ecc5:b0:211:6b23:9aa8 with SMTP id d9443c01a7336-211d0ebd172mr137896385ad.36.1731845023168; Sun, 17 Nov 2024 04:03:43 -0800 (PST) Received: from localhost.localdomain ([2405:6586:be0:0:c8ff:1707:9b9:af89]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-211d0ec7c45sm39723105ad.77.2024.11.17.04.03.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Nov 2024 04:03:42 -0800 (PST) From: Maxim Cournoyer <maxim.cournoyer@gmail.com> Date: Sun, 17 Nov 2024 21:03:30 +0900 Message-ID: <cover.1731844485.git.maxim.cournoyer@gmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=maxim.cournoyer@gmail.com; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: <guix-patches.gnu.org> List-Unsubscribe: <https://lists.gnu.org/mailman/options/guix-patches>, <mailto:guix-patches-request@gnu.org?subject=unsubscribe> List-Archive: <https://lists.gnu.org/archive/html/guix-patches> List-Post: <mailto:guix-patches@gnu.org> List-Help: <mailto:guix-patches-request@gnu.org?subject=help> List-Subscribe: <https://lists.gnu.org/mailman/listinfo/guix-patches>, <mailto:guix-patches-request@gnu.org?subject=subscribe> Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches |
Series |
Skip slow tests by default and run 'check' in Git pre-push hook.
|
|
Message
Maxim Cournoyer
Nov. 17, 2024, 12:03 p.m. UTC
Hello, This is a simple change that should ensure test suite breakages are detected as early as possible and avoid tests breaking changes to be pushed. This is made possible by skipping a few expensive tests suite, bringing down the total test time to about 1 minute on a fast machine. We could call it a "distributed CI" approach ;-). Note: I initially pursued an Automake or Make-based approach, but it ended up far from trivial, hitting old issues such as [0] along the way. This solution simply puts the skip logic in the tests that must be skipped (a one liner). To run the complete test suite including the slow tests (as is the case prior this change): make check WITH_SLOW_TESTS=1 [0] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=74387 Maxim Cournoyer (2): build: Exclude expensive tests in check target by default. etc: Ensure test suite passes in pre-push git hook. Makefile.am | 9 ++++++++- etc/git/pre-push | 1 + tests/guix-home.sh | 5 +++++ tests/guix-package.sh | 5 +++++ tests/guix-system.sh | 4 ++++ tests/guix-time-machine.sh | 4 +++- 6 files changed, 26 insertions(+), 2 deletions(-) base-commit: 94133452aa49de672d69950b2e1a99432111074c
Comments
Hi Maxim, Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis: > This is a simple change that should ensure test suite breakages are detected > as early as possible and avoid tests breaking changes to be pushed. This is > made possible by skipping a few expensive tests suite, bringing down the total > test time to about 1 minute on a fast machine. > > We could call it a "distributed CI" approach ;-). I agree with the goal, of course, but not with the method: even without expensive tests, “make check” is going to take maybe 5–10 minutes, and having that happen when you run “git push” can be a terrible development experience (especially since the developer most likely either already ran the test suite or part of it right before, or pushes package changes that have infinitely small probability of breaking “make check”). Back to CI and not breaking things: I think that we should have a workflow where the forge triggers those checks and puts a green light if it passes, red light otherwise. (Basically what everybody else is doing. :-)) To me this should be one of the goals for the project in 2025. > To run the complete test suite including the slow tests (as is the case prior > this change): > > make check WITH_SLOW_TESTS=1 This variable itself may still be useful though (I’d call it ‘RUN_EXPENSIVE_TESTS’ or something like that—that’s the name used in Coreutils—, “expensive” being the key word). I would also keep it on by default. Thanks, Ludo’.
Hi Ludovic, Ludovic Courtès <ludo@gnu.org> writes: > Hi Maxim, > > Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis: > >> This is a simple change that should ensure test suite breakages are detected >> as early as possible and avoid tests breaking changes to be pushed. This is >> made possible by skipping a few expensive tests suite, bringing down the total >> test time to about 1 minute on a fast machine. >> >> We could call it a "distributed CI" approach ;-). > > I agree with the goal, of course, but not with the method: even without > expensive tests, “make check” is going to take maybe 5–10 minutes, and > having that happen when you run “git push” can be a terrible development > experience (especially since the developer most likely either already > ran the test suite or part of it right before, or pushes package changes > that have infinitely small probability of breaking “make check”). As I wrote, 'make check' with this change takes about 1 minute on my machine; I'd be curious to know how long it takes on other people machines; I suspect a bit more; if it's too slow, we can skip more, or find out ways to make the tests run faster. > Back to CI and not breaking things: I think that we should have a > workflow where the forge triggers those checks and puts a green light if > it passes, red light otherwise. (Basically what everybody else is > doing. :-)) > > To me this should be one of the goals for the project in 2025. That would be great. I wonder how far QA is from making this achievable. >> To run the complete test suite including the slow tests (as is the case prior >> this change): >> >> make check WITH_SLOW_TESTS=1 > > This variable itself may still be useful though (I’d call it > ‘RUN_EXPENSIVE_TESTS’ or something like that—that’s the name used in > Coreutils—, “expensive” being the key word). I would also keep it on by > default. One of the tests that was unbearably long when I measured was the time-machine test. It took about 20 minutes to fetch the git repository with guile-git and run the test (which does extra work compared to the CLI like validating each object). I don't think we want this kind of experience by default (because that'd probably convince people that running the test suite often is not a reasonable thing to do). The other tests were more reasonable, with the longer ones in the 2-3 minutes range on my machine, IIRC. Perhaps we could have this 20 minute outlier skipped by default, maybe with a RUN_PROHIBITIVE_TESTS flag that would default to 0 (false). A long time ago I had read a blog post that argued that unit tests should be small and fast [0], and there's a lot of good about that. Fast tests usually translates in running the test suite more often and catching breakage earlier. As the author states, it also makes it possible to determine whether a bug lies in the core logic or in the integration of the many parts (unit tests vs integration tests), when unit tests are decoupled from the whole system (typically by mocking all external interfaces). [0] https://www.artima.com/weblogs/viewpost.jsp?thread=126923
Hi Maxim, Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: [...] >> I agree with the goal, of course, but not with the method: even without >> expensive tests, “make check” is going to take maybe 5–10 minutes, and >> having that happen when you run “git push” can be a terrible development >> experience (especially since the developer most likely either already >> ran the test suite or part of it right before, or pushes package changes >> that have infinitely small probability of breaking “make check”). > > As I wrote, 'make check' with this change takes about 1 minute on my > machine; Right now, without your patch, we have: --8<---------------cut here---------------start------------->8--- $ wget -qO- $(guix build --log-file guix --no-grafts)|gunzip |grep "\`check'" starting phase `check' phase `check' succeeded after 2049.2 seconds --8<---------------cut here---------------end--------------->8--- More than 30mn on the fast machines of the build farm, and with some of the expensive tests already skipped (those that require network access: time-machine, pack -RR, etc.). This patch is not dividing wall-clock time by 30, is it? >> This variable itself may still be useful though (I’d call it >> ‘RUN_EXPENSIVE_TESTS’ or something like that—that’s the name used in >> Coreutils—, “expensive” being the key word). I would also keep it on by >> default. > > One of the tests that was unbearably long when I measured was the > time-machine test. It took about 20 minutes to fetch the git repository > with guile-git and run the test (which does extra work compared to the > CLI like validating each object). I don't think we want this kind of > experience by default (because that'd probably convince people that > running the test suite often is not a reasonable thing to do). The > other tests were more reasonable, with the longer ones in the 2-3 > minutes range on my machine, IIRC. Perhaps we could have this 20 minute > outlier skipped by default, maybe with a RUN_PROHIBITIVE_TESTS flag that > would default to 0 (false). Yeah okay, maybe we should skip them by default, and maybe we can find a way to ensure developers do run them periodically. > A long time ago I had read a blog post that argued that unit tests > should be small and fast [0], I actually agree. :-) Thanks! Ludo’.