init()

in Sources/XCRemoteCache/Commands/Postbuild/PostbuildContext.swift [99:160]


    init(_ config: XCRemoteCacheConfig, env: [String: String]) throws {
        mode = config.mode
        let targetNameValue: String = try env.readEnv(key: "TARGET_NAME")
        targetName = targetNameValue
        targetTempDir = try env.readEnv(key: "TARGET_TEMP_DIR")
        derivedFilesDir = try env.readEnv(key: "DERIVED_FILE_DIR")
        let archs: [String] = try env.readEnv(key: "ARCHS").split(separator: " ").map(String.init)
        guard let firstArch = archs.first, !firstArch.isEmpty else {
            throw PostbuildContextError.missingArchitecture
        }
        arch = firstArch
        let variant: String = try env.readEnv(key: "CURRENT_VARIANT")
        compilationTempDir = try env.readEnv(key: "OBJECT_FILE_DIR_\(variant)").appendingPathComponent(arch)
        configuration = try env.readEnv(key: "CONFIGURATION")
        platform = try env.readEnv(key: "PLATFORM_NAME")
        xcodeBuildNumber = try env.readEnv(key: "XCODE_PRODUCT_BUILD_VERSION")
        productsDir = try env.readEnv(key: "TARGET_BUILD_DIR")
        moduleName = env.readEnv(key: "PRODUCT_MODULE_NAME")
        modulesFolderPath = env.readEnv(key: "MODULES_FOLDER_PATH") ?? ""
        executablePath = try env.readEnv(key: "EXECUTABLE_PATH")
        srcRoot = try env.readEnv(key: "SRCROOT")
        xcodeDir = try env.readEnv(key: "DEVELOPER_DIR")
        remoteCommitLocation = URL(fileURLWithPath: config.remoteCommitFile, relativeTo: srcRoot)
        remoteCommit = RemoteCommitInfo(try? String(contentsOf: remoteCommitLocation).trim())
        guard let address = URL(string: config.recommendedCacheAddress) else {
            throw PostbuildContextError.invalidAddress(config.recommendedCacheAddress)
        }
        recommendedCacheAddress = address
        statsLocation = URL(fileURLWithPath: config.statsDir.expandingTildeInPath, relativeTo: srcRoot)
        cacheAddresses = try config.cacheAddresses.map(URL.build)
        forceCached = !config.focusedTargets.isEmpty && !config.focusedTargets.contains(targetNameValue)
        machOType = try MachOType(rawValue: env.readEnv(key: "MACH_O_TYPE")) ?? .unknown
        wasDsymGenerated = try env.readEnv(key: "DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT")
        dSYMPath = try env.readEnv(key: "DWARF_DSYM_FOLDER_PATH")
            .appendingPathComponent(env.readEnv(key: "DWARF_DSYM_FILE_NAME"))
        builtProductsDir = try env.readEnv(key: "BUILT_PRODUCTS_DIR")
        if let contentsFolderPath: String = env.readEnv(key: "CONTENTS_FOLDER_PATH") {
            bundleDir = productsDir.appendingPathComponent(contentsFolderPath)
        } else {
            bundleDir = nil
        }
        derivedSourcesDir = try env.readEnv(key: "DERIVED_SOURCES_DIR")
        let thinFocusedTargetsString: String = env.readEnv(key: "SPT_XCREMOTE_CACHE_THINNED_TARGETS") ?? ""
        thinnedTargets = thinFocusedTargetsString.split(separator: ",").map(String.init)
        action = (try? BuildActionType(rawValue: env.readEnv(key: "ACTION"))) ?? .unknown
        modeMarkerPath = config.modeMarkerPath
        /// Note: The file has yaml extension, even it is in the json format
        overlayHeadersPath = targetTempDir.appendingPathComponent("all-product-headers.yaml")
        irrelevantDependenciesPaths = config.irrelevantDependenciesPaths
        let publicHeadersPathEnv: String? = env.readEnv(key: "PUBLIC_HEADERS_FOLDER_PATH")
        if let publicHeadersPath = publicHeadersPathEnv, publicHeadersPathEnv != "/usr/local/include" {
            // '/usr/local/include' is a value of PUBLIC_HEADERS_FOLDER_PATH when no public headers are automatically
            // generated and it is up to a project configuration to place it in a common location (e.g. static library)
            publicHeadersFolderPath = builtProductsDir.appendingPathComponent(publicHeadersPath)
        }
        disabled = try env.readEnv(key: "XCRC_DISABLED") ?? false
        let llbuildId: String = try env.readEnv(key: "LLBUILD_BUILD_ID")
        llbuildIdLockFile = SwiftFrontendContext.buildLlbuildIdSharedLockUrl(
            llbuildId: llbuildId,
            tmpDir: targetTempDir
        )
    }