Track manifest apps in the Applications catalog; make CMM gate contextual
All checks were successful
CI / backend (push) Successful in 1m43s
CI / naming (push) Successful in 1s
CI / frontend (push) Successful in 8s

seed-applications: a flask geenforce seed-applications command + service that
reads the imaging-PC-type manifests and creates a core Application for every
installer entry (MSI/EXE/CMD/BAT), so shopdb tracks what GE-Enforce actually
deploys. Idempotent, deduped by appname; File/Registry/PS1/INF config entries
are skipped. Run against the West Jefferson reference: 27 apps tracked (PC-DMIS
2016/2019/2026, eDNC, Oracle Client, Adobe Reader, HostExplorer, the VC++ redist
matrix, Keyence VR-6000, PowerShell, Display Kiosk, ...). 2 tests.

Editor: the CMM version gate (_CmmVersion) now only shows for CMM scopes - it is
metrology-specific, so a printer/common entry form no longer carries the
irrelevant field.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-07-12 21:21:49 -04:00
parent d9d40297b6
commit 796007bcca
4 changed files with 119 additions and 2 deletions

View File

@@ -214,7 +214,7 @@
<label>PC types (comma)<input v-model="entryForm.PCTypes" placeholder="* or gea-shopfloor-cmm,..." /></label>
<label>Target hostnames (comma)<input v-model="entryForm.TargetHostnames" /></label>
<label>Target machine numbers (comma)<input v-model="entryForm.TargetMachineNumbers" /></label>
<label>CMM version gate<input v-model="entryForm._CmmVersion" placeholder="2016 / 2019 / 2026" /></label>
<label v-if="isCmmScope">CMM version gate<input v-model="entryForm._CmmVersion" placeholder="2016 / 2019 / 2026" /></label>
<label>Wait timeout (sec)<input type="number" v-model.number="entryForm.WaitTimeoutSec" /></label>
<label>Log file<input v-model="entryForm.LogFile" /></label>
@@ -273,7 +273,7 @@
</template>
<script setup>
import { ref } from 'vue'
import { ref, computed } from 'vue'
import api from '../../api'
const ENTRY_TYPES = ['MSI', 'EXE', 'CMD', 'BAT', 'PS1', 'INF', 'File', 'Registry']
@@ -285,6 +285,9 @@ const INUSE_BEHAVIORS = ['Defer', 'CloseAndReopen', 'ForceClose', 'ScheduleForRe
const scopes = ref([])
const selectedId = ref(null)
const detail = ref(null)
// The CMM version gate (_CmmVersion) only applies to CMM scopes; hide it
// elsewhere so a printer/common entry form is not cluttered with an irrelevant field.
const isCmmScope = computed(() => /cmm/i.test(detail.value?.scopename || ''))
const error = ref('')
const notice = ref('')
const shareRoot = ref('')