{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "BRANCH",
          "value" : "master"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "EMAIL_NOTIFICATIONS",
          "value" : "jenkins-notifications@lists.osmocom.org"
        }
      ]
    },
    {
      "_class" : "jenkins.metrics.impl.TimeInQueueAction",
      "blockedDurationMillis" : 0,
      "blockedTimeMillis" : 0,
      "buildableDurationMillis" : 8,
      "buildableTimeMillis" : 8,
      "buildingDurationMillis" : 471363,
      "executingTimeMillis" : 471363,
      "executorUtilization" : 1.0,
      "subTaskCount" : 0,
      "waitingDurationMillis" : 0,
      "waitingTimeMillis" : 0
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 578,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
            "branch" : [
              {
                "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
                "name" : "origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
            "branch" : [
              {
                "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
                "name" : "origin/master"
              }
            ]
          }
        },
        "refs/remotes/origin/osmith/wip" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 5,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "b52b9704ed57386959a73c98e946c756e0188e6c",
            "branch" : [
              {
                "SHA1" : "b52b9704ed57386959a73c98e946c756e0188e6c",
                "name" : "refs/remotes/origin/osmith/wip"
              }
            ]
          },
          "revision" : {
            "SHA1" : "b52b9704ed57386959a73c98e946c756e0188e6c",
            "branch" : [
              {
                "SHA1" : "b52b9704ed57386959a73c98e946c756e0188e6c",
                "name" : "refs/remotes/origin/osmith/wip"
              }
            ]
          }
        },
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 253,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "c7c48718ba3637e29fc6a7af4e2e39ba0679bb8d",
            "branch" : [
              {
                "SHA1" : "c7c48718ba3637e29fc6a7af4e2e39ba0679bb8d",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "c7c48718ba3637e29fc6a7af4e2e39ba0679bb8d",
            "branch" : [
              {
                "SHA1" : "c7c48718ba3637e29fc6a7af4e2e39ba0679bb8d",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
        "branch" : [
          {
            "SHA1" : "d7072e92635e6733552f25f526da55e2fc62412d",
            "name" : "origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://gerrit.osmocom.org/pysim"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#578",
  "duration" : 471363,
  "estimatedDuration" : 470487,
  "executor" : null,
  "fullDisplayName" : "simtester-sanitize #578",
  "id" : "578",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 578,
  "queueId" : 102310,
  "result" : "SUCCESS",
  "timestamp" : 1777336981553,
  "url" : "https://jenkins.osmocom.org/jenkins/job/simtester-sanitize/578/",
  "builtOn" : "simtester",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/batch.py",
          "pySim/esim/saip/param_source.py"
        ],
        "commitId" : "a95622a022204cc097303d203df408ea8edc6a5c",
        "timestamp" : 1777068914000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/fixeria",
          "fullName" : "Vadim Yanitskiy"
        },
        "authorEmail" : "vyanitskiy@sysmocom.de",
        "comment" : "personalization: add param_source.py, add batch.py\u000a\u000aImplement pySim.esim.saip.batch.BatchPersonalization,\u000agenerating N eSIM profiles from a preset configuration.\u000a\u000aBatch parameters can be fed by a constant, incrementing, random or from\u000aCSV rows: add pySim.esim.saip.param_source.* classes to feed such input\u000ato each of the BatchPersonalization's ConfigurableParameter instances.\u000a\u000aRelated: SYS#6768\u000aChange-Id: I01ae40a06605eb205bfb409189fcd2b3a128855a\u000aJenkins: skip-card-test\u000a",
        "date" : "2026-04-25 05:15:14 +0700",
        "id" : "a95622a022204cc097303d203df408ea8edc6a5c",
        "msg" : "personalization: add param_source.py, add batch.py",
        "paths" : [
          {
            "editType" : "add",
            "file" : "pySim/esim/saip/batch.py"
          },
          {
            "editType" : "add",
            "file" : "pySim/esim/saip/param_source.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "ac593bb14d387003563ea17cd7d3e3ddbd693d8d",
        "timestamp" : 1777068914000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/fixeria",
          "fullName" : "Vadim Yanitskiy"
        },
        "authorEmail" : "vyanitskiy@sysmocom.de",
        "comment" : "personalization: implement reading back values from a PES\u000a\u000aImplement get_values_from_pes(), the reverse direction of apply_val():\u000aread back and return values from a ProfileElementSequence. Implement for\u000aall ConfigurableParameter subclasses.\u000a\u000aFuture: SdKey.get_values_from_pes() is reading pe.decoded[], which works\u000afine, but I07dfc378705eba1318e9e8652796cbde106c6a52 will change this\u000aimplementation to use the higher level ProfileElementSD members.\u000a\u000aImplementation detail:\u000a\u000aImplement get_values_from_pes() as classmethod that returns a generator.\u000aSubclasses should yield all occurences of their parameter in a given\u000aPES.\u000a\u000aFor example, the ICCID can appear in multiple places.\u000aIccid.get_values_from_pes() yields all of the individual values. A set()\u000aof the results quickly tells whether the PES is consistent.\u000a\u000aRationales for reading back values:\u000a\u000aThis allows auditing an eSIM profile, particularly for producing an\u000aoutput.csv from a batch personalization (that generated lots of random\u000akey material which now needs to be fed to an HLR...).\u000a\u000aReading back from a binary result is more reliable than storing the\u000avalues that were fed into a personalization.\u000aBy auditing final DER results with this code, I discovered:\u000a- \"oh, there already was some key material in my UPP template.\"\u000a- \"all IMSIs ended up the same, forgot to set up the parameter.\"\u000a- the SdKey.apply() implementations currently don't work, see\u000a  I07dfc378705eba1318e9e8652796cbde106c6a52 for a fix.\u000a\u000aChange-Id: I234fc4317f0bdc1a486f0cee4fa432c1dce9b463\u000aJenkins: skip-card-test\u000a",
        "date" : "2026-04-25 05:15:14 +0700",
        "id" : "ac593bb14d387003563ea17cd7d3e3ddbd693d8d",
        "msg" : "personalization: implement reading back values from a PES",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "d7072e92635e6733552f25f526da55e2fc62412d",
        "timestamp" : 1777068914000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/fixeria",
          "fullName" : "Vadim Yanitskiy"
        },
        "authorEmail" : "vyanitskiy@sysmocom.de",
        "comment" : "personalization: indicate default ParamSource per ConfigurableParameter\u000a\u000aAdd default_source class members pointing to ParamSource classes to all\u000aConfigurableParameter subclasses.\u000a\u000aThis is useful to automatically set up a default ParamSource for a given\u000aConfigurableParameter subclass, during user interaction to produce a\u000abatch personalization.\u000a\u000aFor example, if the user selects a Pin1 parameter, a calling program can\u000aimplicitly set this to a RandomDigitSource, which will magically make it\u000awork the way that most users need.\u000a\u000aBTW, default_source and default_value can be combined to configure a\u000amatching ParamSource instance:\u000a\u000a  my_source = MyParam.default_source.from_str( MyParam.default_value )\u000a\u000aChange-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32\u000aJenkins: skip-card-test\u000a",
        "date" : "2026-04-25 05:15:14 +0700",
        "id" : "d7072e92635e6733552f25f526da55e2fc62412d",
        "msg" : "personalization: indicate default ParamSource per ConfigurableParameter",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/fixeria",
      "fullName" : "Vadim Yanitskiy"
    }
  ]
}