Commit graph

97 commits

Author SHA1 Message Date
Thomas Haller fbbe81634f
gitlab-ci: add .gitlab-ci/README.md 2023-06-06 12:35:09 +02:00
Thomas Haller 3707a3df80
gitlab-ci: print the used clang-format version in "check-tree" test
This is the authorative version that we shall use for formatting our code.
Print the version in the test.
2023-06-01 09:24:21 +02:00
Thomas Haller 70084f2485
gitlab-ci: update ci-templates to fix installation of debian:9 containers
Debian 9 (stretch) is end of life, and the repositories are archived. We
need to patch the containers so that `apt-get update` continues to work.
A new ci-templates version brings that.

Note that at the moment, there is still another issue for debian:9
containers. Unclear whether that can be fixed. In any case, bumping to
latest ci-templates is not wrong, and works around the first issue on
debian:9, making it possible to at least look at the second issue.

https://gitlab.freedesktop.org/freedesktop/ci-templates/-/merge_requests/175
2023-05-31 22:14:23 +02:00
Thomas Haller c80076c501
gitlab-ci: add CentOS Stream 8+9 containers 2023-05-22 14:47:54 +02:00
Thomas Haller 436b9cb005
gitlab-ci: improve "fedora-install.sh" for CentOS Stream 2023-05-22 14:47:42 +02:00
Thomas Haller ea39d75f7b
gitlab-ci: update default Fedora image for building pages and check steps
We want to follow current Fedora, so update to Fedora 38.

Also, we now use clang-format from Fedora 38 release, so the default
image in gitlab-ci must match, because that image is used for the
"check-tree" test.

While at it, add Fedora 39 and move Fedora 36 to tier 3.
2023-05-19 12:49:24 +02:00
Thomas Haller d9df884fce
gitlab-ci: update to latest ci-templates version 2023-05-19 12:49:23 +02:00
Thomas Haller 89edca4628
gitlab-ci: remove container cleanup stages
These stages were not properly implemented and don't seem to work.
Drop them.

Note that we do want that our cached containers get collected eventually.
As these are just caches for performance reasons, that could be done with
little downsides (we can just regenerate the containers when we need them).
However, that's not done by our gitlab-ci stages. Instead, it should
be done on a project level. It's not clear whether that is actually done,
but if there is a need (because of the resources that this wastes), then
we should do that (on freedesktop.org's gitlab instance).
2023-05-09 09:53:43 +02:00
Thomas Haller 7fa72645e5
gitlab-ci: make detached MR pipeline for external contributor's pipelines to run
The permissions for running CI will be restricted to external
contributors. It will only work for projects that use "detached MR
pipelines" ([1]).

Note that for it to actually work, a member with permission might have
to go to the "pipeline" tab of the merge request and click "run
pipeline". But this snippet is necessary for that.

[1] https://docs.gitlab.com/ee/ci/pipelines/merge_request_pipelines.html

https://gitlab.freedesktop.org/freedesktop/freedesktop/-/issues/540#what-it-means-for-me-a-maintainer-of-a-project-part-of-gitlabfreedesktoporg
2023-04-13 15:19:23 +02:00
Thomas Haller 5475f57d39
gitlab-ci: make tier tests automatic to simplify starting them manually
We want that the tier2+ tests are only run manually. As those tests
depend on the respective prep step, there are 3 possibilities:

1) make prep manual and the tier test automatic. That is what we would
   want, because then we can just manually trigger the prep step (one
   click). However, in the past this didn't work.

2) make the prep automatic and the test manual. That works, the downside
   is that we often run the prep step when its not needed. This is what
   we used to do to workaround 1).

3) make prep and the test manual. Then there are no unnecessary tests
   run, but triggering a manual test is cumbersome. First click to start
   the prep step, then wait, then click again.

Revisit this. It seems 1) is working now. Yeay.

Also rename the prep stages, so that it's clear to which tier they
belong. I guess, I could move them instead to prep1, prep2, prep3
stages, but then there are a lot of columns on the web site.
2023-04-13 09:30:14 +02:00
Thomas Haller afe098a928
gitlab-ci: extract base_type for distros to reduce redundant information
The distro.name is not just a pretty name, its the name under which we fetch
the container. It is thus a well-known name, that we can rely on.

The "base_type" only depends on the distro name, and it makes no sense
to ever choose a different name. Tracking it in the "distributions"
array is thus redundant.

Move the mapping of distro.name to the base type to a separate place.
2023-04-13 09:10:59 +02:00
Thomas Haller 8e37037e88
gitlab-ci: drop "tag"/"default_tag" from ci templates
The tag we actually use already contains a hash of the input files and
is generated (by `ci-fairy generate-templates`). There is no need for having
this fixed prefix. As also seens by having a date there, which is maintained
badly and meaningless.

