File: Files.cmake

package info (click to toggle)
ausweisapp2 2.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,632 kB
  • sloc: cpp: 114,622; python: 2,833; xml: 1,426; java: 923; sh: 186; makefile: 7
file content (162 lines) | stat: -rw-r--r-- 4,869 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
if(NOT DEFINED ENV{JENKINS_HOME})
	if(NOT DEFINED ENV{CI_API_V4_URL})
		set(ENV{CI_API_V4_URL} "https://gitlab.govkg.de/api/v4")
	endif()
	if(NOT DEFINED ENV{CI_PROJECT_ID})
		set(ENV{CI_PROJECT_ID} 786)
	endif()

	if(DEFINED ENV{CI_JOB_TOKEN})
		set(ENV{TOKEN_TYPE} "JOB-TOKEN")
		set(ENV{TOKEN} $ENV{CI_JOB_TOKEN})
	elseif(DEFINED ENV{CI_PIPELINE_TOKEN})
		set(ENV{TOKEN_TYPE} "PRIVATE-TOKEN")
		set(ENV{TOKEN} $ENV{CI_PIPELINE_TOKEN})
	else()
		message(FATAL_ERROR "No CI_JOB_TOKEN / CI_PIPELINE_TOKEN found")
	endif()
endif()

function(handle_http _file)
	set(options UPLOAD ALLOW_404)
	set(multiValueArgs URLS HEADER)
	cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

	if(_PARAM_HEADER)
		foreach(_header ${_PARAM_HEADER})
			list(APPEND HEADER HTTPHEADER "${_header}")
		endforeach()
	else()
		list(APPEND HEADER HTTPHEADER "$ENV{TOKEN_TYPE}: $ENV{TOKEN}")
	endif()

	foreach(url ${_PARAM_URLS})
		if(_PARAM_UPLOAD)
			set(operation "Upload")
			message(STATUS "Upload file: ${url}")
			if(NOT ECHO)
				if(NOT DEFINED ENV{CI})
					message(FATAL_ERROR "No CI detected: skip upload!")
					return()
				endif()
				file(UPLOAD "${_file}" "${url}" ${HEADER} SHOW_PROGRESS STATUS status LOG output)
			endif()
		else()
			set(operation "Download")
			message(STATUS "Download file: ${url}")
			if(NOT ECHO)
				file(DOWNLOAD "${url}" "${_file}" ${HEADER} SHOW_PROGRESS STATUS status LOG output)
			endif()
		endif()

		list(GET status 0 status_code)
		if(status_code EQUAL 0)
			message(STATUS "${operation} succeeded: ${_file}")
			return()
		else()
			message(STATUS "${operation} failed: ${_file}")
			if(NOT _PARAM_UPLOAD)
				step(${CMAKE_COMMAND} -E rm ${_file})
			endif()

			if(NOT ECHO)
				string(REGEX REPLACE "\\[[0-9]+ bytes data\\]" "" output "${output}")
				string(REGEX REPLACE "$ENV{TOKEN}" "***" output "${output}")
				string(REGEX MATCH "HTTP/[0-9.]+ 404" http_404 "${output}")
				if(http_404 AND _PARAM_ALLOW_404)
					continue()
				endif()
				message(FATAL_ERROR ${output})
			endif()
		endif()
	endforeach()
endfunction()

function(handle_pkg _file _dirs _version)
	foreach(dir ${_dirs})
		cmake_path(GET _file FILENAME pkg)
		list(APPEND URLS "$ENV{CI_API_V4_URL}/projects/$ENV{CI_PROJECT_ID}/packages/generic/${dir}/${_version}/${pkg}")
	endforeach()

	handle_http("${_file}" ${ARGN} ALLOW_404 URLS ${URLS})
endfunction()

function(handle_pkg_libs _file _dirs)
	foreach(dir IN LISTS _dirs)
		list(APPEND suffixedDirs "${dir}-OpenSSL_${LIBS_OPENSSL}-Qt_${LIBS_QT}")
	endforeach()
	handle_pkg("${_file}" "${suffixedDirs}" "${LIBS_IDENTIFIER}" ${ARGN})
endfunction()

function(download_pkg_libs _file)
	list(APPEND dir ${LIBS_BRANCH})
	if(REVIEW AND LIBS_PHASE)
		list(APPEND dir ${LIBS_BRANCH}-${LIBS_PHASE})
	endif()
	handle_pkg_libs("${_file}" "${dir}")
endfunction()

function(upload_pkg_libs _file)
	set(dir ${LIBS_BRANCH})
	if(LIBS_PHASE)
		set(dir ${dir}-${LIBS_PHASE})
	endif()
	handle_pkg_libs("${_file}" "${dir}" UPLOAD)
endfunction()

function(download_file _file _id)
	list(APPEND URLS "$ENV{CI_API_V4_URL}/projects/$ENV{CI_PROJECT_ID}/secure_files/${_id}/download")
	handle_http("${_file}" URLS ${URLS})
endfunction()

function(prepare_android_keystore _store _prefix)
	if(NOT DEFINED ENV{GITLAB_CI})
		return()
	endif()

	string(TOLOWER "${_store}" filename)
	set(store "$ENV{HOME}/.android/${filename}.keystore")
	set(prefixEnv "ANDROID_KEYSTORE_${_store}")
	set(file_id "${prefixEnv}_FILE_ID")
	set(alias "${prefixEnv}_ALIAS")
	set(psw "${prefixEnv}_PSW")

	if(NOT EXISTS "${store}")
		if(NOT DEFINED ENV{${file_id}})
			message(FATAL_ERROR "Missing variable: ${file_id}")
		endif()
		download_file("${store}" $ENV{${file_id}})
		if(NOT EXISTS "${store}")
			message(FATAL_ERROR "Cannot fetch file: ${store}")
		endif()
	endif()

	set("${_prefix}" "${store}" PARENT_SCOPE)
	set("${_prefix}_ALIAS" "$ENV{${alias}}" PARENT_SCOPE)
	set("${_prefix}_PSW" "$ENV{${psw}}" PARENT_SCOPE)
endfunction()

function(prepare_gpg _var)
	set(options SH)
	cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

	set(GPG_CMD gpg --batch --passphrase $ENV{GPG_PSW} --pinentry-mode loopback)
	if(_PARAM_SH)
		list(JOIN GPG_CMD " " GPG_CMD)
		string(REPLACE "$ENV" "\$" GPG_CMD "${GPG_CMD}")
		set(GPG_CMD_SH "${WORKSPACE}/.gpg")
		file(WRITE "${GPG_CMD_SH}" "#!/bin/sh\n")
		file(APPEND "${GPG_CMD_SH}" "set -euo pipefail\n")
		file(APPEND "${GPG_CMD_SH}" "${GPG_CMD} $@\n")
		file(CHMOD "${GPG_CMD_SH}" FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE)
		set(GPG_CMD "${GPG_CMD_SH}")
	endif()

	if(DEFINED ENV{GITLAB_CI} AND NOT EXISTS "$ENV{HOME}/.gnupg")
		set(gnupg_private "${WORKSPACE}/gnupg-private.asc")
		download_file("${gnupg_private}" $ENV{GPG_FILE_ID})
		step(${GPG_CMD} --import ${gnupg_private})
	endif()

	set(${_var} ${GPG_CMD} PARENT_SCOPE)
endfunction()