Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package semaphore for openSUSE:Factory checked in at 2026-03-13 21:17:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/semaphore (Old) and /work/SRC/openSUSE:Factory/.semaphore.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "semaphore" Fri Mar 13 21:17:21 2026 rev:32 rq:1338609 version:2.17.22 Changes: -------- --- /work/SRC/openSUSE:Factory/semaphore/semaphore.changes 2026-03-09 16:23:56.744165299 +0100 +++ /work/SRC/openSUSE:Factory/.semaphore.new.8177/semaphore.changes 2026-03-13 21:21:21.060595158 +0100 @@ -1,0 +2,12 @@ +Fri Mar 13 06:16:05 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 2.17.22 (no releases between .17 and this one): + * fix(integrations): permissions + * fix(ui): notice for empty list + * fix(docker): typo in bash script + * fix(auth): OIDC users are always created as Pro users + https://github.com/semaphoreui/semaphore/issues/3599 + * fix(auth): password_login_disable doesn't work + https://github.com/semaphoreui/semaphore/issues/3613 + +------------------------------------------------------------------- Old: ---- semaphore-2.17.17.obscpio web-2.17.17.tar.gz New: ---- semaphore-2.17.22.obscpio web-2.17.22.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ semaphore.spec ++++++ --- /var/tmp/diff_new_pack.tK2Isw/_old 2026-03-13 21:21:23.188682944 +0100 +++ /var/tmp/diff_new_pack.tK2Isw/_new 2026-03-13 21:21:23.188682944 +0100 @@ -17,7 +17,7 @@ Name: semaphore -Version: 2.17.17 +Version: 2.17.22 Release: 0 Summary: Modern UI for Ansible License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.tK2Isw/_old 2026-03-13 21:21:23.264686079 +0100 +++ /var/tmp/diff_new_pack.tK2Isw/_new 2026-03-13 21:21:23.268686244 +0100 @@ -3,8 +3,8 @@ <param name="url">https://github.com/ansible-semaphore/semaphore</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v2.17.17</param> - <param name="match-tag">v2.17.17</param> + <param name="revision">v2.17.22</param> + <param name="match-tag">v2.17.22</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.tK2Isw/_old 2026-03-13 21:21:23.300687565 +0100 +++ /var/tmp/diff_new_pack.tK2Isw/_new 2026-03-13 21:21:23.304687730 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/ansible-semaphore/semaphore</param> - <param name="changesrevision">9c82d18dcaeb0220e86801e452e8fc1a1c4b153d</param></service></servicedata> + <param name="changesrevision">1a419b9cbed7a13949abd616a12d0443ffd52f7d</param></service></servicedata> (No newline at EOF) ++++++ semaphore-2.17.17.obscpio -> semaphore-2.17.22.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/api/login.go new/semaphore-2.17.22/api/login.go --- old/semaphore-2.17.17/api/login.go 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/api/login.go 2026-03-12 16:22:07.000000000 +0100 @@ -777,7 +777,6 @@ Name: claims.name, Email: claims.email, External: true, - Pro: true, } user, err = helpers.Store(r).CreateUserWithoutPassword(user) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/deployment/docker/server/server-wrapper new/semaphore-2.17.22/deployment/docker/server/server-wrapper --- old/semaphore-2.17.17/deployment/docker/server/server-wrapper 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/deployment/docker/server/server-wrapper 2026-03-12 16:22:07.000000000 +0100 @@ -292,7 +292,7 @@ # Import project if environment variable SEMAPHORE_IMPORT_PROJECT_FILE is defined. # Optionally use SEMAPHORE_IMPORT_PROJECT_NAME to specify the project name. -if [ -n "${SEMAPHORE_IMPORT_PROJECT_FILE:-}" ]; && [ "${SEMAPHORE_FIRST_RUN}" = "yes" ]; then +if [ -n "${SEMAPHORE_IMPORT_PROJECT_FILE:-}" ] && [ "${SEMAPHORE_FIRST_RUN}" = "yes" ]; then echoerr "Importing project from ${SEMAPHORE_IMPORT_PROJECT_FILE}" IMPORT_ARGS="--file ${SEMAPHORE_IMPORT_PROJECT_FILE}" if [ -n "${SEMAPHORE_IMPORT_PROJECT_NAME:-}" ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/components/IntegrationExtractValueForm.vue new/semaphore-2.17.22/web/src/components/IntegrationExtractValueForm.vue --- old/semaphore-2.17.17/web/src/components/IntegrationExtractValueForm.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/components/IntegrationExtractValueForm.vue 2026-03-12 16:22:07.000000000 +0100 @@ -1,83 +1,80 @@ <template> -<v-form - ref="form" - lazy-validation - v-model="formValid" - > - <v-alert - :value="formError" - color="error" - class="pb-2" - >{{ formError }}</v-alert> + <v-form ref="form" lazy-validation v-model="formValid" v-if="item"> + <v-alert :value="formError" color="error" class="pb-2">{{ formError }}</v-alert> - <v-text-field - v-model="item.name" - label="Name" - :rules="[v => !!v || 'Name is required']" - required - :disabled="formSaving" + <v-text-field + v-model="item.name" + label="Name" + :rules="[(v) => !!v || 'Name is required']" + required + :disabled="formSaving" ></v-text-field> - <v-row> - <v-col cols="12" md="12" class="pb-0"> - <div class="ml-4 mr-4 mt-6"> - <v-select v-model="item.value_source" - label="Source of the Value" - :items="valueSources" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Value Source is required']" - outlined - dense - required - :disabled="formSaving"> - </v-select> - <v-select v-model="item.body_data_type" - label="Data Type of Body" - v-if="item.value_source == 'body'" - :items="bodyDataTypes" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Body Data Type is required']" - outlined - dense - required - :disabled="formSaving"> - </v-select> - <v-text-field - v-model="item.key" - label="Key *" - :rules="[v => !!v || 'Key is required']" - outlined - dense - required - :disabled="formSaving" + <v-row> + <v-col cols="12" md="12" class="pb-0"> + <div class="ml-4 mr-4 mt-6"> + <v-select + v-model="item.value_source" + label="Source of the Value" + :items="valueSources" + item-value="id" + item-text="text" + :rules="[(v) => !!v || 'Value Source is required']" + outlined + dense + required + :disabled="formSaving" > - </v-text-field> - <v-select v-model="item.variable_type" - label="Variable Usage *" - :items="variableTypes" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Variable Type is required']" - outlined - dense - required - :disabled="formSaving"> - </v-select> - <v-text-field - v-model="item.variable" - label="Variable *" - :rules="[v => !!v || 'Variable is required']" - outlined - dense - required - :disabled="formSaving" + </v-select> + <v-select + v-model="item.body_data_type" + label="Data Type of Body" + v-if="item.value_source == 'body'" + :items="bodyDataTypes" + item-value="id" + item-text="text" + :rules="[(v) => !!v || 'Body Data Type is required']" + outlined + dense + required + :disabled="formSaving" + > + </v-select> + <v-text-field + v-model="item.key" + label="Key *" + :rules="[(v) => !!v || 'Key is required']" + outlined + dense + required + :disabled="formSaving" + > + </v-text-field> + <v-select + v-model="item.variable_type" + label="Variable Usage *" + :items="variableTypes" + item-value="id" + item-text="text" + :rules="[(v) => !!v || 'Variable Type is required']" + outlined + dense + required + :disabled="formSaving" + > + </v-select> + <v-text-field + v-model="item.variable" + label="Variable *" + :rules="[(v) => !!v || 'Variable is required']" + outlined + dense + required + :disabled="formSaving" ></v-text-field> - </div> - - </v-col> - </v-row> -</v-form> + </div> + </v-col> + </v-row> + </v-form> </template> <script> import ItemFormBase from '@/components/ItemFormBase'; @@ -86,47 +83,52 @@ export default { mixins: [ItemFormBase, IntegrationExtractorChildValueFormBase], - + props: { + integrationId: Number, + }, data() { return { EXTRACT_VALUE_TYPE_ICONS, EXTRACT_VALUE_TYPE_TITLES, - valueSources: [{ - id: 'body', - text: 'Body', - }, { - id: 'header', - text: 'Header', - }], - bodyDataTypes: [{ - id: 'json', - text: 'JSON', - }, { - id: 'string', - text: 'String', - }], - variableTypes: [{ - id: 'environment', - text: 'Variables', - }, { - id: 'task', - text: 'Task Params', - }], + valueSources: [ + { + id: 'body', + text: 'Body', + }, + { + id: 'header', + text: 'Header', + }, + ], + bodyDataTypes: [ + { + id: 'json', + text: 'JSON', + }, + { + id: 'string', + text: 'String', + }, + ], + variableTypes: [ + { + id: 'environment', + text: 'Variables', + }, + { + id: 'task', + text: 'Task Params', + }, + ], }; }, computed: { - projectId() { - if (/^-?\d+$/.test(this.$route.params.projectId)) { - return parseInt(this.$route.params.projectId, 10); - } - return this.$route.params.projectId; - }, - integrationId() { - if (/^-?\d+$/.test(this.$route.params.integrationId)) { - return parseInt(this.$route.params.integrationId, 10); - } - return this.$route.params.integrationId; - }, + // integrationId() { + // if (/^-?\d+$/.test(this.$route.params.integrationId)) { + // return parseInt(this.$route.params.integrationId, 10); + // } + // return this.$route.params.integrationId; + // }, }, methods: { getItemsUrl() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/components/IntegrationMatcherForm.vue new/semaphore-2.17.22/web/src/components/IntegrationMatcherForm.vue --- old/semaphore-2.17.17/web/src/components/IntegrationMatcherForm.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/components/IntegrationMatcherForm.vue 2026-03-12 16:22:07.000000000 +0100 @@ -1,84 +1,86 @@ <template> -<v-form - ref="form" - lazy-validation - v-model="formValid" + <v-form + ref="form" + lazy-validation + v-model="formValid" + v-if="item" > - <v-alert - :value="formError" - color="error" - class="pb-2" - >{{ formError }}</v-alert> - <v-text-field - v-model="item.name" - label="Name" - :rules="[v => !!v || 'Name is required']" - required - :disabled="formSaving" - outlined - dense - ></v-text-field> - - <v-divider class="mb-5" /> - - <div> - <v-select - v-model="item.match_type" - label="Match on *" - :items="matchTypes" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Match source is required']" - outlined - dense - required - :disabled="formSaving" - ></v-select> - <v-select - v-model="item.body_data_type" - v-if="item.match_type == 'body'" - label="Body Data Format *" - :items="bodyDataFormats" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Body Data Format is required']" - outlined - dense - required - :disabled="formSaving" - ></v-select> + <v-alert + :value="formError" + color="error" + class="pb-2" + >{{ formError }} + </v-alert> <v-text-field - v-model="item.key" - label="Key *" - :rules="[v => !!v || 'Key is required']" - outlined - dense + v-model="item.name" + label="Name" + :rules="[v => !!v || 'Name is required']" required :disabled="formSaving" - ></v-text-field> - <v-select - v-model="item.method" - label="Comparison Method *" - :items="methods" - item-value="id" - item-text="text" - :rules="[v => !!v || 'Comparison Method is required']" outlined dense - required - :disabled="formSaving" - ></v-select> - <v-text-field - v-model="item.value" - label="Value *" - :rules="[v => !!v || 'Value is required']" - outlined - dense - required - :disabled="formSaving" ></v-text-field> - </div> -</v-form> + + <v-divider class="mb-5" /> + + <div> + <v-select + v-model="item.match_type" + label="Match on *" + :items="matchTypes" + item-value="id" + item-text="text" + :rules="[v => !!v || 'Match source is required']" + outlined + dense + required + :disabled="formSaving" + ></v-select> + <v-select + v-model="item.body_data_type" + v-if="item.match_type == 'body'" + label="Body Data Format *" + :items="bodyDataFormats" + item-value="id" + item-text="text" + :rules="[v => !!v || 'Body Data Format is required']" + outlined + dense + required + :disabled="formSaving" + ></v-select> + <v-text-field + v-model="item.key" + label="Key *" + :rules="[v => !!v || 'Key is required']" + outlined + dense + required + :disabled="formSaving" + ></v-text-field> + <v-select + v-model="item.method" + label="Comparison Method *" + :items="methods" + item-value="id" + item-text="text" + :rules="[v => !!v || 'Comparison Method is required']" + outlined + dense + required + :disabled="formSaving" + ></v-select> + <v-text-field + v-model="item.value" + label="Value *" + :rules="[v => !!v || 'Value is required']" + outlined + dense + required + :disabled="formSaving" + ></v-text-field> + </div> + </v-form> </template> <script> import ItemFormBase from '@/components/ItemFormBase'; @@ -118,12 +120,6 @@ }; }, computed: { - projectId() { - if (/^-?\d+$/.test(this.$route.params.projectId)) { - return parseInt(this.$route.params.projectId, 10); - } - return this.$route.params.projectId; - }, integrationId() { if (/^-?\d+$/.test(this.$route.params.integrationId)) { return parseInt(this.$route.params.integrationId, 10); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/components/ItemListPageBase.js new/semaphore-2.17.22/web/src/components/ItemListPageBase.js --- old/semaphore-2.17.17/web/src/components/ItemListPageBase.js 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/components/ItemListPageBase.js 2026-03-12 16:22:07.000000000 +0100 @@ -16,7 +16,10 @@ ObjectRefsDialog, }, - mixins: [PermissionsCheck, ProjectMixin], + mixins: [ + PermissionsCheck, + ProjectMixin, + ], props: { projectType: String, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/components/SecretStorageSyncOptionsForm.vue new/semaphore-2.17.22/web/src/components/SecretStorageSyncOptionsForm.vue --- old/semaphore-2.17.17/web/src/components/SecretStorageSyncOptionsForm.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/components/SecretStorageSyncOptionsForm.vue 2026-03-12 16:22:07.000000000 +0100 @@ -1,35 +1,38 @@ <template> <div> + <v-alert text v-if="!paths || paths.length === 0"> + {{ $t('No sync paths are defined.') }} + </v-alert> <div v-for="(p, i) in paths" :key="i" class="d-flex align-start mb-4"> <div style="flex: 1; min-width: 0" class="mb-2"> <v-text-field - class="mb-2" - v-model="p.path" - :label="$t('path')" - outlined - dense - @input="emitPaths" - hide-details + class="mb-2" + v-model="p.path" + :label="$t('path')" + outlined + dense + @input="emitPaths" + hide-details /> <div class="d-flex" style="gap: 8px"> <v-text-field - v-model="p.separator" - :label="$t('separator')" - outlined - dense - style="flex: 1" - @input="emitPaths" - hide-details + v-model="p.separator" + :label="$t('separator')" + outlined + dense + style="flex: 1" + @input="emitPaths" + hide-details /> <v-text-field - v-model="p.prefix" - :label="$t('prefix')" - outlined - dense - style="flex: 1" - @input="emitPaths" - hide-details + v-model="p.prefix" + :label="$t('prefix')" + outlined + dense + style="flex: 1" + @input="emitPaths" + hide-details /> </div> </div> @@ -40,10 +43,10 @@ </div> <v-btn - text - color="primary" - @click="addPath" - style="position: absolute; left: 12px; bottom: 12px" + text + color="primary" + @click="addPath" + style="position: absolute; left: 12px; bottom: 12px" > <v-icon left>mdi-plus</v-icon> Add path @@ -67,9 +70,7 @@ }, created() { - this.paths = this.value && this.value.length - ? this.value.map((p) => ({ ...p })) - : []; + this.paths = this.value && this.value.length ? this.value.map((p) => ({ ...p })) : []; }, watch: { @@ -82,7 +83,10 @@ methods: { emitPaths() { - this.$emit('input', this.paths.map((p) => ({ ...p }))); + this.$emit( + 'input', + this.paths.map((p) => ({ ...p })), + ); }, addPath() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/views/Auth.vue new/semaphore-2.17.22/web/src/views/Auth.vue --- old/semaphore-2.17.17/web/src/views/Auth.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/views/Auth.vue 2026-03-12 16:22:07.000000000 +0100 @@ -228,7 +228,7 @@ </div> - <div v-else> + <div v-else-if="isPortal"> <v-text-field v-model="email" :label="$t('Email')" @@ -265,7 +265,7 @@ <div class="auth__divider" - v-if="oidcProviders.length > 0" + v-if="(loginWithPassword || isPortal) && oidcProviders.length > 0" >or</div> <v-btn diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/views/project/IntegrationExtractValue.vue new/semaphore-2.17.22/web/src/views/project/IntegrationExtractValue.vue --- old/semaphore-2.17.17/web/src/views/project/IntegrationExtractValue.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/views/project/IntegrationExtractValue.vue 2026-03-12 16:22:07.000000000 +0100 @@ -10,6 +10,7 @@ > <template v-slot:form="{ onSave, onError, needSave, needReset }"> <IntegrationExtractValueForm + :projectId="projectId" :integration-id="integrationId" :item-id="itemId" :project-id="projectId" @@ -87,12 +88,6 @@ components: { IntegrationExtractValueForm }, computed: { - projectId() { - if (/^-?\d+$/.test(this.$route.params.projectId)) { - return parseInt(this.$route.params.projectId, 10); - } - return this.$route.params.projectId; - }, integrationId() { if (/^-?\d+$/.test(this.$route.params.integrationId)) { return parseInt(this.$route.params.integrationId, 10); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/views/project/IntegrationExtractor.vue new/semaphore-2.17.22/web/src/views/project/IntegrationExtractor.vue --- old/semaphore-2.17.17/web/src/views/project/IntegrationExtractor.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/views/project/IntegrationExtractor.vue 2026-03-12 16:22:07.000000000 +0100 @@ -1,6 +1,10 @@ <template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform"> <div v-if="integration != null"> - <IntegrationExtractorCrumb :integration="integration" /> + <IntegrationExtractorCrumb + :integration="integration" + :integration-id="integrationId" + :project-id="projectId" + /> <div class="px-4 pt-3 pb-2"> <v-switch @@ -50,9 +54,19 @@ <v-divider /> - <IntegrationMatcher class="mb-6" v-if="integration.searchable" :is-admin="isAdmin" /> - - <IntegrationExtractValue :is-admin="isAdmin" /> + <IntegrationMatcher + class="mb-6" + v-if="integration.searchable" + :is-admin="isAdmin" + :userPermissions="userPermissions" + :project-id="projectId" + /> + + <IntegrationExtractValue + :is-admin="isAdmin" + :userPermissions="userPermissions" + :project-id="projectId" + /> </div> </template> <script> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/views/project/IntegrationExtractorCrumb.vue new/semaphore-2.17.22/web/src/views/project/IntegrationExtractorCrumb.vue --- old/semaphore-2.17.17/web/src/views/project/IntegrationExtractorCrumb.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/views/project/IntegrationExtractorCrumb.vue 2026-03-12 16:22:07.000000000 +0100 @@ -27,6 +27,7 @@ components: { }, props: { integration: Object, + integrationId: Number, }, data() { return { @@ -34,20 +35,6 @@ }; }, - computed: { - projectId() { - if (/^-?\d+$/.test(this.$route.params.projectId)) { - return parseInt(this.$route.params.projectId, 10); - } - return this.$route.params.projectId; - }, - integrationId() { - if (/^-?\d+$/.test(this.$route.params.integrationId)) { - return parseInt(this.$route.params.integrationId, 10); - } - return this.$route.params.integrationId; - }, - }, methods: { allowActions() { return true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/semaphore-2.17.17/web/src/views/project/IntegrationMatcher.vue new/semaphore-2.17.22/web/src/views/project/IntegrationMatcher.vue --- old/semaphore-2.17.17/web/src/views/project/IntegrationMatcher.vue 2026-03-08 22:05:31.000000000 +0100 +++ new/semaphore-2.17.22/web/src/views/project/IntegrationMatcher.vue 2026-03-12 16:22:07.000000000 +0100 @@ -10,6 +10,7 @@ > <template v-slot:form="{ onSave, onError, needSave, needReset }"> <IntegrationMatcherForm + :project-id="projectId" :integration-id="integrationId" :item-id="itemId" @save="onSave" @@ -89,12 +90,12 @@ mixins: [ItemListPageBase], components: { IntegrationMatcherForm }, computed: { - projectId() { - if (/^-?\d+$/.test(this.$route.params.projectId)) { - return parseInt(this.$route.params.projectId, 10); - } - return this.$route.params.projectId; - }, + // projectId() { + // if (/^-?\d+$/.test(this.$route.params.projectId)) { + // return parseInt(this.$route.params.projectId, 10); + // } + // return this.$route.params.projectId; + // }, integrationId() { if (/^-?\d+$/.test(this.$route.params.integrationId)) { return parseInt(this.$route.params.integrationId, 10); ++++++ semaphore.obsinfo ++++++ --- /var/tmp/diff_new_pack.tK2Isw/_old 2026-03-13 21:21:24.760747794 +0100 +++ /var/tmp/diff_new_pack.tK2Isw/_new 2026-03-13 21:21:24.764747959 +0100 @@ -1,5 +1,5 @@ name: semaphore -version: 2.17.17 -mtime: 1773003931 -commit: 9c82d18dcaeb0220e86801e452e8fc1a1c4b153d +version: 2.17.22 +mtime: 1773328927 +commit: 1a419b9cbed7a13949abd616a12d0443ffd52f7d ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/semaphore/vendor.tar.gz /work/SRC/openSUSE:Factory/.semaphore.new.8177/vendor.tar.gz differ: char 19, line 1 ++++++ web-2.17.17.tar.gz -> web-2.17.22.tar.gz ++++++ /work/SRC/openSUSE:Factory/semaphore/web-2.17.17.tar.gz /work/SRC/openSUSE:Factory/.semaphore.new.8177/web-2.17.22.tar.gz differ: char 13, line 1
