Fix skuba cluster images returns wrong values (bsc#1155324)

Why is this PR needed?
Partial container images cannot be pulled and do not match as the cluster images.
# cluster images list
registry.suse.com/caasp/v4/dex:2.16.0
# crictl images
registry.suse.com/caasp/v4/caasp-dex 2.16.0

# images not visible in cluster images output
registry.suse.com/caasp/v4/cilium-init 1.5.3
registry.suse.com/caasp/v4/cilium-operator 1.5.3

# image does not exist in registry.suse.de/com
1.15.2 registry.suse.com/caasp/v4/tooling:0.1.0

Fixes #https://github.com/SUSE/avant-garde/issues/1013
Reminder: Add the "fixes bsc#XXXX" to the title of the commit so that it will
appear in the changelog.
What does this PR do?

Change the suba cluster images help workding.
Fix incompatible container image name.

Anything else a reviewer needs to know?
N/A
Info for QA
This is info for QA so that they can validate this. This is mandatory if this PR fixes a bug.
If this is a new feature, a good description in "What does this PR do" may be enough.
Related info
N/A
Status BEFORE applying the patch
Run the following commands, partial container images cannot be pulled.
skuba cluster images | grep '1.15.2' | awk '{print $2}' | xargs -I{} docker pull {}

Status AFTER applying the patch
Run the following commands, all container images can be pulled.
skuba cluster images | grep '1.15.2' | awk '{print $2}' | xargs -I{} docker pull {}

Docs
N/A
Merge restrictions
(Please do not edit this)
We are in v4-maintenance phase, so we will restrict what can be merged to prevent unexpected surprises:
What can be merged (merge criteria):
    2 approvals:
        1 developer: code is fine
        1 QA: QA is fine
    there is a PR for updating documentation (or a statement that this is not needed)

Signed-off-by: JenTing Hsiao<EMAIL_ADDRESS>

Should I file separate bug about 1.14.1 and 1.15.0 images in the output?
Those are used only in devel skuba.

Should I file separate bug about 1.14.1 and 1.15.0 images in the output?
Those are used only in devel skuba.

Finally, I realize the risk that 1.14.1 and 1.15.0 are not release to registry.suse.de/suse/sle-15-sp1/update/products/casp40/containers/caasp/v4 and registry.suse.com/caasp/v4.
I fix the issue in the current PR.


FIX: Undefined uploads error when attempting to cloneJSON

Sometimes uploads are not present, which means that
the change from 0f4816c43e285d3e5e330742ff2a62e045db596b sometimes
errors (e.g. when inserting gifs via discourse-gifs). This
fixes the issue by providing default values. As in the
referenced commit, current coupling prevents this from being
easily testable.

Test fail unrelated:
Test Errors
----------------------------------------------
  Test Failed: Chat float open to DM channel with unread messages with sidebar off
    Assertion Failed: failed, expected argument to be truthy, was: false
      Expected: true, Actual: false
    at eval (acceptance/chat-test:972:21)
    at Object.eval (discourse/tests/helpers/qunit-helpers:383:9)
    at processModule (qunit:1192:16)
    at module$1 (qunit:1217:4)
    at acceptance (discourse/tests/helpers/qunit-helpers:379:25)
    at eval (acceptance/chat-test:907:32)
    at obj (discourse-loader:[371](https://github.com/discourse/discourse-chat/runs/6766097456?check_suite_focus=true#step:23:372):31)


Assigning legends to specific areas of a combined plot

Hi,
I'm trying to separate the two legends to the right such that the top one is closer to the middle and the bottom one is closer to the bottom plot:

Here is the code for it:
from marsilea.plotter import Labels
import matplotlib.pyplot as plt

# Initialize the ZeroHeight canvas for the track
fragment_track = ma.ZeroHeight(10, name="track")

# Add the peak area plot (assuming you have peak_counts defined)
fragment_track.add_bottom(
    mp.Area(
        peak_counts,  # Replace with your actual peak count data
        color="#4F6D7A",
        add_outline=False,
        alpha=1,
    ),
    name="peak"
)

# Add a title to the canvas
fragment_track.add_title("A", align="left", pad=0.4, fontsize=20)

# fragment_track.render()
colors = ['black', '#6a5acd', '#77DD77', '#FF5733', "#FFFF00"]  # Define distinct colors for different ranges
custom_cmap = ListedColormap(colors)
# Create the fragment cell heatmap
fragment_cell_heatmap = ma.CatHeatmap(downsampled_matrix.toarray(), cmap=custom_cmap, label="Read Count", height=10, width=10, name="fragment_cell_heatmap")
fragment_cell_heatmap.group_rows(downsampled_cell_types, order=np.unique(downsampled_cell_types), spacing=0.015)

# Add cell type labels on the left with no rotation
fragment_cell_heatmap.add_left(
    ma.plotter.Chunk(np.unique(downsampled_cell_types), rotation=0, props={"fontsize":23})
)

# Add title to the heatmap
fragment_cell_heatmap.add_title("B", align="left", pad=0.4, fontsize=20)

# Create cosine similarity heatmap
similarities = cosine_similarity(downsampled_matrix.toarray().T)
cosine_similarity_heatmap = ma.Heatmap(similarities, cmap="inferno", width=17, height=7, label="Cosine Similarity", name="cosine_similarities")
cosine_similarity_heatmap.add_title("C", align="left", pad=0.4, fontsize=20)
#cosine_similarity_heatmap.render()

# Combine all components into one layout
comb = fragment_track / 2.5 / fragment_cell_heatmap / 2.5 / cosine_similarity_heatmap
comb.add_legends("right", pad=1, stack_by="column")
comb.render()

# Get the Axes object corresponding to the "track" and "peak" plot
ax = comb.get_ax("track", "peak")

# Explicitly show the x-axis and customize it
ax.set_axis_on()
ax.xaxis.set_visible(True)  # Ensure the x-axis is visible
ax.tick_params(axis='x', which='both', bottom=True, labelbottom=True)  # Ensure ticks and labels are shown

# Define the start and end genomic positions (to map the relative positions)
genomic_start = 58572445
genomic_end = 58573849
num_ticks = 7  # Number of tick positions you want to show

# Set relative tick positions (e.g., positions 1 to N)
relative_positions = np.linspace(0, len(peak_counts) - 1, num_ticks).astype(int)

# Set the corresponding genomic positions as the labels
genomic_labels = np.linspace(genomic_start, genomic_end, num_ticks).astype(int)
fragment_count_labels = np.linspace(0, max(peak_counts), 7).astype(int)
# Set the relative tick positions and map them to the genomic labels
ax.set_xticks(relative_positions)
ax.set_xticklabels(["chr19:" + str(label) for label in genomic_labels], rotation=40, fontsize=23)
ax.set_yticks(relative_positions)
ax.set_yticklabels([str(label) for label in fragment_count_labels], fontsize=23)
ax.set_ylabel("Read counts", fontsize=20)
ax.set_xlabel("Genomic position", fontsize=20)
ax.set_ylim(0, max(peak_counts) + 10)
ax.tick_params(axis='y', labelsize=20)

ax = comb.layout.layouts["fragment_cell_heatmap"].get_main_ax()[-1]
ax.set_axis_on()
ax.xaxis.set_visible(True)  # Ensure the x-axis is visible and the y-axis is not
ax.yaxis.set_visible(False)
ax.tick_params(axis='x', which='both', bottom=True, labelbottom=True)  # Ensure ticks and labels are shown
ax.spines['bottom'].set_position(('outward', 20))

ax.set_xticks(relative_positions)
ax.set_xticklabels(["chr19:" + str(label) for label in genomic_labels], rotation=40, fontsize=23)
ax.set_xlabel("Genomic position", fontsize=23)

ax = comb.layout.layouts["cosine_similarities"].get_main_ax()
ax.set_axis_on()
ax.xaxis.set_visible(True)  # Ensure the x-axis is visible and the y-axis is not
ax.yaxis.set_visible(True)
ax.tick_params(axis='x', which='both', bottom=True, labelbottom=True)  # Ensure ticks and labels are shown
ax.spines['bottom'].set_position(('outward', 20))
ax.spines['left'].set_position(('outward', 20))

ax.set_xticks(relative_positions)
ax.set_xticklabels(["chr19:" + str(label) for label in genomic_labels], rotation=40, fontsize=23)
ax.set_xlabel("Genomic position", fontsize=23)

ax.set_yticks(relative_positions)
ax.set_yticklabels(["chr19:" + str(label) for label in genomic_labels], rotation=0, fontsize=23)
ax.set_ylabel("Genomic position", fontsize=23)

This is a planned feature, we are redesigning the layout algorithm for concatenation of multiple plots.

This is a planned feature, we are redesigning the layout algorithm for concatenation of multiple plots.

Since this is based off matplotlib, could you suggest a temporary workaround?

Well you can simply add an empty canvas and draw legends on it.

@newtonharry The current release of 0.4.8 provides a solution to address your issue, please see https://marsilea.readthedocs.io/en/stable/tutorial/concatenation.html#advanced, you can use CompositeBoard to have finer control over the composition, or you can use the StackBoard https://marsilea.readthedocs.io/en/stable/tutorial/stack.html.


Improve README

Some questions the README left me with:

How do I use it / where are docs? Guess: Universal Cookie Repo
What's the difference between react-cookies and universal-cookies? Guess: react-native leverages react for speeding something up internally
Do you need to install both react-cookies and universal-cookies? Guess: no

Disclaimer: I'm very new to the web development. Perhaps the last two questions are common knowledge.

You should read the readme on the packages or NPM instead of the GitHub mono repo. The whole documentation is there with examples.


Release v0.8

Getting ready for a new nlmod release v0.8...
I'm a bit confused why commits from last year are showing up in the list...? Am I doing something wrong?
EDIT: it's just the first one I guess (https://github.com/gwmod/nlmod/pull/360/commits/cef2b4bc0e43bbc532cdc7f25afc56d2f8b7bf00), still confusing but less worrisome.

Great work guys! Sorry for not being able to put more time in it at the moment.


AdvancedPaste into Query

System information:

Operating system MANJARO
DBeaver 21.3.2

Connection specification:

PostgreSQL
JDBC

A query reports from a single table a couple columns and several lines based on a WHERE-clause. This works fine.
For this selection I have a CSV-set with updated data which I was planning to "AdvancedPaste" into the query. dBeaver does not allow the AdvancedPaste here. How can I solve this?
UPDATE: I found, using the table with a WHERE and an ORDER-statement, it allows AdvancedPaste. Why this difference?

@GITMichaelK Could you provide screenshots or video with the issue? It will be helpful for further investigation

Thank you @uslss,
attached a screenshot, sorry for poor quality, I need the context-menu and could not start any snipper while the menu is active.
You can see a sql-query with the sql-statement in the top area. I ran this, the result underneath. I select column ^Name and few lines, then a right click to activate "AdvancedPaste / Erweitertes Einfügen (in German language" (see the small black arrow).

The screenshot shows, that this option is greyed-out, not accessible. Why?
As I wrote, I can select from that table  table with the WHERE and the ORDER-statement, this works. Why the difference?

Are there still open questions in regards to my description? @uslss: If not, I'd appreciate if someone could remove the "Wait for  response" flag or let me know, how I can do this.

Hello @GITMichaelK
As I can see on your picture, you have read-only columns - they have little orange circle on the column name.
I'm not sure about "Datum" column, but "^Name" column is generated. It is changed "Vorname" column, yes. But usually DBeaver nothing knows about original column in this case, because not all drivers can return this info.
And since DBeaver does not know which column is original - it cannot insert data into generated column, because it (e.g "^Name") does not actually exist in the table.
I hope my answer helped you. Write if you have any more questions.

Thank you @LonwoLonwo  for the explanation, this makes it absolutely clear! Sorry for late response, too much different tings here ...


Create List of Contributors

We should have a list of contributors so that every developer who contributes to the project can be mentioned accordingly when we do a new release.
There must somehow be a way to connect this to the release process on Github so it is possible to see the contributors from the front page of the repository.

Pending VIPM release and list of contributors created.

Finished as part of the release v1.0


How to use it

Please demonastrate how to use it with all commands and screenshots ....😃😃

Read the code (&comments) and the readme.


Cherry-pick #3505 from master into release-v3.14

Description
Cherry-pick #3505 from master into release-v3.14
Release Note
None required

Deploy preview for calico ready!
Built with commit ee9aaea62f0f604d487b15ad553171af461d7e12
https://deploy-preview-3537--calico.netlify.app


Remove version: NetEase.MCLauncher version <IP_ADDRESS>188

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

URL: https://x19.gdl.netease.com/MCLauncher_<IP_ADDRESS>188.exe
Response status code does not indicate success: 403 (Forbidden).
(Automated message - build 897)

Close with reason: Duplicate of #183368;