I'm checking out the PREBUILD and POSTBUILD option in a DSC. I can launch my scripts, etc. When there is a POSTBUILD error, build.py properly says the build failed, but build.py is still returning 0 (success). MyBuild.LaunchPostBuild() execution does not look like it affects ReturnCode which is returned at the end of Main. "Conclusion" is updated though to indicate a failure. Any ideas? I assume build.py should return non-zero if POSTBUILD fails. >From end of edk-stable202011build.py:Main() if ReturnCode == 0: try: MyBuild.LaunchPostbuild() Conclusion = "Done" except: Conclusion = "Failed" elif ReturnCode == ABORT_ERROR: Conclusion = "Aborted" else: Conclusion = "Failed" FinishTime = time.time() BuildDuration = time.gmtime(int(round(FinishTime - StartTime))) BuildDurationStr = "" if BuildDuration.tm_yday > 1: BuildDurationStr = time.strftime("%H:%M:%S", BuildDuration) + ", %d day(s)" % (BuildDuration.tm_yday - 1) else: BuildDurationStr = time.strftime("%H:%M:%S", BuildDuration) if MyBuild is not None: if not BuildError: MyBuild.BuildReport.GenerateReport(BuildDurationStr, LogBuildTime(MyBuild.AutoGenTime), LogBuildTime(MyBuild.MakeTime), LogBuildTime(MyBuild.GenFdsTime)) EdkLogger.SetLevel(EdkLogger.QUIET) EdkLogger.quiet("\n- %s -" % Conclusion) EdkLogger.quiet(time.strftime("Build end time: %H:%M:%S, %b.%d %Y", time.localtime())) EdkLogger.quiet("Build total time: %s\n" % BuildDurationStr) Log_Agent.kill() Log_Agent.join() return ReturnCode master is the same code: https://github.com/tianocore/edk2/blob/master/BaseTools/Source/Python/build/build.py#L2738 Garrett Kirkendall SMTS Firmware Engineer 7171 Southwest Parkway, Austin, TX 78735 USA AMD facebook | amd.com