@@ -88,60 +88,172 @@ jobs:
8888 cd ..
8989
9090 - name : Mach configure
91+ shell : zx --verbose {0}
92+ env :
93+ FORCE_COLOR : 3
94+ BUILD_PLATFORM : ${{ inputs.platform }}
95+ IS_BETA : ${{ inputs.beta }}
9196 run : |
92- if [ "${{inputs.platform}}" == "Windows-x64" ]; then
93- cp ./.github/workflows/mozconfigs/win64.mozconfig mozconfig
94- elif [ "${{inputs.platform}}" == "Linux-x64" ]; then
95- cp ./.github/workflows/mozconfigs/linux64.mozconfig mozconfig
96- else
97- cp ./.github/workflows/mozconfigs/macosx64-x86_64.mozconfig mozconfig
98- fi
97+ // Copy appropriate mozconfig based on platform
98+ const mozconfigs = {
99+ 'Windows-x64': './.github/workflows/mozconfigs/win64.mozconfig',
100+ 'Linux-x64': './.github/workflows/mozconfigs/linux64.mozconfig',
101+ 'macOS-x64': './.github/workflows/mozconfigs/macosx64-x86_64.mozconfig'
102+ };
99103
100- # Copy Noraneko Branding
101- cp -r ./floorp/gecko/branding/* ./browser/branding/
102-
103- mkdir floorp/gecko/config/autogenerated
104- echo "$(cat browser/config/version.txt)@$(cat floorp/gecko/config/version.txt)" >> floorp/gecko/config/autogenerated/version.txt
105- echo "$(cat browser/config/version_display.txt)@$(cat floorp/gecko/config/version_display.txt)" >> floorp/gecko/config/autogenerated/version_display.txt
106- echo "ac_add_options --with-version-file-path=floorp/gecko/config/autogenerated" >> mozconfig
107- # sed -i 's|ac_add_options --disable-maintenance-service|#ac_add_options --disable-maintenance-service|g' ./mozconfig
108- sed -i 's|ac_add_options --disable-updater||g' ./mozconfig
109- sed -i 's|ac_add_options --enable-unverified-updates||g' ./mozconfig
110-
111- echo "ac_add_options --enable-release" >> mozconfig
112- echo "ac_add_options --disable-tests" >> mozconfig
113- echo "ac_add_options --enable-artifact-builds" >> mozconfig
114- echo "mk_add_options MOZ_OBJDIR=./obj-artifact-build-output" >> mozconfig
115-
116- if [ "${{inputs.beta}}" == "true" ]; then
117- sed -i 's|MOZ_BRANDING_DIRECTORY=browser/branding/unofficial|MOZ_BRANDING_DIRECTORY=browser/branding/floorp-daylight|g' ./browser/confvars.sh
118- echo "ac_add_options --enable-update-channel=beta" >> mozconfig
119- else
120- sed -i 's|MOZ_BRANDING_DIRECTORY=browser/branding/unofficial|MOZ_BRANDING_DIRECTORY=browser/branding/floorp-official|g' ./browser/confvars.sh
121- echo "ac_add_options --enable-update-channel=release" >> mozconfig
122- fi
104+ await $`cp ${mozconfigs[process.env.BUILD_PLATFORM]} mozconfig`;
123105
124- sed -i 's|ac_add_options --enable-chrome-format=flat||g' ./mozconfig
106+ // Copy Noraneko Branding
107+ await $`cp -r ./floorp/gecko/branding/* ./browser/branding/`;
125108
126- if [ "${{inputs.platform}}" == "macOS-x64" ]; then
127- # Extract macOS .dmg tools
128- mkdir -p ~/tools
129- curl -L https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ceSQWV1AS76UlhYJ0_PfJQ/artifacts/public/build/dmg.tar.zst -o dmg.tar.zst
130- tar -I zstd -xf dmg.tar.zst -C ~/tools
131- sudo chmod 777 ~/tools/dmg
132-
133- curl -L https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/N2SwCRLrRw2l-UWP4N7dhQ/artifacts/public/build/hfsplus.tar.zst -o hfsplus.tar.zst
134- tar -I zstd -xf hfsplus.tar.zst -C ~/tools
135- sudo chmod 777 ~/tools/hfsplus
136-
137- # write mozconfig
138- echo "DMG_TOOL=$(echo ~/tools/dmg/dmg)" >> mozconfig
139- echo "HFS_TOOL=$(echo ~/tools/dmg/hfsplus)" >> mozconfig
140- echo "MKFSHFS=$(echo ~/tools/hfsplus/newfs_hfs)" >> mozconfig
141- fi
109+ // Create and setup version files
110+ await $`mkdir -p floorp/gecko/config/autogenerated`;
111+ const version = await $`cat browser/config/version.txt`;
112+ const geckoVersion = await $`cat floorp/gecko/config/version.txt`;
113+ await $`echo "${version}@${geckoVersion}" > floorp/gecko/config/autogenerated/version.txt`;
114+
115+ const versionDisplay = await $`cat browser/config/version_display.txt`;
116+ const geckoVersionDisplay = await $`cat floorp/gecko/config/version_display.txt`;
117+ await $`echo "${versionDisplay}@${geckoVersionDisplay}" > floorp/gecko/config/autogenerated/version_display.txt`;
118+
119+ // Configure for beta or release
120+ // Helper function to run sed command
121+ const sedReplace = async (pattern, replacement, file) => {
122+ console.log(`Replacing ${pattern} with ${replacement} in ${file}`);
123+ await $`sed -i 's|${pattern}|${replacement}|g' ${file}`;
124+ };
125+
126+ // Helper function to add mozconfig options
127+ const addMozConfig = async (option) => {
128+ console.log(`Adding ${option} to mozconfig`);
129+ await $`echo "ac_add_options ${option}" >> mozconfig`;
130+ };
131+
132+
133+ // Append base configuration to mozconfig
134+ const baseConfig = [
135+ '--with-version-file-path=floorp/gecko/config/autogenerated',
136+ '--enable-release',
137+ '--disable-tests',
138+ '--enable-artifact-builds'
139+ ];
140+
141+ for (const option of baseConfig) {
142+ await $`echo "ac_add_options ${option}" >> mozconfig`;
143+ }
144+
145+ // Remove mozconfig options for flat chrome and branding
146+ const removeConfig = [
147+ '--disable-updater',
148+ '--enable-chrome-format=flat',
149+ '--enable-unverified-updates',
150+ ];
151+
152+ for (const option of removeConfig) {
153+ await $`sed -i '/ac_add_options ${option}/d' mozconfig`;
154+ }
155+
156+ // Common paths/files
157+ const confvarsPath = './browser/confvars.sh';
158+ const updateUtilsPath = './toolkit/modules/UpdateUtils.sys.mjs';
159+
160+ const fileContent = await $`cat ${updateUtilsPath}`.toString();
161+ const updatedContent = fileContent.replace(
162+ 'return encodeURIComponent(replacement);',
163+ 'return name === "NORA_UPDATE_HOST" ? replacement : encodeURIComponent(replacement);'
164+ );
165+ await $`echo ${JSON.stringify(updatedContent)} > ${updateUtilsPath}`;
166+
167+ if (process.env.IS_BETA === 'true') {
168+ // Beta configuration
169+ await sedReplace(
170+ 'MOZ_BRANDING_DIRECTORY=browser/branding/unofficial',
171+ 'MOZ_BRANDING_DIRECTORY=browser/branding/floorp-daylight',
172+ confvarsPath
173+ );
174+ await addMozConfig('--enable-update-channel=beta');
175+ await addMozConfig('--with-branding=browser/branding/floorp-daylight');
176+
177+ // Set update URL based on platform
178+ const baseUrl = 'github.com/Floorp-Projects/Floorp-12/releases/download/beta/';
179+ const platformUrls = {
180+ 'Windows-x64': `${baseUrl}WINNT_x86_64-msvc-x64.`,
181+ 'Linux-x64': `${baseUrl}Linux_x86_64.`,
182+ 'macOS-x64': `${baseUrl}Darwin_x86_64.`
183+ };
184+
185+ if (platformUrls[process.env.BUILD_PLATFORM]) {
186+ await sedReplace(
187+ 'REPLACE_THIS_NORA_UPDATE_HOST_TARGET_PLACEHOLDER',
188+ platformUrls[process.env.BUILD_PLATFORM],
189+ updateUtilsPath
190+ );
191+ } else {
192+ console.error('Unsupported platform: ' + process.env.BUILD_PLATFORM);
193+ }
194+ } else {
195+ // Release configuration
196+ await sedReplace(
197+ 'MOZ_BRANDING_DIRECTORY=browser/branding/unofficial',
198+ 'MOZ_BRANDING_DIRECTORY=browser/branding/floorp-official',
199+ confvarsPath
200+ );
201+ await addMozConfig('--enable-update-channel=release');
202+ await addMozConfig('--with-branding=browser/branding/floorp-official');
203+
204+ // Read version from version_display.txt to use in update URLs
205+ const versionFromFile = (await $`cat ./browser/config/version_display.txt`).toString().trim();
206+ console.log(`Using version from file: ${versionFromFile}`);
207+
208+ // Set update URL based on platform
209+ const baseUrl = `floorp-update.ablaze.one/browser/${versionFromFile}/`;
210+ const platformUrls = {
211+ 'Windows-x64': `${baseUrl}WINNT/x86_64/`,
212+ 'Linux-x64': `${baseUrl}Linux/x86_64/`,
213+ 'macOS-x64': `${baseUrl}Darwin/x86_64/`
214+ };
215+
216+ if (platformUrls[process.env.BUILD_PLATFORM]) {
217+ await sedReplace(
218+ 'REPLACE_THIS_NORA_UPDATE_HOST_TARGET_PLACEHOLDER',
219+ platformUrls[process.env.BUILD_PLATFORM],
220+ updateUtilsPath
221+ );
222+ } else {
223+ console.error('Unsupported platform: ' + process.env.BUILD_PLATFORM);
224+ }
225+ }
226+
227+ await $`echo "mk_add_options MOZ_OBJDIR=./obj-artifact-build-output" >> mozconfig`;
228+
229+ // Special configuration for macOS
230+ if (process.env.BUILD_PLATFORM === 'macOS-x64') {
231+ await $`mkdir -p ~/tools`;
232+
233+ // Download and extract DMG tools
234+ await $`curl -L https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/ceSQWV1AS76UlhYJ0_PfJQ/artifacts/public/build/dmg.tar.zst -o dmg.tar.zst`;
235+ await $`tar -I zstd -xf dmg.tar.zst -C ~/tools`;
236+ await $`sudo chmod 777 ~/tools/dmg`;
237+
238+ await $`curl -L https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/N2SwCRLrRw2l-UWP4N7dhQ/artifacts/public/build/hfsplus.tar.zst -o hfsplus.tar.zst`;
239+ await $`tar -I zstd -xf hfsplus.tar.zst -C ~/tools`;
240+ await $`sudo chmod 777 ~/tools/hfsplus`;
241+
242+ // Add macOS specific mozconfig options
243+ const macConfig = [
244+ `DMG_TOOL=${os.homedir()}/tools/dmg/dmg`,
245+ `HFS_TOOL=${os.homedir()}/tools/dmg/hfsplus`,
246+ `MKFSHFS=${os.homedir()}/tools/hfsplus/newfs_hfs`
247+ ];
248+
249+ for (const option of macConfig) {
250+ await $`echo "${option}" >> mozconfig`;
251+ }
252+ }
142253
143- ./mach configure
144- git apply --ignore-space-change --ignore-whitespace .github/patches/packaging/*.patch
254+ // Run configure and apply patches
255+ await $`./mach configure`;
256+ await $`git apply --ignore-space-change --ignore-whitespace .github/patches/packaging/*.patch`;
145257
146258 - name : Possibly retrieve run ID if not provided
147259 run : |
0 commit comments