aboutsummaryrefslogtreecommitdiff
path: root/src/cli/stasis_indexer/readmes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/stasis_indexer/readmes.c')
-rw-r--r--src/cli/stasis_indexer/readmes.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/cli/stasis_indexer/readmes.c b/src/cli/stasis_indexer/readmes.c
new file mode 100644
index 0000000..75e97a9
--- /dev/null
+++ b/src/cli/stasis_indexer/readmes.c
@@ -0,0 +1,75 @@
+#include "core.h"
+#include "readmes.h"
+
+int indexer_readmes(struct Delivery ctx[], const size_t nelem) {
+ struct Delivery **latest = NULL;
+ latest = get_latest_deliveries(ctx, nelem);
+
+ char indexfile[PATH_MAX] = {0};
+ sprintf(indexfile, "%s/README.md", ctx->storage.delivery_dir);
+
+ if (!pushd(ctx->storage.delivery_dir)) {
+ FILE *indexfp = fopen(indexfile, "w+");
+ if (!indexfp) {
+ fprintf(stderr, "Unable to open %s for writing\n", indexfile);
+ return -1;
+ }
+ struct StrList *archs = get_architectures(*latest, nelem);
+ struct StrList *platforms = get_platforms(*latest, nelem);
+
+ fprintf(indexfp, "# %s-%s\n\n", ctx->meta.name, ctx->meta.version);
+ fprintf(indexfp, "## Current Release\n\n");
+ 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++) {
+ char *arch = strlist_item(archs, a);
+ int have_combo = 0;
+ for (size_t i = 0; i < nelem; i++) {
+ if (latest[i] && latest[i]->system.platform) {
+ if (strstr(latest[i]->system.platform[DELIVERY_PLATFORM_RELEASE], platform) &&
+ strstr(latest[i]->system.arch, arch)) {
+ have_combo = 1;
+ }
+ }
+ }
+ if (!have_combo) {
+ continue;
+ }
+ fprintf(indexfp, "### %s-%s\n\n", platform, arch);
+
+ fprintf(indexfp, "|Release|Info|Receipt|\n");
+ fprintf(indexfp, "|:----:|:----:|:----:|\n");
+ for (size_t i = 0; i < nelem; i++) {
+ char link_name[PATH_MAX];
+ char readme_name[PATH_MAX];
+ char conf_name[PATH_MAX];
+ char conf_name_relative[PATH_MAX];
+ if (!latest[i]) {
+ continue;
+ }
+ sprintf(link_name, "latest-py%s-%s-%s.yml", latest[i]->meta.python_compact, latest[i]->system.platform[DELIVERY_PLATFORM_RELEASE], latest[i]->system.arch);
+ sprintf(readme_name, "README-py%s-%s-%s.md", latest[i]->meta.python_compact, latest[i]->system.platform[DELIVERY_PLATFORM_RELEASE], latest[i]->system.arch);
+ sprintf(conf_name, "%s.ini", latest[i]->info.release_name);
+ sprintf(conf_name_relative, "../config/%s-rendered.ini", latest[i]->info.release_name);
+ if (strstr(link_name, platform) && strstr(link_name, arch)) {
+ fprintf(indexfp, "|[%s](%s)|[%s](%s)|[%s](%s)|\n", link_name, link_name, readme_name, readme_name, conf_name, conf_name_relative);
+ }
+ }
+ fprintf(indexfp, "\n");
+ }
+ fprintf(indexfp, "\n");
+ }
+ guard_strlist_free(&archs);
+ guard_strlist_free(&platforms);
+ fclose(indexfp);
+ popd();
+ } else {
+ fprintf(stderr, "Unable to enter delivery directory: %s\n", ctx->storage.delivery_dir);
+ guard_free(latest);
+ return -1;
+ }
+
+ // "latest" is an array of pointers to ctxs[]. Do not free the contents of the array.
+ guard_free(latest);
+ return 0;
+}