Drop it.
2023-04-13 09:10:59 +02:00
Thomas Haller 31c05da92c
gitlab-ci: rename "@container-prep" tests to "@prep"
The long name looks verbose and takes away space on the web page.
Shorten the name.
2023-04-13 09:10:59 +02:00
Thomas Haller e41fe546f7
gitlab-ci: use parallel:matrix for tier1 tests
The benefit is that instead of one long running job for fedora:37 (the
current tier1 test), we have several smaller.

A minor downside is, that if the build is broken, then usually the very
first test would already fail. Previously, that meant that the follow up
tests were skipped. Now, they run all in parallel. However, test
failures should be the exception, so the wasted resources are probably
irrelevant. The upside is, that we can see which tests fail, and we run
them much faster (in parallel).

This is only done for the tier1 test, because those tests are started
automatically. Other tiers need to be triggered manually, which already
means a lot of clicking. Making those also matrix tests, would result in
an insane amount of clicking. As those other tests are run much more
seldom, having them huge is probably fine.
2023-04-13 09:08:04 +02:00
Thomas Haller b06ddab9d4
gitlab-ci: add multiple stages/tiers for tests
We have many test configurations (i.e. distros like fedora:37,
debian:9).  Almost all of them run manually triggered, because running
them every time would be wasteful.

Still, even as we trigger those tests only seldom, whenever we trigger
them all together, they consume still too many resources of the
freedesktop.org gitlab infrastructure.

One possibility would be to just drop old distros (e.g. fedora:30).
Which tests are setup in gitlab-ci is constantly refined and adjusted.
So dropping some distros is not necessarily wrong and bound to happen
eventually.

However, I also don't find it great to just disable tests that are still
passing. If we want to avoid consuming too many resources, we can just
choose not to run those tests. We don't need to enforce that by deleting
tests. Once deleted, such a configuration cannot be tested anymore as it
would be too cumbersome to recreate the setup manually.

Instead, introduce stages/tiers to clearer mark configuration that we
should test even less frequently.

Note that it is still required from the developer to not trigger too
many tests at once, to not monopolize the CI resources. The stages
should make that clearer to see, but don't solve it. Deleting tests
might solve it, but only if we delete a significant number of those
tests, which seems not desirable.
2023-04-13 09:08:03 +02:00
Thomas Haller d39fb6f014
gitlab-ci: use clearer names for NM_TEST_SELECT_RUN in "run-test.sh" 2023-04-13 09:08:03 +02:00
Thomas Haller 8da0f9f79d
gitlab-ci: assert that NM_TEST_SELECT_RUN is valid in "run-test.sh"
The script now fails, if the user passes an invalid "$NM_TEST_SELECT_RUN"
or if the script references an invalid name.
2023-04-13 09:08:03 +02:00
Peter Hutterer aa74fec602
gitlab-ci: pass --break-system-packages to pip3 for the meson install
pip on Debian 12 semi-forces us to use a venv. That's hard enough but
even more so when we just want to run meson which only relies on the
standard library anyway.

Since that flag doesn't exist on earlier versions, try both and hope one
invocation succeeds.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1595
2023-04-11 13:49:57 +02:00
Thomas Haller 67da2b8e42
gitlab-ci: fix test script to abort on failing first test
Fixes: 89cfd34ae0 ('gitlab-ci: extend run-test.sh script to manually select certain build steps to run')
2023-01-30 08:18:45 +01:00
Fernando Fernandez Mancera 74f66ee276
gitlab-ci: fix CentOS Linux 9 containers during ".gitlab-ci/fedora-install.sh"
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1511
2023-01-24 08:17:44 +01:00
Thomas Haller 01730f5943
gitlab-ci: set OMP_NUM_THREADS=1 to avoid libgomp crash for msgmerge
It's not clear why this happens. But since recently in our gitlab-ci,
all the Fedora machines will fail. It happens in the step

  check_run_clean 6 && test $IS_FEDORA = 1 -o $IS_CENTOS = 1 && ./contrib/fedora/rpm/build_clean.sh -g -w crypto_gnutls -w debug -w iwd -w test -W meson

which explains why it only affects Fedora configurations.

It does not always fail, but the probability of failure is high.
The failure is:

  ...
  rm -f et.gmo && /usr/bin/msgmerge --for-msgfmt -o et.1po et.po NetworkManager.pot && /usr/bin/msgfmt -c --statistics --verbose -o et.gmo et.1po && rm -f et.1po
  libgomp: Thread creation failed: Resource temporarily unavailable
  make[3]: *** [Makefile:383: et.gmo] Error 1

