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

Reply via email to