return (ans = "github-actions");
if (getenv("AUTOPKGTEST_ARTIFACTS") || getenv("AUTOPKGTEST_TMP"))
return (ans = "autopkgtest");
+ if (getenv("SALSA_CI_IMAGES"))
+ return (ans = "salsa-ci");
FOREACH_STRING(var, "CI", "CONTINOUS_INTEGRATION") {
/* Those vars are booleans according to Semaphore and Travis docs:
service_state_to_string(service->state),
service_result_to_string(service->result));
- if (service->state == SERVICE_FAILED &&
- service->main_exec_status.status == EXIT_CGROUP &&
- !ci_environment())
+ if (service->state == SERVICE_FAILED && service->main_exec_status.status == EXIT_CGROUP) {
+ const char *ci = ci_environment();
+
/* On a general purpose system we may fail to start the service for reasons which are
* not under our control: permission limits, resource exhaustion, etc. Let's skip the
* test in those cases. On developer machines we require proper setup. */
- return log_notice_errno(SYNTHETIC_ERRNO(ECANCELED),
- "Failed to start service %s, aborting test: %s/%s",
- UNIT(service)->id,
- service_state_to_string(service->state),
- service_result_to_string(service->result));
+ if (!ci)
+ return log_notice_errno(SYNTHETIC_ERRNO(ECANCELED),
+ "Failed to start service %s, aborting test: %s/%s",
+ UNIT(service)->id,
+ service_state_to_string(service->state),
+ service_result_to_string(service->result));
+
+ /* On Salsa we can't setup cgroups so the unit always fails. The test checks if it
+ * can but continues if it cannot at the beginning, but on Salsa it fails here. */
+ if (streq(ci, "salsa-ci"))
+ exit(EXIT_TEST_SKIP);
+ }
if (n >= end) {
log_error("Test timeout when testing %s", UNIT(path)->id);