Maybe some new resource restricting in gitlab. Let's add this workaround.
I don't really understand the cause, but this seems to avoid it, which is
good enough for me.
2023-01-19 19:31:28 +01:00
Thomas Haller 1e883ab6e6
gitlab-ci: avoid clean step in "run-test.sh" for manual invocation
When we run `NM_TEST_SELECT_RUN=x ./.gitlab-ci/run-test.sh` to run one
step only, we should not do the final clean, so that the build artifacts
are preserved.
2023-01-19 15:04:46 +01:00
Thomas Haller 8ece80390d
gitlab-ci: bump ci-templates tag to generate new container images 2023-01-18 19:38:49 +01:00
Thomas Haller 81c1168a2d
gitlab-ci: add comment about how to regenerate ".gitlab-ci.yml" 2022-11-29 08:31:38 +01:00
Thomas Haller 89cfd34ae0
gitlab-ci: extend run-test.sh script to manually select certain build steps to run
When the test in gitlab-ci fails, you might want to rerun the test
on your machine. You fire up podman, run "./.gitlab-ci/*-install.sh"
and "./.gitlab-ci/run-test.sh".

Make it possible to manually select parts that are tested by
"run-test.sh" by setting NM_TEST_SELECT_RUN. Otherwise, if you want to
test a particular configuration, you either have to run all earlier
steps (which takes a long time and can even be broken) or you have
to manually patch the file.

For example,

  NM_TEST_SELECT_RUN=6 ./.gitlab-ci/run-test.sh
2022-11-23 16:51:54 +01:00
Thomas Haller 941f998792
gitlab-ci: update default Fedora image for building pages and check steps
We want to follow current Fedora, so update to f37.

Also, we now use clang-format from Fedora 37 release, so the default
image in gitlab-ci must match, because that image is used for the
"check-tree" test.
2022-11-23 09:18:43 +01:00
Thomas Haller 1106146bfd
gitlab-ci: update to latest ci-templates version 2022-11-23 09:17:55 +01:00
Thomas Haller 2d0170ca7c
gitlab-ci: update ci-templates version 2022-10-11 09:47:39 +02:00
Thomas Haller dc2cbe1858
gitlab-ci: enable F38 container and regenerate containers 2022-10-11 09:47:39 +02:00
Thomas Haller 7ee0da3eaf
build: don't "update-po" during make dist
Instead, hack gettext's Makefile.

gettext has an issue with parallel make. See [1] and [2].
Reproduce with:

  git reset --hard &&
    git clean -fdx &&
    NOCONFIGURE=yes ./autogen.sh &&
    ./configure --enable-gtk-doc --enable-introspection &&
    make -j distcheck V=1

We worked around this by setting "DIST_DEPENDS_ON_UPDATE_PO = yes",
however that (obviously) results in regenerating source files during
dist. "Source files" in the sense that the po files are commited to git
and get distributed in the release. Doing this is very ugly.

In particular it's ugly, because `make -C po update-po` is not reproducible
and the output depends on the current time (*had one job*).
Otherwise, we could just regenerate the files before doing a release.

This means, running "release.sh" script ends up with a dirty tree
afterwards. Also, the distributed po files are not the ones from the source
tree when we did the release. Also, since "release.sh rc1" does two distributions
(once for the rc1 and once for the next devel snapshot), the commit for the
second distribution will have a large diff for the po files.

This reverts commit 978d8eb699 ('po: make dist depend on update-po')
and hacks around the problem.

[1] https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
[2] https://lists.gnu.org/archive/html/bug-gettext/2022-06/msg00022.html

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1405
2022-10-03 17:50:09 +02:00
Thomas Haller 991481a568
gitlab: fail if "run-test.sh" with dirty working tree 2022-10-03 17:50:03 +02:00
Thomas Haller 7eaec52899
gitlab-ci: fix preserving build artifacts and documentation pages
Without it, the build artifacts were deleted before getting archived.
It means, the tarball and the docs were no longer archived and no
pages on gitlab no longer updated.

