diff options
author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2025-02-18 15:14:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-18 15:14:57 -0500 |
commit | 2ffd817603ecc713988fe2796c9562a857a92ef4 (patch) | |
tree | 9a5e26fe0b3bc2e17019567eb45c3bfe254a6798 /src | |
parent | ff2ce71b7f860d9af4bccb8041ecf1f6c66eb535 (diff) | |
parent | 2670a59ccbad947df72815d057d3b047cccb69df (diff) | |
download | stasis-2ffd817603ecc713988fe2796c9562a857a92ef4.tar.gz |
Merge pull request #98 from jhunkeler/indexer-minor-fixups
Indexer minor fixups
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/stasis_indexer/helpers.c | 19 | ||||
-rw-r--r-- | src/cli/stasis_indexer/junitxml_report.c | 22 | ||||
-rw-r--r-- | src/cli/stasis_indexer/readmes.c | 34 |
3 files changed, 58 insertions, 17 deletions
diff --git a/src/cli/stasis_indexer/helpers.c b/src/cli/stasis_indexer/helpers.c index e337787..76d50f9 100644 --- a/src/cli/stasis_indexer/helpers.c +++ b/src/cli/stasis_indexer/helpers.c @@ -192,11 +192,26 @@ int sort_by_latest_rc(const void *a, const void *b) { const struct Delivery *bb = b; if (aa->meta.rc > bb->meta.rc) { return -1; + } else if (aa->meta.rc < bb->meta.rc) { + return 1; } - if (aa->meta.rc < bb->meta.rc) { + + if (strcmp(aa->system.platform[DELIVERY_PLATFORM_RELEASE], bb->system.platform[DELIVERY_PLATFORM_RELEASE]) > 0) { return 1; + } else if (strcmp(aa->system.platform[DELIVERY_PLATFORM_RELEASE], bb->system.platform[DELIVERY_PLATFORM_RELEASE]) < 0) { + return -1; + } + + char *err = NULL; + unsigned pyc_a = strtoul(aa->meta.python_compact, &err, 10); + unsigned pyc_b = strtoul(bb->meta.python_compact, &err, 10); + if (pyc_a > pyc_b) { + return -1; + } else if (pyc_b < pyc_a) { + return 1; + } else { + return 0; } - return 0; } struct Delivery *get_latest_deliveries(struct Delivery ctx[], size_t nelem) { diff --git a/src/cli/stasis_indexer/junitxml_report.c b/src/cli/stasis_indexer/junitxml_report.c index fbb36af..904a3e5 100644 --- a/src/cli/stasis_indexer/junitxml_report.c +++ b/src/cli/stasis_indexer/junitxml_report.c @@ -44,7 +44,10 @@ static int write_report_output(struct Delivery *ctx, FILE *destfp, const char *x replace_text(short_name, "results-", "", 0); guard_free(short_name_pattern); - fprintf(destfp, "|[%s](%s.html)|%0.4f|%d|%d|%d|%d|%d|\n", short_name, bname, + fprintf(destfp, "|%s ([log](%s.md)) ([xml](%s.xml))|%0.4f|%d|%d|%d|%d|%d|\n", + short_name, + bname, + bname, testsuite->time, testsuite->tests, testsuite->passed, testsuite->failures, testsuite->skipped, testsuite->errors); @@ -79,7 +82,11 @@ static int write_report_output(struct Delivery *ctx, FILE *destfp, const char *x fprintf(resultfp, "### %s %s :: %s\n", type_str, testsuite->testcase[i]->classname, testsuite->testcase[i]->name); fprintf(resultfp, "\nDuration: %0.04fs\n", testsuite->testcase[i]->time); - fprintf(resultfp, "\n```\n%s\n```\n\n", message); + if (message && strlen(message)) { + fprintf(resultfp, "\n```\n%s\n```\n\n", message); + } else { + fprintf(resultfp, "\n"); + } } junitxml_testsuite_free(&testsuite); fclose(resultfp); @@ -107,16 +114,21 @@ int indexer_junitxml_report(struct Delivery ctx[], const size_t nelem) { } printf("Index %s opened for writing\n", indexfile); + int current_rc = ctx->meta.rc; for (size_t d = 0; d < nelem; d++) { char pattern[PATH_MAX] = {0}; snprintf(pattern, sizeof(pattern) - 1, "*%s*", ctx[d].info.release_name); - // if result directory contains this release name, print it - fprintf(indexfp, "### %s\n", ctx[d].info.release_name); + // if the result directory contains tests for this release name, print them if (!is_file_in_listing(file_listing, pattern)) { - fprintf(indexfp, "No test results\n"); + // no test results continue; } + if (current_rc > ctx[d].meta.rc) { + current_rc = ctx[d].meta.rc; + fprintf(indexfp, "\n\n---\n\n"); + } + fprintf(indexfp, "### %s\n", ctx[d].info.release_name); fprintf(indexfp, "\n|Suite|Duration|Total|Pass|Fail|Skip|Error|\n"); fprintf(indexfp, "|:----|:------:|:---:|:--:|:--:|:--:|:---:|\n"); diff --git a/src/cli/stasis_indexer/readmes.c b/src/cli/stasis_indexer/readmes.c index 51472df..413a6a3 100644 --- a/src/cli/stasis_indexer/readmes.c +++ b/src/cli/stasis_indexer/readmes.c @@ -23,6 +23,9 @@ int indexer_readmes(struct Delivery ctx[], const size_t nelem) { fprintf(indexfp, "# %s-%s\n\n", ctx->meta.name, ctx->meta.version); fprintf(indexfp, "## Current Release\n\n"); + strlist_sort(platforms, STASIS_SORT_ALPHA); + strlist_sort(archs, STASIS_SORT_ALPHA); + strlist_reverse(archs); for (size_t p = 0; p < strlist_count(platforms); p++) { char *platform = strlist_item(platforms, p); for (size_t a = 0; a < strlist_count(archs); a++) { @@ -57,16 +60,24 @@ int indexer_readmes(struct Delivery ctx[], const size_t nelem) { fprintf(indexfp, " - Info: [README](%s)\n", readme_name); fprintf(indexfp, " - Release: [Conda Environment YAML](%s)\n", link_name); fprintf(indexfp, " - Receipt: [STASIS input file](%s)\n", conf_name_relative); - fprintf(indexfp, " - Docker: "); - struct StrList *docker_images = get_docker_images(&latest_deliveries[i], ""); + + char *pattern = NULL; + asprintf(&pattern, "*%s*%s*", + latest_deliveries[i].info.build_number, + strstr(ctx->rules.release_fmt, "%p") ? latest_deliveries[i].meta.python_compact : "" ); + if (!pattern) { + SYSERROR("%s", "Unable to allocate bytes for pattern"); + return -1; + } + struct StrList *docker_images = get_docker_images(&latest_deliveries[i], pattern); if (docker_images && strlist_count(docker_images) && !strcmp(latest_deliveries[i].system.platform[DELIVERY_PLATFORM_RELEASE], "linux")) { + fprintf(indexfp, " - Docker: "); fprintf(indexfp, "[Archive](../packages/docker/%s)\n", path_basename(strlist_item(docker_images, 0))); - } else { - fprintf(indexfp, "N/A\n"); } - guard_free(docker_images); + guard_strlist_free(&docker_images); + guard_free(pattern); } } fprintf(indexfp, "\n"); @@ -75,13 +86,17 @@ int indexer_readmes(struct Delivery ctx[], const size_t nelem) { } fprintf(indexfp, "## Releases\n"); + int current_rc = ctx->meta.rc; for (size_t i = 0; ctx[i].meta.name != NULL; i++) { struct Delivery *current = &ctx[i]; + if (current_rc > current->meta.rc) { + current_rc = current->meta.rc; + fprintf(indexfp, "\n\n---\n\n"); + } fprintf(indexfp, "### %s\n", current->info.release_name); - fprintf(indexfp, "- Info: [README](README-%s.html)\n", current->info.release_name); + fprintf(indexfp, "- Info: [README](README-%s.md)\n", current->info.release_name); fprintf(indexfp, "- Release: [Conda Environment YAML](%s.yml)\n", current->info.release_name); fprintf(indexfp, "- Receipt: [STASIS input file](../config/%s.ini)\n", current->info.release_name); - fprintf(indexfp, "- Docker: \n"); char *pattern = NULL; asprintf(&pattern, "*%s*%s*", @@ -96,11 +111,10 @@ int indexer_readmes(struct Delivery ctx[], const size_t nelem) { if (docker_images && strlist_count(docker_images) && !strcmp(current->system.platform[DELIVERY_PLATFORM_RELEASE], "linux")) { + fprintf(indexfp, "- Docker: \n"); fprintf(indexfp, "[Archive](../packages/docker/%s)\n", path_basename(strlist_item(docker_images, 0))); - } else { - fprintf(indexfp, "N/A\n"); } - guard_free(docker_images); + guard_strlist_free(&docker_images); guard_free(pattern); } fprintf(indexfp, "\n"); |