aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cli/stasis_indexer/helpers.c19
-rw-r--r--src/cli/stasis_indexer/junitxml_report.c22
-rw-r--r--src/cli/stasis_indexer/readmes.c34
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");