Fixes: e118276296 ('gitlab-ci: run unit tests for git subtree subprojects')
(cherry picked from commit cfe44c8832)
2022-08-24 20:57:51 +02:00
Thomas Haller bde99436aa
gitlab-ci: print git-status during do_clean() in "run-test.sh"
If we have a non-clean working directory after do_clean(), that
is a bug and something we need to investigate. Print information
to make that easier to debug.
2022-07-25 10:27:40 +02:00
Thomas Haller e118276296
gitlab-ci: run unit tests for git subtree subprojects 2022-07-25 10:27:40 +02:00
Thomas Haller b12281089c
gitlab-ci: fix unit tests on centos7 for python-pexpect dependency
Fixes: 9570224e86 ('tests/client: add a pexpect-based test runner')
2022-07-06 18:36:52 +02:00
Thomas Haller d8a4b3bec2
all: reformat with clang-format (clang-tools-extra-14.0.0-1.fc36) and update gitlab-ci to f36 2022-07-06 11:06:53 +02:00
Lubomir Rintel 28a53403d1 ci: trivial changes to comments
Hopefully for better not worse.
2022-06-27 13:40:09 +02:00
Lubomir Rintel 9fdb6bea44 ci: drop Ubuntu 16.04
It's sad, old and unsupported. Also its gettext is old and smells of
elderberries.
2022-06-27 13:40:09 +02:00
Lubomir Rintel 978d8eb699 po: make dist depend on update-po
This works around a race condition with gettext Makefile.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1094#note_1435313
2022-06-27 13:40:09 +02:00
Lubomir Rintel 16a7c1acab gitlab-ci: regenerate images 2022-06-27 09:10:44 +02:00
Lubomir Rintel 85d09bc246 gitlab: fix Ubuntu 18.04 image creation
Or, well, work around a bug.
2022-06-27 09:09:40 +02:00
Thomas Haller 68e9f92a81
gitlab-ci: test build with python2 on Centos7
Currently, for all tests we have python3 installed. So effectively,
even on CentOS 7, we would test the build with python3 only.

The package build on CentOS7/epel7 however uses python2. This happens
for example for our copr builds.

Also test that configuration in gitlab-ci.
2022-06-02 14:35:04 +02:00
Thomas Haller 9c07f29e27
gitlab-ci: add f37 and Ubuntu 22.04 containers 2022-05-30 18:01:18 +02:00
Thomas Haller f6f961f381
gitlab-ci: avoid pager for "run-test.sh"
In particular, `dpkg -l` likes to show a pager, when you are on the
terminal. Being on the terminal happens, if you try to reproduce
a test on your own container. So let's avoid that.
2022-05-11 22:12:56 +02:00
Thomas Haller bb605eabc6
gitlab-ci: use "nm-python-black-format.sh" script on "check-tree" 2022-04-01 14:02:23 +02:00
Thomas Haller 12299ee91e
build: drop "check-python-black" check from autotools
Previously, autotools would detect whether we have "black"
in the path. And if so, it would check formatting during `make check`.

That's problematic. When I run `./contrib/fedora/rpm/build_clean.sh -w test`
in certain cases, it would pick up black, but then fail with

  Traceback (most recent call last):
    File "/usr/bin/black", line 5, in <module>
      from black import patched_main
    File "/usr/lib/python3.6/site-packages/black.py", line 42, in <module>
      from attr import dataclass, evolve, Factory
  ModuleNotFoundError: No module named 'attr'
  make[3]: *** [Makefile:21658: check-python-black] Error 1

That's an installation error of black, but still, during package build
there is no need to check the formatting. We could export
`NMTST_SKIP_PYTHON_BLACK=1` to prevent it, but it's still unnecessary.

We check proper formatting in gitlab-ci. That is enough, it doesn't
need to run during `make check`. In particular, because `black .`
takes 1.5 seconds on my machine.
2022-04-01 14:01:45 +02:00
Thomas Haller 11e8b3375f
gitlab-ci: fix archiving build log
During the test, we `tee` the output to a log file in "/tmp".
We do that, because the test script cleans the working directory
several times, so the file cannot reside there.

Afterwards, we need to move the file back into the git-tree, so that
gitlab can archive it.

Previously that was done by "after_script", but the "after_script" may not
see the same "/tmp" as the test run ([1]). This needs to be done as part of the
"script" step.

[1] https://docs.gitlab.com/ee/ci/yaml/#after_script
2022-03-30 11:25:08 +02:00
Thomas Haller e721907472
gitlab-ci: rework extends: for "check-{patch,tree}" jobs
The "check-{patch,tree}" jobs use the same container as the default
test on Fedora ("pages_build", which also builds our documentation).

Previously, we thus extended "t_fedora:35". But that way we also
got things that we didn't want (.nm_artifacts and .build@template).

Solve this differently, by letting the jobs directly define what they
need. It's not much more, than extending "t_fedora:35" and workaround
to drop stuff we don't want.
2022-03-21 17:19:47 +01:00
Thomas Haller 569b9d864f
gitlab-ci: archive log of test
Our test is long and verbose. The output gets truncated after
a few megabytes, but sometimes it's interesting to see what
happens afterwards. Redirect also to a file and archive it.
2022-03-21 17:19:47 +01:00
Thomas Haller bbd053bf83
gitlab-ci: print environment variables not part of run-test.sh script
The output of our test scripts is captured by gitlab. It does however
sanitize things that look like secrets. So it was reasonably save
to call `env` from within the test script.

Next, we will redirect (`tee`) the output of the test script to a
file and archive it. When we do that, the output does not get sanitized
and can be downloaded from the artifacts page.

Stop running `env` as part of the test script. Do it instead as a
separate step. After all, it is useful to see the environment variables
of the test. But sanitized.
2022-03-21 17:19:47 +01:00