Skip to content

Identify whether a pattern was selected by the user#2898

Merged
imobachgs merged 21 commits intoapi-v2from
fix-software-proposal
Nov 26, 2025
Merged

Identify whether a pattern was selected by the user#2898
imobachgs merged 21 commits intoapi-v2from
fix-software-proposal

Conversation

@imobachgs
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs commented Nov 19, 2025

Problem

The software proposal does not include information about whether a pattern was selected by the user or by the installer itself.

{
  "software": {
    "size": "3944742 KiB",
    "patterns": {
      "kde": "None",
      "multimedia": "Auto",
      "apparmor": "None",
      "basic_desktop": "None",
      "gnome": "Auto",
      "xfce": "None",
      "selinux": "Auto",
      "office": "Auto",
      "yast2_basis": "None",
      "yast2_desktop": "None",
      "yast2_server": "None"
    }
}

Additionally, there are other problems:

  • Capitalization looks wrong.
  • The "size" field is already formatted, whether it should be up to the client.
  • The proposal is not updated when using the set resolvables API.

Solution

  • Distinguish installer (auto) from user-selected (user) patterns and use camelCase.
  • Return the size as a number (in KiB).
{
  "size": 6240723,
  "patterns": {
    "basic_desktop": "none",
    "office": "auto",
    "apparmor": "none",
    "kde": "none",
    "yast2_server": "none",
    "yast2_basis": "auto",
    "yast2_desktop": "none",
    "multimedia": "auto",
    "selinux": "none",
    "xfce": "none",
    "gnome": "user"
  }
}

Other changes

The Model struct takes care of talking to libzypp. However, it relies on ZyppServer for communicating with libzypp, which runs on a dedicated thread. As part of this PR, we as simplified ZyppServer API a bit and, instead of implementing smaller actions (like getting the patterns metadata), it now returns SystemInfo and Proposal structs.

Last but not least, now the software proposal is recalculated when using the new set resolvables API.

@imobachgs imobachgs marked this pull request as ready for review November 19, 2025 23:05
@imobachgs imobachgs marked this pull request as draft November 19, 2025 23:05
@imobachgs imobachgs force-pushed the fix-software-proposal branch 4 times, most recently from b57f722 to 6c01cf5 Compare November 24, 2025 20:41
@imobachgs imobachgs force-pushed the fix-software-proposal branch 2 times, most recently from f1a3bb1 to b4226c0 Compare November 24, 2025 22:29
@imobachgs imobachgs marked this pull request as ready for review November 24, 2025 22:55
@imobachgs imobachgs force-pushed the fix-software-proposal branch from 70dbe91 to 2f51ec0 Compare November 25, 2025 07:39
@imobachgs imobachgs force-pushed the fix-software-proposal branch from 2f51ec0 to 7b564bd Compare November 25, 2025 09:46

const LIVE_REPO_DIR: &str = "/run/initramfs/live/install";
const LIVE_REPO_DIR: &str = "run/initramfs/live/install";
const DUD_REPO_DIR: &str = "var/lib/agama/dud/repo";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we will need in future also the one from kernel cmdline....also is somehow handled that new property @lslezak say about adding it as insecure if additional kernel param is added?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure. It is a different kind of repository and I think it is not signed.

Some(Repository {
alias: name.to_string(),
name: name.to_string(),
url: format!("dir:{}", dir.display().to_string()),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this can be quite fragile as unix dir is not url encoded. I worry that it will have problems sooner or later.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you be more specific, please?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well, here you construct url by just appending unix path after "dir:"...so any e.g. space like " " will kill it as it needs to be url encoded to "%20". What I mean here, is that we should sanitize or convert dir into url compatible string.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tend to agree, but in this case I would say the URLs are under our control.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is, but as said in future if we extend it, it can fail. So at least document it in method documentation as note for anyone who would like to re-use method.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am still not convinced of introducing a dependency just for this, but let's unblock the situation. I decided to go with url because it is in the dependencies tree anyway (through zypp-agama).

@imobachgs imobachgs force-pushed the fix-software-proposal branch from 26c2ce1 to 2b0a5cc Compare November 26, 2025 09:40
@imobachgs imobachgs merged commit 1742201 into api-v2 Nov 26, 2025
15 of 16 checks passed
@imobachgs imobachgs deleted the fix-software-proposal branch November 26, 2025 09:54
imobachgs added a commit that referenced this pull request Jan 10, 2026
Merge the new HTTP API. Each PR has been already reviewed, so it should
be safe to merge it.

* #1829
* #2508
* #2772
* #2826
* #2848
* #2860
* #2863
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2982
* #2983
* #2984
* #2988
* #2989
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2999
@imobachgs imobachgs mentioned this pull request Mar 17, 2026
imobachgs added a commit that referenced this pull request Mar 17, 2026
Prepare to release version 19.

* #1829
* #2508
* #2772
* #2818
* #2826
* #2848
* #2860
* #2863
* #2864
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2937
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2949
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2981
* #2982
* #2983
* #2984
* #2988
* #2989
* #2990
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2998
* #2999
* #3000
* #3001
* #3002
* #3004
* #3005
* #3006
* #3007
* #3008
* #3009
* #3011
* #3012
* #3013
* #3014
* #3015
* #3016
* #3018
* #3019
* #3020
* #3021
* #3022
* #3023
* #3024
* #3025
* #3026
* #3027
* #3028
* #3029
* #3030
* #3031
* #3033
* #3034
* #3035
* #3036
* #3037
* #3039
* #3040
* #3041
* #3042
* #3043
* #3044
* #3045
* #3046
* #3047
* #3048
* #3049
* #3050
* #3051
* #3052
* #3053
* #3054
* #3055
* #3056
* #3057
* #3058
* #3060
* #3061
* #3062
* #3063
* #3064
* #3065
* #3066
* #3067
* #3068
* #3069
* #3070
* #3071
* #3072
* #3073
* #3074
* #3075
* #3076
* #3077
* #3078
* #3079
* #3086
* #3087
* #3088
* #3089
* #3090
* #3091
* #3092
* #3093
* #3094
* #3095
* #3096
* #3097
* #3098
* #3099
* #3100
* #3101
* #3102
* #3103
* #3104
* #3105
* #3106
* #3107
* #3108
* #3109
* #3110
* #3112
* #3113
* #3114
* #3115
* #3116
* #3117
* #3118
* #3119
* #3120
* #3122
* #3123
* #3124
* #3127
* #3128
* #3129
* #3130
* #3131
* #3133
* #3134
* #3135
* #3136
* #3137
* #3138
* #3139
* #3140
* #3141
* #3142
* #3143
* #3144
* #3145
* #3146
* #3147
* #3148
* #3149
* #3150
* #3151
* #3152
* #3153
* #3154
* #3155
* #3157
* #3158
* #3159
* #3160
* #3161
* #3162
* #3163
* #3164
* #3165
* #3166
* #3167
* #3168
* #3169
* #3170
* #3174
* #3175
* #3176
* #3177
* #3178
* #3179
* #3181
* #3182
* #3184
* #3185
* #3186
* #3188
* #3189
* #3190
* #3191
* #3192
* #3194
* #3195
* #3196
* #3197
* #3198
* #3199
* #3200
* #3201
* #3202
* #3203
* #3205
* #3206
* #3208
* #3209
* #3210
* #3213
* #3214
* #3215
* #3216
* #3217
* #3218
* #3219
* #3220
* #3222
* #3223
* #3224
* #3225
* #3226
* #3227
* #3228
* #3229
* #3230
* #3231
* #3232
* #3233
* #3234
* #3235
* #3236
* #3237
* #3238
* #3239
* #3240
* #3241
* #3242
* #3243
* #3244
* #3246
* #3247
* #3248
* #3250
* #3251
* #3252
* #3253
* #3254
* #3255
* #3256
* #3257
* #3258
* #3259
* #3260
* #3261
* #3262
* #3263
* #3265
* #3266
* #3267
* #3268
* #3269
* #3270
* #3271
* #3272
* #3273
* #3274
* #3275
* #3276
* #3277
* #3278
* #3279
* #3280
* #3281
* #3282
* #3283
* #3284
* #3285
* #3286
* #3287
* #3288
* #3289
* #3290
* #3291
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants