From de3375d2857fb91b929edf71c8216b3a5f1a0fb5 Mon Sep 17 00:00:00 2001 From: Bastian Eicher Date: Sun, 24 Mar 2024 16:45:56 +0100 Subject: [PATCH] Initial commit --- .editorconfig | 138 ++++++++++ .gitattributes | 5 + .github/workflows/build.yml | 46 ++++ .github/workflows/translate.yml | 51 ++++ .gitignore | 16 ++ .tx/config | 9 + 0bootstrap-dotnet.xml | 19 ++ 0bootstrap-dotnet.xml.template | 21 ++ 0install.ps1 | 35 +++ 0install.sh | 42 +++ COPYING.txt | 165 ++++++++++++ GitVersion.yml | 26 ++ README.md | 23 ++ build.ps1 | 8 + renovate.json | 17 ++ src/App.config | 44 ++++ src/BootstrapCommand.cs | 247 ++++++++++++++++++ src/Program.cs | 59 +++++ src/Properties/Resources.Designer.cs | 234 +++++++++++++++++ src/Properties/Resources.cs.resx | 138 ++++++++++ src/Properties/Resources.de.resx | 138 ++++++++++ src/Properties/Resources.el.resx | 138 ++++++++++ src/Properties/Resources.es.resx | 138 ++++++++++ src/Properties/Resources.fr.resx | 138 ++++++++++ src/Properties/Resources.id.resx | 138 ++++++++++ src/Properties/Resources.it.resx | 138 ++++++++++ src/Properties/Resources.ja.resx | 138 ++++++++++ src/Properties/Resources.ko.resx | 138 ++++++++++ src/Properties/Resources.nl.resx | 138 ++++++++++ src/Properties/Resources.pl.resx | 138 ++++++++++ src/Properties/Resources.pt-BR.resx | 138 ++++++++++ src/Properties/Resources.pt-PT.resx | 138 ++++++++++ src/Properties/Resources.resx | 178 +++++++++++++ src/Properties/Resources.ro.resx | 138 ++++++++++ src/Properties/Resources.ru.resx | 138 ++++++++++ src/Properties/Resources.tr.resx | 138 ++++++++++ src/Properties/Resources.zh.resx | 138 ++++++++++ src/ZeroInstall.Publish.Bootstrap.Cli.csproj | 60 +++++ src/ZeroInstall.Publish.Bootstrap.Cli.sln | 22 ++ ...tall.Publish.Bootstrap.Cli.sln.DotSettings | 24 ++ src/app.manifest | 27 ++ src/build.ps1 | 24 ++ src/nuget.config | 6 + 43 files changed, 3892 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/translate.yml create mode 100644 .gitignore create mode 100644 .tx/config create mode 100644 0bootstrap-dotnet.xml create mode 100644 0bootstrap-dotnet.xml.template create mode 100644 0install.ps1 create mode 100755 0install.sh create mode 100644 COPYING.txt create mode 100644 GitVersion.yml create mode 100644 README.md create mode 100644 build.ps1 create mode 100644 renovate.json create mode 100644 src/App.config create mode 100644 src/BootstrapCommand.cs create mode 100644 src/Program.cs create mode 100644 src/Properties/Resources.Designer.cs create mode 100644 src/Properties/Resources.cs.resx create mode 100644 src/Properties/Resources.de.resx create mode 100644 src/Properties/Resources.el.resx create mode 100644 src/Properties/Resources.es.resx create mode 100644 src/Properties/Resources.fr.resx create mode 100644 src/Properties/Resources.id.resx create mode 100644 src/Properties/Resources.it.resx create mode 100644 src/Properties/Resources.ja.resx create mode 100644 src/Properties/Resources.ko.resx create mode 100644 src/Properties/Resources.nl.resx create mode 100644 src/Properties/Resources.pl.resx create mode 100644 src/Properties/Resources.pt-BR.resx create mode 100644 src/Properties/Resources.pt-PT.resx create mode 100644 src/Properties/Resources.resx create mode 100644 src/Properties/Resources.ro.resx create mode 100644 src/Properties/Resources.ru.resx create mode 100644 src/Properties/Resources.tr.resx create mode 100644 src/Properties/Resources.zh.resx create mode 100644 src/ZeroInstall.Publish.Bootstrap.Cli.csproj create mode 100644 src/ZeroInstall.Publish.Bootstrap.Cli.sln create mode 100644 src/ZeroInstall.Publish.Bootstrap.Cli.sln.DotSettings create mode 100644 src/app.manifest create mode 100644 src/build.ps1 create mode 100644 src/nuget.config diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1ac245f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,138 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +keep_existing_linebreaks = true +max_line_length = off + +[*.md] +trim_trailing_whitespace = false + +[*.{json,xml,yml,yaml}] +indent_size = 2 + +[*.{bat,cmd}] +charset = latin1 +end_of_line = crlf + +[*.{ps1,psd1}] +end_of_line = crlf + +[*.sln] +end_of_line = crlf +indent_style = tab + +[*.{*proj,config,manifest,props,targets,nuspec}] +end_of_line = crlf +indent_size = 2 + +[*.resx] +indent_size = 2 +end_of_line = crlf +trim_trailing_whitespace = false +insert_final_newline = false + +[*.*.resx] +end_of_line = lf + +[*.Designer.cs] +trim_trailing_whitespace = false + +[*.cs] +end_of_line = crlf + +# Indentation +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_outdent_binary_ops = true +csharp_outdent_dots = true +csharp_align_linq_query = true +csharp_align_multiline_parameter = true +csharp_align_multiline_calls_chain = true +csharp_align_multiline_binary_expressions_chain = true +csharp_align_multiline_array_and_object_initializer = false + +# Line breaks +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = false +csharp_new_line_before_open_brace = all +csharp_blank_lines_around_single_line_field = 0 +csharp_blank_lines_inside_region = 0 +csharp_blank_lines_around_region = 0 +csharp_blank_lines_after_block_statements = 0 +csharp_empty_block_style = together +csharp_place_simple_blocks_on_single_line = true +csharp_place_simple_initializer_on_single_line = true +csharp_place_attribute_on_same_line = if_owner_is_single_line +csharp_place_expr_method_on_single_line = true +csharp_place_constructor_initializer_on_same_line = false +csharp_wrap_object_and_collection_initializer_style = chop_if_long +csharp_wrap_array_initializer_style = chop_if_long +csharp_wrap_parameters_style = chop_if_long +csharp_preserve_single_line_blocks = true +csharp_keep_existing_arrangement = true + +# Spacing +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_before_open_square_brackets = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_square_brackets = false +csharp_space_within_empty_braces = false + +# Style +csharp_parentheses_redundancy_style = remove_if_not_clarifies_precedence +csharp_allow_comment_after_lbrace = true +csharp_braces_for_ifelse = required_for_multiline +csharp_braces_for_for = required_for_multiline +csharp_braces_for_foreach = required_for_multiline +csharp_braces_for_while = required_for_multiline +csharp_braces_for_using = required_for_multiline +csharp_braces_for_lock = required_for_multiline +csharp_braces_for_fixed = required_for_multiline +csharp_style_var_for_built_in_types = false +csharp_style_var_when_type_is_apparent = true +csharp_style_expression_bodied_constructors = false +csharp_style_expression_bodied_accessors = true +csharp_style_expression_bodied_methods = true +csharp_style_expression_bodied_properties = true +csharp_local_function_body = expression_body +csharp_style_qualification_for_event = false +csharp_style_qualification_for_field = false +csharp_style_qualification_for_method = false +csharp_style_qualification_for_property = false +csharp_style_pattern_matching_over_as_with_null_check = true +csharp_style_pattern_matching_over_is_with_cast_check = true +csharp_style_object_initializer = true +csharp_style_collection_initializer = true +csharp_style_explicit_tuple_names = true +csharp_style_null_propagation = true +csharp_style_coalesce_expression = true +csharp_style_conditional_delegate_call = true +csharp_style_throw_expression = true +csharp_style_predefined_type_for_locals_parameters_members = true +csharp_style_predefined_type_for_member_access = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9286f84 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Disable linebreak normalization +* -text + +# Language-aware diff +*.cs diff=csharp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0e0b8c2 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,46 @@ +name: Build +on: [push, pull_request] + +jobs: + build: + runs-on: windows-latest + steps: + # Prepare + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + show-progress: false + - uses: gittools/actions/gitversion/setup@v1.1.1 + with: + versionSpec: '5.12.x' + - uses: gittools/actions/gitversion/execute@v1.1.1 + id: gitversion + + # Build + - name: Build + run: .\build.ps1 ${{steps.gitversion.outputs.nuGetVersion}} + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + path: 0boostrap-dotnet-${{steps.gitversion.outputs.nuGetVersion}}.* + + # Release + - name: Create GitHub Release + if: github.ref_type == 'tag' + uses: softprops/action-gh-release@v2 + with: + files: | + 0boostrap-dotnet-${{steps.gitversion.outputs.legacySemVer}}.xml + 0boostrap-dotnet-${{steps.gitversion.outputs.legacySemVer}}.tar.zst + body: | + **[Documentation and download instructions](https://docs.0install.net/tools/0boostrap/)** + + Based on [Zero Install .NET ${{steps.gitversion.outputs.nuGetVersion}}](https://github.com/0install/0install-dotnet/releases/${{steps.gitversion.outputs.nuGetVersion}}). + - name: Publish feed + if: github.ref_type == 'tag' + env: + GH_TOKEN: ${{secrets.PERSONAL_TOKEN}} + run: > + gh workflow run --repo=0install/apps Incoming + -f feed_url=https://github.com/${{github.repository}}/releases/download/${{github.ref_name}}/0boostrap-dotnet-${{steps.gitversion.outputs.nuGetVersion}}.xml + -f archive_url=https://github.com/${{github.repository}}/releases/download/${{github.ref_name}}/0boostrap-dotnet-${{steps.gitversion.outputs.nuGetVersion}}.tar.zst diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml new file mode 100644 index 0000000..170ce6f --- /dev/null +++ b/.github/workflows/translate.yml @@ -0,0 +1,51 @@ +name: Translate +on: + workflow_dispatch: {} + schedule: + - cron: '0 7 15 * *' + push: + branches: [master] + paths: + - '**/*.resx' + - '!**/*.*.resx' # Don't trigger again for updated translations + +jobs: + translate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + show-progress: false + + - name: Transifex Push + run: ./0install.sh run https://apps.0install.net/devel/transifex-cli.xml --token ${{secrets.TRANSIFEX_API_KEY}} push --source + - name: Transifex Pull (fully translated) + run: ./0install.sh run https://apps.0install.net/devel/transifex-cli.xml --token ${{secrets.TRANSIFEX_API_KEY}} pull --translations --mode translator --all --minimum-perc 100 + - name: Transifex Pull (partially translated) # Only languages that can be completed with Machine Translation + run: ./0install.sh run https://apps.0install.net/devel/transifex-cli.xml --token ${{secrets.TRANSIFEX_API_KEY}} pull --translations --mode translator --languages cs,el,es,fr,id,it,ja,ko,nl,pl,pt_PT,ro,ru,zh + + - name: DeepL Cache + uses: actions/cache@v4 + with: + path: '**/*.a.resx' + key: deepl + - name: DeepL Translate + uses: Yeah69/MrMeeseeks.ResXTranslationCombinator@main + env: + GITHUB_TOKEN: ${{github.token}} + with: + auth: ${{secrets.DEEPL_API_KEY}} + source-lang: en + localization-filter: cs;el;es;fr;id;it;ja;ko;nl;pl;pt-PT;ro;ru;zh + glossary-name: Zero Install + context: User interface for editor with menus and buttons. + excludes-regex: .*ImageResources.* + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + branch: translate + commit-message: Update translations + title: Update translations + body: Translations downloaded from Transifex and generated with DeepL diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bad1d67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.user +*.bak +*.a.resx +*.o.resx + +# Caches +/src/.vs/ +/src/.idea/ +/src/_ReSharper.*/ +/src/obj/ +/src/bin/ + +# Output +/artifacts/ +/0bootstrap-dotnet-*.xml +/0bootstrap-dotnet-*.tar.zst diff --git a/.tx/config b/.tx/config new file mode 100644 index 0000000..b49e0b3 --- /dev/null +++ b/.tx/config @@ -0,0 +1,9 @@ +[main] +host = https://www.transifex.com +type = RESX +source_lang = en +lang_map = pt_PT: pt-PT, pt_BR: pt-BR + +[o:eicher:p:0install-win:r:bootstrap-cli] +source_file = src/Properties/Resources.resx +file_filter = src/Properties/Resources..o.resx diff --git a/0bootstrap-dotnet.xml b/0bootstrap-dotnet.xml new file mode 100644 index 0000000..c5af7b2 --- /dev/null +++ b/0bootstrap-dotnet.xml @@ -0,0 +1,19 @@ + + + 0bootstrap - .NET version + generates executable that installs 0install itself along with launcher for a 0install app + 0bootstrap generates a executable that installs 0install itself along with a launcher for a 0install app. + https://docs.0install.net/tools/0bootstrap/ + + + + + + + + + + + + + diff --git a/0bootstrap-dotnet.xml.template b/0bootstrap-dotnet.xml.template new file mode 100644 index 0000000..08bc4b9 --- /dev/null +++ b/0bootstrap-dotnet.xml.template @@ -0,0 +1,21 @@ + + + 0bootstrap - .NET version + generates executable that installs 0install itself along with launcher for a 0install app + 0bootstrap generates a executable that installs 0install itself along with a launcher for a 0install app. + https://docs.0install.net/tools/0bootstrap/ + + + + + + + + + + + + + + + diff --git a/0install.ps1 b/0install.ps1 new file mode 100644 index 0000000..5ab7bd4 --- /dev/null +++ b/0install.ps1 @@ -0,0 +1,35 @@ +$ErrorActionPreference = "Stop" + +function Download-ZeroInstall { + $dir = "$env:LOCALAPPDATA\0install.net\bootstrapper" + $file = "$dir\0install.exe" + if (!(Test-Path $file)) { + mkdir -Force $dir | Out-Null + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls11,Tls12' + Invoke-WebRequest "https://get.0install.net/0install.exe" -OutFile $file + } + return $file +} + +function Run-ZeroInstall { + if (Get-Command 0install -ErrorAction SilentlyContinue) { + 0install @args + } else { + . $(Download-ZeroInstall) @args + } +} + +if ($args.Count -eq 0) { + echo "This script runs 0install from your PATH or downloads it on-demand." + echo "" + echo "To run 0install commands without adding 0install to your PATH:" + echo ".\0install.ps1 COMMAND [OPTIONS]" + echo "" + echo "To deploy 0install to your user profile:" + echo ".\0install.ps1 self deploy" + echo "" + echo "To deploy 0install to your machine:" + echo ".\0install.ps1 self deploy --machine" +} else { + Run-ZeroInstall @args +} diff --git a/0install.sh b/0install.sh new file mode 100755 index 0000000..376adcc --- /dev/null +++ b/0install.sh @@ -0,0 +1,42 @@ +#!/bin/sh +set -e + +if [ "$#" -eq 0 ]; then + echo "This script runs 0install from your PATH or downloads it on-demand." + echo "" + echo "To run 0install commands without adding 0install to your PATH:" + echo "./0install.sh --help" + echo "./0install.sh COMMAND [OPTIONS]" + echo "" + echo "To install to /usr/local:" + echo "sudo ./0install.sh install local" + echo "" + echo "To install to your home directory:" + echo "./0install.sh install home" + exit 1 +fi + +download() { + zeroinstall_release=0install-$(uname | tr '[:upper:]' '[:lower:]')-$(uname -m)-${ZEROINSTALL_VERSION:-latest} + download_dir=~/.cache/0install.net/$zeroinstall_release + + if [ ! -f $download_dir/files/0install ]; then + echo "Downloading 0install..." >&2 + rm -rf $download_dir + mkdir -p $download_dir + curl -sSL https://get.0install.net/$zeroinstall_release.tar.bz2 | tar xj --strip-components 1 --directory $download_dir + fi +} + +if [ "$1" = "install" ]; then + download + shift 1 + $download_dir/install.sh "$@" +else + if command -v 0install > /dev/null 2> /dev/null; then + 0install "$@" + else + download + $download_dir/files/0install "$@" + fi +fi diff --git a/COPYING.txt b/COPYING.txt new file mode 100644 index 0000000..29277aa --- /dev/null +++ b/COPYING.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/GitVersion.yml b/GitVersion.yml new file mode 100644 index 0000000..26b50b9 --- /dev/null +++ b/GitVersion.yml @@ -0,0 +1,26 @@ +mode: ContinuousDeployment + +# Generate 0install-compatible version numbers +branches: + # Mainline branches + main: + tag: rc-pre + develop: + tag: pre + increment: patch + + # Stabilization branches + release: + tag: rc + hotfix: + tag: rc + + # Topic branches + feature: + tag: pre-pre + pull-request: + tag: pre-pre + fallback: + source-branches: [main] + regex: ^(?!main|master|develop|release|hotfix|feature|pull|pr) + tag: pre-pre diff --git a/README.md b/README.md new file mode 100644 index 0000000..64cbf1e --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# 0bootstrap - .NET version + +[![Build](https://github.com/0install/0bootstrap-dotnet/workflows/Build/badge.svg)](https://github.com/0install/0bootstrap-dotnet/actions?query=workflow%3ABuild) +0bootstrap generates an executable that installs 0install itself along with a launcher for a 0install app. + +**[Documentation and download instructions](https://docs.0install.net/tools/0bootstrap/)** + +## Other versions + +See also the [Python version](https://github.com/0install/0bootstrap) of this program, for use on Linux and macOS. + +## Building + +The source code is in [`src/`](src/) and generated artifacts are placed in `artifacts/`. +The source code does not contain version numbers. Instead the version is determined during CI using [GitVersion](https://gitversion.net/). + +To build install [Visual Studio 2022 v17.8 or newer](https://www.visualstudio.com/downloads/) and run `.\build.ps1`. + +## Contributing + +We welcome contributions to this project such as bug reports, recommendations, pull requests and [translations](https://www.transifex.com/eicher/0install-win/). If you have any questions feel free to pitch in on our [friendly mailing list](https://0install.net/support.html#lists). + +This repository contains an [EditorConfig](http://editorconfig.org/) file. Please make sure to use an editor that supports it to ensure consistent code style, file encoding, etc.. For full tooling support for all style and naming conventions consider using JetBrains' [ReSharper](https://www.jetbrains.com/resharper/) or [Rider](https://www.jetbrains.com/rider/) products. diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..aedad50 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,8 @@ +Param ($Version = "1.0.0-pre") +$ErrorActionPreference = "Stop" +pushd $PSScriptRoot + +src\build.ps1 $Version +.\0install.ps1 run --batch https://apps.0install.net/0install/0template.xml 0bootstrap-dotnet.xml.template version=$Version + +popd diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..87b08fb --- /dev/null +++ b/renovate.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base", ":disableDependencyDashboard"], + "packageRules": [ + { + "matchPackagePatterns": ["^NanoByte", "^ZeroInstall"], + "groupName": "Zero Install .NET", + "automerge": true, + "automergeType": "branch" + }, + { + "matchPackagePatterns": ["gittools", "Mono.Cecil", "Vestris.ResourceLib"], + "automerge": true, + "automergeType": "branch" + } + ] +} diff --git a/src/App.config b/src/App.config new file mode 100644 index 0000000..8d3c777 --- /dev/null +++ b/src/App.config @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/BootstrapCommand.cs b/src/BootstrapCommand.cs new file mode 100644 index 0000000..fb9f25e --- /dev/null +++ b/src/BootstrapCommand.cs @@ -0,0 +1,247 @@ +// Copyright Bastian Eicher et al. +// Licensed under the GNU Lesser Public License + +using System.ComponentModel; +using System.Globalization; +using System.Net; +using IniParser; +using Mono.Cecil; +using NanoByte.Common; +using NanoByte.Common.Collections; +using NanoByte.Common.Info; +using NanoByte.Common.Net; +using NanoByte.Common.Storage; +using NanoByte.Common.Streams; +using NanoByte.Common.Tasks; +using NDesk.Options; +using Vestris.ResourceLib; +using ZeroInstall.Client; +using ZeroInstall.DesktopIntegration; +using ZeroInstall.Model; +using ZeroInstall.Publish.Bootstrap.Cli.Properties; +using ZeroInstall.Store.Configuration; +using ZeroInstall.Store.Feeds; +using ZeroInstall.Store.Icons; +using ZeroInstall.Store.Trust; + +namespace ZeroInstall.Publish.Bootstrap.Cli; + +/// +/// Builds a customized Zero Install Bootstrapper for running or integrating a specific feed. +/// +internal class BootstrapCommand +{ + private readonly ITaskHandler _handler; + private readonly IFeedCache _feedCache = FeedCaches.Default(OpenPgp.Verifying()); + private readonly IIconStore _iconStore; + + /// The feed URI of the target application to bootstrap. + private readonly FeedUri _feedUri; + + /// The path of the bootstrap EXE to build. + private readonly string _outputFile; + + /// + /// Parses command-line arguments. + /// + /// The command-line arguments to be parsed. + /// A callback object used when the the user needs to be asked questions or informed about download and IO tasks. + /// The user asked to see help information, version information, etc.. + /// contains unknown options. + public BootstrapCommand(IEnumerable args, ITaskHandler handler) + { + _handler = handler; + _iconStore = IconStores.Cache(Config.LoadSafe(), handler); + + switch (BuildOptions().Parse(args)) + { + case [var feedUri, var outputFile]: + _feedUri = new(feedUri); + _outputFile = Path.GetFullPath(outputFile); + break; + + default: + throw new OptionException(string.Format(Resources.MissingArguments, "0bootstrap --help"), ""); + } + } + + #region Options + /// Overwrite existing files. + private bool _force; + + /// Additional command-line arguments to pass to the application launched by the feed. + private string? _appArgs; + + /// Command-line arguments to pass to 0install integrate. null to not call '0install integrate' at all. + private string? _integrateArgs; + + /// The URI of the catalog to replace the default catalog. Only applies if Zero Install is not already deployed. + private FeedUri? _catalogUri; + + /// Offer the user to choose a custom path for storing implementations. + private bool _customizableStorePath; + + /// Show the estimated disk space required (in bytes). Only works when is true. + private int? _estimatedRequiredSpace; + + /// Set Zero Install configuration options. Only overrides existing config files if Zero Install is not already deployed. + private readonly Config _config = new(); + + /// A directory containing additional content to be embedded in the bootstrapper. + private DirectoryInfo? _contentDir; + + /// Path or URI to the boostrap template executable. + private Uri _template = new("https://get.0install.net/zero-install.exe"); + + private OptionSet BuildOptions() + { + var options = new OptionSet + { + // Version information + { + "V|version", () => Resources.OptionVersion, _ => + { + Console.WriteLine(AppInfo.Current.Name + @" " + AppInfo.Current.Version + Environment.NewLine + AppInfo.Current.Copyright + Environment.NewLine + Resources.LicenseInfo); + throw new OperationCanceledException(); // Don't handle any of the other arguments + } + }, + + {"f|force", () => Resources.OptionForce, _ => _force = true}, + {"a|app-args=", () => Resources.OptionAppArgs, x => _appArgs = x}, + {"i|integrate-args=", () => Resources.OptionIntegrateArgs, x => _integrateArgs = x}, + {"catalog-uri=", () => Resources.OptionCatalogUri, (FeedUri x) => _catalogUri = x}, + {"customizable-store-path", () => Resources.OptionCustomizableStorePath, _ => _customizableStorePath = true}, + {"estimated-required-space=", () => Resources.OptionEstimatedRequiredSpace, (int x) => + { + _customizableStorePath = true; + _estimatedRequiredSpace = x; + } + }, + {"c|config==", () => Resources.OptionConfig, (key, value) => _config.SetOption(key, value) }, + {"content=", () => Resources.OptionContent, x => _contentDir = new(x)}, + {"template=", () => Resources.OptionTemplate, (Uri x) => _template = x} + }; + + options.Add("h|help|?", () => Resources.OptionHelp, _ => + { + Console.WriteLine(Resources.DescriptionBootstrap); + Console.WriteLine(); + Console.WriteLine(Resources.Usage); + Console.WriteLine(@"0bootstrap [OPTIONS] FEED-URI OUTPUT-FILE"); + Console.WriteLine(); + Console.WriteLine(Resources.Options); + options.WriteOptionDescriptions(Console.Out); + + // Don't handle any of the other arguments + throw new OperationCanceledException(); + }); + + return options; + } + #endregion + + /// + /// Executes the commands specified by the command-line arguments. + /// + public void Execute() + { + DownloadFeed(); + var feed = _feedCache.GetFeed(_feedUri) ?? throw new FileNotFoundException(); + string? keyFingerprint = _feedCache.GetSignatures(_feedUri).OfType().FirstOrDefault()?.FormatFingerprint(); + + string? icon = feed.Icons.GetIcon(Icon.MimeTypeIco)?.To(_iconStore.GetFresh); + string? splashScreen = feed.SplashScreens.GetIcon(Icon.MimeTypePng)?.To(_iconStore.GetFresh); + + InitializeFromTemplate(); + + _handler.RunTask(new ActionTask(Resources.BuildingBootstrapper, () => + { + using var bootstrapConfig = BuildBootstrapConfig(feed, keyFingerprint, customSplashScreen: splashScreen != null); + ModifyEmbeddedResources(bootstrapConfig, splashScreen); + if (icon != null) ReplaceIcon(icon); + })); + } + + private void DownloadFeed() + => _handler.RunTask(new ActionTask( + string.Format(Resources.Downloading, _feedUri.ToStringRfc()), + () => ZeroInstallClient.Detect.SelectAsync(_feedUri, refresh: true).Wait())); + + private Stream BuildBootstrapConfig(Feed feed, string? keyFingerprint, bool customSplashScreen) + { + var iniData = _config.ToIniData(); + iniData.Sections.Add(new("bootstrap") + { + Keys = + { + ["key_fingerprint"] = keyFingerprint ?? "", + ["app_uri"] = _feedUri.ToStringRfc(), + ["app_name"] = feed.Name, + ["app_args"] = _appArgs ?? "", + ["integrate_args"] = _integrateArgs ?? "", + ["catalog_uri"] = _catalogUri?.ToStringRfc() ?? "", + ["show_app_name_below_splash_screen"] = (!customSplashScreen).ToString().ToLowerInvariant(), + ["customizable_store_path"] = _customizableStorePath.ToString().ToLowerInvariant(), + ["estimated_required_space"] = _estimatedRequiredSpace?.ToString(CultureInfo.InvariantCulture) ?? "" + } + }); + + var stream = new MemoryStream(); + using (var writer = new StreamWriter(stream, EncodingUtils.Utf8, bufferSize: 1024, leaveOpen: true)) + new StreamIniDataParser().WriteData(writer, iniData); + stream.Position = 0; + return stream; + } + + private void InitializeFromTemplate() + { + if (File.Exists(_outputFile) && !_force) throw new IOException(string.Format(Resources.FileAlreadyExists, _outputFile)); + + if (_template.IsFile) + _handler.RunTask(new ReadFile(_template.LocalPath, stream => stream.CopyToFile(_outputFile))); + else + _handler.RunTask(new DownloadFile(_template, _outputFile)); + } + + private void ModifyEmbeddedResources(Stream bootstrapConfig, string? splashScreenPath) + { + using var assembly = AssemblyDefinition.ReadAssembly(_outputFile, new() {ReadWrite = true}); + assembly.Name.Name = Path.GetFileNameWithoutExtension(_outputFile); + + var resources = assembly.MainModule.Resources; + + void Replace(string name, Stream stream) + { + resources.RemoveAll(x => x.Name == name); + resources.Add(new EmbeddedResource(name, ManifestResourceAttributes.Public, stream)); + } + + Replace("ZeroInstall.BootstrapConfig.ini", bootstrapConfig); + + using var splashScreen = splashScreenPath?.To(File.OpenRead); + if (splashScreen != null) Replace("ZeroInstall.SplashScreen.png", splashScreen); + + _contentDir?.Walk( + fileAction: file => resources.Add(new EmbeddedResource( + name: "ZeroInstall.content." + WebUtility.UrlDecode(file.RelativeTo(_contentDir).Replace(Path.DirectorySeparatorChar, '.')), + ManifestResourceAttributes.Public, + file.Open(FileMode.Open, FileAccess.Read, FileShare.Read)))); + + assembly.Write(); + } + + private void ReplaceIcon(string path) + { + try + { + new IconDirectoryResource(new(path)).SaveTo(_outputFile); + } + #region Error handling + catch (Win32Exception ex) + { + // Wrap exception since only certain exception types are allowed + throw new IOException(ex.Message, ex); + } + #endregion + } +} diff --git a/src/Program.cs b/src/Program.cs new file mode 100644 index 0000000..fb21fea --- /dev/null +++ b/src/Program.cs @@ -0,0 +1,59 @@ +// Copyright Bastian Eicher et al. +// Licensed under the GNU Lesser Public License + +using System.Net; +using System.Security; +using NanoByte.Common; +using NanoByte.Common.Net; +using NanoByte.Common.Tasks; +using NDesk.Options; +using ZeroInstall.Publish; +using ZeroInstall.Publish.Bootstrap.Cli; + +ProcessUtils.SanitizeEnvironmentVariables(); +NetUtils.ApplyProxy(); +ServicePointManager.DefaultConnectionLimit = 16; + +using var handler = new AnsiCliTaskHandler(); + +try +{ + new BootstrapCommand(args is [] ? ["--help"] : args, handler).Execute(); + return (int)ExitCode.OK; +} +#region Error handling +catch (OperationCanceledException) +{ + return (int)ExitCode.UserCanceled; +} +catch (Exception ex) when (ex is ArgumentException or OptionException or KeyNotFoundException) +{ + handler.Error(ex); + return (int)ExitCode.InvalidArguments; +} +catch (WebException ex) +{ + handler.Error(ex); + return (int)ExitCode.WebError; +} +catch (InvalidDataException ex) +{ + handler.Error(ex); + return (int)ExitCode.InvalidData; +} +catch (IOException ex) +{ + handler.Error(ex); + return (int)ExitCode.IOError; +} +catch (Exception ex) when (ex is UnauthorizedAccessException or SecurityException) +{ + handler.Error(ex); + return (int)ExitCode.AccessDenied; +} +catch (NotSupportedException ex) +{ + handler.Error(ex); + return (int)ExitCode.NotSupported; +} +#endregion diff --git a/src/Properties/Resources.Designer.cs b/src/Properties/Resources.Designer.cs new file mode 100644 index 0000000..0341a48 --- /dev/null +++ b/src/Properties/Resources.Designer.cs @@ -0,0 +1,234 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ZeroInstall.Publish.Bootstrap.Cli.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ZeroInstall.Publish.Bootstrap.Cli.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Building bootstrapper. + /// + internal static string BuildingBootstrapper { + get { + return ResourceManager.GetString("BuildingBootstrapper", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Builds a customized Zero Install Bootstrapper for running or integrating a specific feed.. + /// + internal static string DescriptionBootstrap { + get { + return ResourceManager.GetString("DescriptionBootstrap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Downloading {0}. + /// + internal static string Downloading { + get { + return ResourceManager.GetString("Downloading", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The file '{0}' already exists. Use --force to overwrite.. + /// + internal static string FileAlreadyExists { + get { + return ResourceManager.GetString("FileAlreadyExists", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This program comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. + ///You may redistribute copies of this program under the terms of the GNU Lesser General Public License.. + /// + internal static string LicenseInfo { + get { + return ResourceManager.GetString("LicenseInfo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Missing arguments. Try {0}. + /// + internal static string MissingArguments { + get { + return ResourceManager.GetString("MissingArguments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Additional command-line {ARGUMENTS} to pass to the application launched by the feed.. + /// + internal static string OptionAppArgs { + get { + return ResourceManager.GetString("OptionAppArgs", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The {URI} of the catalog to replace the default catalog. Only applies if Zero Install is not already deployed.. + /// + internal static string OptionCatalogUri { + get { + return ResourceManager.GetString("OptionCatalogUri", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Set a Zero Install configuration {0:OPTION} to a specific {1:VALUE}. Only overrides existing config files if Zero Install is not already deployed.. + /// + internal static string OptionConfig { + get { + return ResourceManager.GetString("OptionConfig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {PATH} to a directory containing additional content to be embedded in the bootstrapper. You can generate such a directory using '0install export'.. + /// + internal static string OptionContent { + get { + return ResourceManager.GetString("OptionContent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Offer the user to choose a custom path for storing implementations.. + /// + internal static string OptionCustomizableStorePath { + get { + return ResourceManager.GetString("OptionCustomizableStorePath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show the estimated disk {SPACE} required (in bytes). Implicitly sets --customizable-store-path too.. + /// + internal static string OptionEstimatedRequiredSpace { + get { + return ResourceManager.GetString("OptionEstimatedRequiredSpace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Overwrite existing files.. + /// + internal static string OptionForce { + get { + return ResourceManager.GetString("OptionForce", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show the built-in help text.. + /// + internal static string OptionHelp { + get { + return ResourceManager.GetString("OptionHelp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Command-line {ARGUMENTS} to pass to '0install integrate'. Leave unset to not call '0install integrate' at all.. + /// + internal static string OptionIntegrateArgs { + get { + return ResourceManager.GetString("OptionIntegrateArgs", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Options:. + /// + internal static string Options { + get { + return ResourceManager.GetString("Options", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {URI} or path to the boostrap template executable. Leave unset to download from default location.. + /// + internal static string OptionTemplate { + get { + return ResourceManager.GetString("OptionTemplate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Display version information.. + /// + internal static string OptionVersion { + get { + return ResourceManager.GetString("OptionVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Usage:. + /// + internal static string Usage { + get { + return ResourceManager.GetString("Usage", resourceCulture); + } + } + } +} diff --git a/src/Properties/Resources.cs.resx b/src/Properties/Resources.cs.resx new file mode 100644 index 0000000..074f9ee --- /dev/null +++ b/src/Properties/Resources.cs.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sestavení bootstrapperu + Automatically translated. + + + Sestaví přizpůsobený zaváděcí program Zero Install pro spuštění nebo integraci konkrétního kanálu. + Automatically translated. + + + {0} se stahuje + Manually overriden. + + + Soubor '{0}' již existuje. Pro přepsání použijte --force. + Automatically translated. + + + Na tento program se v rozsahu povoleném zákonem nevztahuje ABSOLUTNĚ ŽÁDNÁ ZÁRUKA. +Kopie tohoto programu můžete šířit za podmínek licence GNU Lesser General Public License. + Automatically translated. + + + Chybějící argumenty. Zkuste {0} + Automatically translated. + + + Další příkazový řádek {ARGUMENTS} pro předání aplikaci spouštěné kanálem. + Automatically translated. + + + Katalog {URI}, který nahradí výchozí katalog. Platí pouze v případě, že nulová instalace ještě není nasazena. + Automatically translated. + + + Nastavení konfigurace nulové instalace {0:OPTION} na konkrétní {1:VALUE}. Přepisuje pouze existující konfigurační soubory, pokud ještě není Zero Install nasazen. + Automatically translated. + + + {PATH} do adresáře obsahujícího další obsah, který má být vložen do bootstrapperu. Takový adresář můžete vygenerovat pomocí příkazu '0install export'. + Automatically translated. + + + Nabídněte uživateli možnost zvolit si vlastní cestu pro ukládání implementací. + Automatically translated. + + + Zobrazení odhadované potřeby disku {SPACE} (v bytech). Implicitně nastavuje také --customizable-store-path. + Automatically translated. + + + Přepis stávajících souborů. + Automatically translated. + + + Zobrazení vestavěného textu nápovědy. + Automatically translated. + + + Příkazový řádek {ARGUMENTS}, který se předá '0install integrate'. Ponechte hodnotu unset, aby se příkaz '0install integrate' vůbec nevolal. + Automatically translated. + + + Možnosti: + Automatically translated. + + + {URI} nebo cesta ke spustitelnému souboru šablony boostrap. Pro stahování z výchozího umístění ponechte hodnotu nenastavenou. + Automatically translated. + + + Zobrazení informací o verzi. + Automatically translated. + + + Použití: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.de.resx b/src/Properties/Resources.de.resx new file mode 100644 index 0000000..c169d1a --- /dev/null +++ b/src/Properties/Resources.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bootstrapper bauen + Manually overriden. + + + Erstellt einen angepassten Zero Install Bootstrapper zum Ausführen oder Integrieren einer bestimmten Feed. + Manually overriden. + + + {0} wird heruntergeladen + Manually overriden. + + + Die Datei '{0}' existiert bereits. Verwenden Sie --force zum Überschreiben. + Manually overriden. + + + Für dieses Programm gibt es ABSOLUT KEINE GARANTIEN, soweit dies gesetzlich zulässig ist. +Sie dürfen unter den Bedingungen der GNU Lesser General Public License Kopien dieses Programmes weitergeben. + Manually overriden. + + + Fehlende Argumente. Probieren Sie {0} + Manually overriden. + + + Zusätzliche Befehlszeilen {ARGUMENTE} zur Übergabe an die von Feed gestartete Anwendung. + Manually overriden. + + + Die {URI} des Katalogs, der den Standardkatalog ersetzen soll. Wird nur wirksam, wenn Zero Install nicht bereits deployt wurde. + Manually overriden. + + + Setzen Sie eine Zero Install Konfiguration {0:OPTION} auf einen bestimmten {1:WERT}. Überschreibt bereits vorhandene Konfigurationsdateien nur, wenn Zero Install nicht bereits deployt wurde. + Manually overriden. + + + {PATH} zu ein Verzeichnis mit zusätzlichen Inhalten, die in den Bootstrapper eingebettet werden sollen. Sie können ein solches Verzeichnis mit '0install export' erzeugen. + Manually overriden. + + + Bietet dem Benutzer an, einen benutzerdefinierten Pfad für die Speicherung von Implementierungen zu wählen. + Manually overriden. + + + Zeigt den geschätzten benötigte {SPEICHERPLATZ} an (in Bytes). Setzt implizit auch --customizable-store-path. + Manually overriden. + + + Überschreibt vorhandene Dateien. + Manually overriden. + + + Zeigt den eingebauten Hilfe-Text an. + Manually overriden. + + + Befehlszeilen {ARGUMENTE} zur Übergabe an '0install integrate'. Lassen Sie den Wert ungesetzt, um '0install integrate' überhaupt nicht aufzurufen. + Manually overriden. + + + Optionen: + Manually overriden. + + + {URI} oder Pfad zum Boostrap-Template. Lassen Sie das Feld leer, um das Template vom Standardort herunterzuladen. + Manually overriden. + + + Zeigt die Versionsinformationen an. + Manually overriden. + + + Verwendung: + Manually overriden. + + \ No newline at end of file diff --git a/src/Properties/Resources.el.resx b/src/Properties/Resources.el.resx new file mode 100644 index 0000000..d1b8ccd --- /dev/null +++ b/src/Properties/Resources.el.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Δημιουργία bootstrapper + Automatically translated. + + + Κατασκευάζει ένα προσαρμοσμένο Zero Install Bootstrapper για την εκτέλεση ή την ενσωμάτωση μιας συγκεκριμένης τροφοδοσίας. + Automatically translated. + + + Λήψη {0} + Manually overriden. + + + Το αρχείο '{0}' υπάρχει ήδη. Χρησιμοποιήστε το --force για να το αντικαταστήσετε. + Automatically translated. + + + Το πρόγραμμα έρχεται με ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ, στο βαθμό που επιτρέπεται από το νόμο. +Μπορείτε να αναδιανέμετε αντίγραφα του προγράμματος υπό τους όρους της GNU Lesser General Public License. + Manually overriden. + + + Λείπουν επιχειρήματα. Δοκιμάστε {0} + Manually overriden. + + + Πρόσθετη γραμμή εντολών {ARGUMENTS} για να μεταβιβαστεί στην εφαρμογή που εκκινείται από την τροφοδοσία. + Automatically translated. + + + Το {URI} του καταλόγου για την αντικατάσταση του προεπιλεγμένου καταλόγου. Ισχύει μόνο εάν δεν έχει ήδη αναπτυχθεί το Zero Install. + Automatically translated. + + + Ορίστε μια διαμόρφωση Zero Install {0:OPTION} σε ένα συγκεκριμένο {1:VALUE}. Αντικαθιστά μόνο τα υπάρχοντα αρχεία ρυθμίσεων εάν το Zero Install δεν έχει ήδη αναπτυχθεί. + Automatically translated. + + + {PATH} σε έναν κατάλογο που περιέχει πρόσθετο περιεχόμενο που θα ενσωματωθεί στον bootstrapper. Μπορείτε να δημιουργήσετε έναν τέτοιο κατάλογο χρησιμοποιώντας το '0install export'. + Automatically translated. + + + Προσφέρει στο χρήστη τη δυνατότητα να επιλέξει μια προσαρμοσμένη διαδρομή για την αποθήκευση των υλοποιήσεων. + Automatically translated. + + + Εμφάνιση της εκτιμώμενης απαιτούμενης τιμής του δίσκου {SPACE} (σε bytes). Θέτει σιωπηρά και το --customizable-store-path. + Automatically translated. + + + Αντικατάσταση υφιστάμενων αρχείων. + Automatically translated. + + + Εμφάνιση του ενσωματωμένου κειμένου βοήθειας. + Manually overriden. + + + Γραμμή εντολών {ARGUMENTS} για να περάσετε στο '0install integrate'. Αφήστε unset για να μην καλέσετε καθόλου το '0install integrate'. + Automatically translated. + + + Επιλογές: + Manually overriden. + + + {URI} ή διαδρομή προς το εκτελέσιμο πρότυπο boostrap. Αφήστε το unset για λήψη από την προεπιλεγμένη τοποθεσία. + Automatically translated. + + + Εμφάνιση πληροφοριών έκδοσης. + Manually overriden. + + + Χρήση: + Manually overriden. + + \ No newline at end of file diff --git a/src/Properties/Resources.es.resx b/src/Properties/Resources.es.resx new file mode 100644 index 0000000..63cc10e --- /dev/null +++ b/src/Properties/Resources.es.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Construcción del bootstrapper + Automatically translated. + + + Construye un Bootstrapper Zero Install personalizado para ejecutar o integrar un feed específico. + Automatically translated. + + + Descargando {0} + Manually overriden. + + + El fichero '{0}' ya existe. Utilice --force para sobrescribirlo. + Automatically translated. + + + Este programa no incluye ABSOLUTAMENTE NINGUNA GARANTÍA, en la medida permitida por la ley. +Puede redistribuir copias de este programa bajo los términos de la Licencia Pública General Reducida GNU. + Automatically translated. + + + Faltan argumentos. Pruebe {0} + Automatically translated. + + + Línea de comandos adicional {ARGUMENTS} para pasar a la aplicación lanzada por el feed. + Automatically translated. + + + El {URI} del catálogo para reemplazar el catálogo por defecto. Sólo se aplica si Zero Install no está ya desplegado. + Automatically translated. + + + Establecer una configuración de Instalación Cero {0:OPTION} a un {1:VALUE} específico. Sólo anula los archivos de configuración existentes si la Instalación Cero no está ya desplegada. + Automatically translated. + + + {PATH} a un directorio que contiene contenido adicional que se incrustará en el bootstrapper. Puede generar dicho directorio utilizando '0install export'. + Automatically translated. + + + Ofrece al usuario la posibilidad de elegir una ruta personalizada para almacenar las implementaciones. + Automatically translated. + + + Muestra el disco estimado {SPACE} requerido (en bytes). Establece implícitamente --customizable-store-path también. + Automatically translated. + + + Sobrescribir archivos existentes. + Automatically translated. + + + Mostrar el texto de ayuda incorporado. + Automatically translated. + + + Línea de comandos {ARGUMENTS} para pasar a '0install integrate'. Deje sin establecer para no llamar a '0install integrate' en absoluto. + Automatically translated. + + + Opciones: + Automatically translated. + + + {URI} o ruta al ejecutable de la plantilla boostrap. Dejar sin definir para descargar desde la ubicación por defecto. + Automatically translated. + + + Muestra información sobre la versión. + Automatically translated. + + + Utilización: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.fr.resx b/src/Properties/Resources.fr.resx new file mode 100644 index 0000000..b26d981 --- /dev/null +++ b/src/Properties/Resources.fr.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Construction du bootstrapper + Automatically translated. + + + Construit un Bootstrapper Zero Install personnalisé pour l'exécution ou l'intégration d'un flux spécifique. + Automatically translated. + + + Téléchargement de {0} + Manually overriden. + + + Le fichier '{0}' existe déjà. Utilisez --force pour l'écraser. + Automatically translated. + + + Ce programme est fourni SANS AUCUNE GARANTIE, dans les limites prévues par la loi applicable. +Vous pouvez redistribuer des copies de ce programme suivant les termes de la “GNU Lesser General Public License”. + Manually overriden. + + + Arguments manquants. Essayer {0} + Automatically translated. + + + Ligne de commande supplémentaire {ARGUMENTS} à transmettre à l'application lancée par le flux. + Automatically translated. + + + Le site {URI} du catalogue qui remplacera le catalogue par défaut. Ne s'applique que si Zero Install n'est pas déjà déployé. + Automatically translated. + + + Définir une configuration de Zero Install {0:OPTION} à une {1:VALUE} spécifique. Ne remplace les fichiers de configuration existants que si Zero Install n'est pas déjà déployé. + Automatically translated. + + + {PATH} vers un répertoire contenant du contenu supplémentaire à intégrer dans le bootstrapper. Vous pouvez générer un tel répertoire en utilisant '0install export'. + Automatically translated. + + + Offre à l'utilisateur la possibilité de choisir un chemin d'accès personnalisé pour le stockage des implémentations. + Automatically translated. + + + Affiche l'estimation du disque {SPACE} nécessaire (en octets). Définit aussi implicitement --customizable-store-path. + Automatically translated. + + + Ecraser les fichiers existants. + Automatically translated. + + + Affiche le texte d'aide encastrée. + Manually overriden. + + + Ligne de commande {ARGUMENTS} à transmettre à '0install integrate'. Laissez le paramètre non défini pour ne pas appeler '0install integrate' du tout. + Automatically translated. + + + Options : + Manually overriden. + + + {URI} ou le chemin d'accès à l'exécutable du modèle boostrap. Laissez ce champ vide pour télécharger à partir de l'emplacement par défaut. + Automatically translated. + + + Affiche les informations de version. + Manually overriden. + + + Usage: + Manually overriden. + + \ No newline at end of file diff --git a/src/Properties/Resources.id.resx b/src/Properties/Resources.id.resx new file mode 100644 index 0000000..cb5f910 --- /dev/null +++ b/src/Properties/Resources.id.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Membangun bootstrapper + Automatically translated. + + + Membangun Zero Install Bootstrapper yang disesuaikan untuk menjalankan atau mengintegrasikan feed tertentu. + Automatically translated. + + + Mengunduh {0} + Manually overriden. + + + File '{0}' sudah ada. Gunakan --force untuk menimpa. + Automatically translated. + + + Program ini hadir tanpa jaminan sama sekali, sejauh diizinkan oleh hukum. +Anda dapat menyebarluaskan salinan program ini di bawah ketentuan Lisensi Publik Umum GNU Lesser. + Automatically translated. + + + Argumen yang hilang. Mencoba {0} + Automatically translated. + + + Baris perintah tambahan {ARGUMENTS} untuk diteruskan ke aplikasi yang diluncurkan oleh feed. + Automatically translated. + + + Katalog {URI} untuk menggantikan katalog default. Hanya berlaku jika Zero Install belum digunakan. + Automatically translated. + + + Mengatur konfigurasi Zero Install {0:OPTION} ke {1:VALUE} tertentu. Hanya mengganti file konfigurasi yang sudah ada jika Zero Install belum digunakan. + Automatically translated. + + + {PATH} ke direktori yang berisi konten tambahan yang akan disematkan pada bootstrapper. Anda dapat membuat direktori seperti itu dengan menggunakan '0install export'. + Automatically translated. + + + Menawarkan pengguna untuk memilih jalur khusus untuk menyimpan implementasi. + Automatically translated. + + + Menampilkan perkiraan disk {SPACE} yang dibutuhkan (dalam byte). Secara implisit juga mengatur --customizable-store-path. + Automatically translated. + + + Menimpa file yang sudah ada. + Automatically translated. + + + Menampilkan teks bantuan bawaan. + Automatically translated. + + + Baris perintah {ARGUMENTS} untuk diteruskan ke '0install integrate'. Biarkan tidak diatur untuk tidak memanggil '0install integrate' sama sekali. + Automatically translated. + + + Opsi: + Automatically translated. + + + {URI} atau jalur ke templat boostrap yang dapat dieksekusi. Biarkan tidak diatur untuk mengunduh dari lokasi default. + Automatically translated. + + + Menampilkan informasi versi. + Automatically translated. + + + Penggunaan: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.it.resx b/src/Properties/Resources.it.resx new file mode 100644 index 0000000..0c9d8ee --- /dev/null +++ b/src/Properties/Resources.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Costruire il bootstrapper + Automatically translated. + + + Costruisce un Bootstrapper Zero Install personalizzato per l'esecuzione o l'integrazione di un feed specifico. + Automatically translated. + + + Download di {0} in corso + Manually overriden. + + + Il file '{0}' esiste già. Usare --force per sovrascriverlo. + Automatically translated. + + + Questo programma non è accompagnato da alcuna garanzia, nei limiti consentiti dalla legge. +È possibile ridistribuire copie di questo programma secondo i termini della GNU Lesser General Public License. + Automatically translated. + + + Argomenti mancanti. Prova {0} + Automatically translated. + + + Linea di comando aggiuntiva {ARGUMENTS} da passare all'applicazione lanciata dal feed. + Automatically translated. + + + {URI} del catalogo da sostituire a quello predefinito. Si applica solo se Zero Install non è già stato distribuito. + Automatically translated. + + + Imposta una configurazione di Zero Install {0:OPTION} su uno specifico {1:VALUE}. Sovrascrive i file di configurazione esistenti solo se Zero Install non è già stato distribuito. + Automatically translated. + + + {PATH} a una cartella contenente contenuti aggiuntivi da incorporare nel bootstrapper. È possibile generare tale directory usando '0install export'. + Automatically translated. + + + Offre all'utente la possibilità di scegliere un percorso personalizzato per la memorizzazione delle implementazioni. + Automatically translated. + + + Mostra la stima del disco {SPACE} richiesto (in byte). Imposta implicitamente anche --percorso di memorizzazione personalizzabile. + Automatically translated. + + + Sovrascrittura dei file esistenti. + Automatically translated. + + + Mostra il testo di aiuto incorporato. + Automatically translated. + + + Linea di comando {ARGUMENTS} da passare a '0install integrate'. Lasciare unset per non chiamare affatto '0install integrate'. + Automatically translated. + + + Opzioni: + Automatically translated. + + + {URI} o il percorso dell'eseguibile del modello boostrap. Lasciare non impostato per scaricare dal percorso predefinito. + Automatically translated. + + + Visualizzazione delle informazioni sulla versione. + Automatically translated. + + + Utilizzo: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.ja.resx b/src/Properties/Resources.ja.resx new file mode 100644 index 0000000..b77e856 --- /dev/null +++ b/src/Properties/Resources.ja.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ブートストラッパーの構築 + Automatically translated. + + + 特定のフィードを実行または統合するためにカスタマイズされたゼロインストールブートストラッパーを構築します。 + Automatically translated. + + + {0}をダウンロード中 + Manually overriden. + + + ファイル '{0}' はすでに存在します。上書きするには --force を使用してください。 + Automatically translated. + + + このプログラムには、法律で認められている限りにおいて、まったくの無保証が付きます。 +あなたは、GNU Lesser General Public Licenseの条件の下で、このプログラムのコピーを再配布することができます。 + Automatically translated. + + + 引数がありません。試す{0} + Automatically translated. + + + フィードによって起動されるアプリケーションに渡す追加のコマンドライン{ARGUMENTS}. + Automatically translated. + + + デフォルトのカタログを置き換えるカタログの{URI} 。Zero Installがまだデプロイされていない場合にのみ適用されます。 + Automatically translated. + + + Zero Install 設定{0:OPTION} を特定の{1:VALUE} に設定します。Zero Install がまだデプロイされていない場合にのみ、既存の設定ファイルを上書きします。 + Automatically translated. + + + {PATH} には、ブートストラッパーに埋め込む追加コンテンツを含むディレクトリを指定します。このようなディレクトリは、'0install export'を使って生成することができます。 + Automatically translated. + + + 実装を保存するためのカスタムパスを選択できる。 + Automatically translated. + + + 必要なディスク{SPACE} の見積もり(バイト単位)を表示します。暗黙的に --customizable-store-path も設定する。 + Automatically translated. + + + 既存のファイルを上書きします。 + Automatically translated. + + + 組み込みのヘルプテキストを表示します。 + Automatically translated. + + + コマンドライン{ARGUMENTS} '0install integrate' に渡します。unsetのままにすると、'0install integrate'をまったく呼び出さなくなります。 + Automatically translated. + + + オプション: + Automatically translated. + + + {URI} またはboostrapテンプレート実行ファイルへのパス。デフォルトの場所からダウンロードする場合は未設定のままにしてください。 + Automatically translated. + + + バージョン情報を表示します。 + Automatically translated. + + + 使い方: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.ko.resx b/src/Properties/Resources.ko.resx new file mode 100644 index 0000000..d74c98a --- /dev/null +++ b/src/Properties/Resources.ko.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 부트스트래퍼 구축 + Automatically translated. + + + 특정 피드를 실행하거나 통합하기 위한 맞춤형 제로 인스톨 부트스트래퍼를 빌드합니다. + Automatically translated. + + + {0} 다운로드 중 + Manually overriden. + + + '{0}' 파일이 이미 존재합니다. 덮어쓰려면 --force를 사용합니다. + Automatically translated. + + + 이 프로그램은 법이 허용하는 한도 내에서 어떠한 보증도 제공하지 않습니다. +이 프로그램의 사본은 GNU 약소 일반 공중 사용 허가서 조건에 따라 재배포할 수 있습니다. + Automatically translated. + + + 인수가 누락되었습니다. 시도 {0} + Automatically translated. + + + 피드에서 실행되는 애플리케이션에 전달할 추가 명령줄 {ARGUMENTS}. + Automatically translated. + + + 기본 카탈로그를 대체할 카탈로그의 {URI}. 제로 인스톨이 아직 배포되지 않은 경우에만 적용됩니다. + Automatically translated. + + + 제로 인스톨 구성 {0:OPTION} 을 특정 {1:VALUE} 으로 설정합니다. 제로 인스톨이 아직 배포되지 않은 경우에만 기존 구성 파일을 재정의합니다. + Automatically translated. + + + {PATH} 를 부트스트랩퍼에 포함할 추가 콘텐츠가 포함된 디렉터리로 내보내야 합니다. 이러한 디렉토리는 '0install export'를 사용하여 생성할 수 있습니다. + Automatically translated. + + + 구현을 저장하기 위한 사용자 지정 경로를 선택할 수 있도록 사용자에게 제공합니다. + Automatically translated. + + + 필요한 예상 디스크 {SPACE} (바이트 단위)를 표시합니다. 사용자 지정 가능한 저장소 경로도 암시적으로 설정합니다. + Automatically translated. + + + 기존 파일을 덮어씁니다. + Automatically translated. + + + 기본 제공 도움말 텍스트를 표시합니다. + Automatically translated. + + + '0설치 통합'에 전달할 명령줄 {ARGUMENTS}. '0설치 통합'을 전혀 호출하지 않으려면 설정하지 않은 상태로 둡니다. + Automatically translated. + + + 옵션: + Automatically translated. + + + {URI} 또는 부스트랩 템플릿 실행 파일의 경로를 입력합니다. 기본 위치에서 다운로드하려면 설정하지 않은 상태로 둡니다. + Automatically translated. + + + 버전 정보를 표시합니다. + Automatically translated. + + + 사용법: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.nl.resx b/src/Properties/Resources.nl.resx new file mode 100644 index 0000000..5177efd --- /dev/null +++ b/src/Properties/Resources.nl.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bootstrapper bouwen + Automatically translated. + + + Bouwt een aangepaste Zero Install Bootstrapper voor het uitvoeren of integreren van een specifieke feed. + Automatically translated. + + + {0} wordt gedownload + Manually overriden. + + + Het bestand '{0}' bestaat al. Gebruik --force om te overschrijven. + Automatically translated. + + + Dit programma wordt geleverd met ABSOLUUT GEEN GARANTIE, voor zover wettelijk toegestaan. +Je mag kopieën van dit programma verspreiden onder de voorwaarden van de GNU Lesser General Public License. + Automatically translated. + + + Ontbrekende argumenten. Probeer {0} + Automatically translated. + + + Extra opdrachtregel {ARGUMENTS} om door te geven aan de toepassing die door de feed wordt gestart. + Automatically translated. + + + De {URI} van de catalogus die de standaard catalogus moet vervangen. Alleen van toepassing als Zero Install nog niet is uitgerold. + Automatically translated. + + + Stel een Zero Install configuratie {0:OPTION} in op een specifieke {1:VALUE}. Overschrijft alleen bestaande configuratiebestanden als Zero Install nog niet is uitgerold. + Automatically translated. + + + {PATH} naar een map met aanvullende inhoud die moet worden ingesloten in de bootstrapper. Je kunt zo'n map genereren met '0install export'. + Automatically translated. + + + Bied de gebruiker de mogelijkheid om een eigen pad te kiezen voor het opslaan van implementaties. + Automatically translated. + + + Toont de geschatte benodigde schijf {SPACE} (in bytes). Stelt impliciet ook --customizable-store-path in. + Automatically translated. + + + Bestaande bestanden overschrijven. + Automatically translated. + + + Toon de ingebouwde helptekst. + Automatically translated. + + + Opdrachtregel {ARGUMENTS} om door te geven aan '0install integrate'. Laat unset om '0install integrate' helemaal niet aan te roepen. + Automatically translated. + + + Opties: + Automatically translated. + + + {URI} of pad naar het uitvoerbare bestand van het boostrap-sjabloon. Laat unset om te downloaden van de standaard locatie. + Automatically translated. + + + Versie-informatie weergeven. + Automatically translated. + + + Gebruik: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.pl.resx b/src/Properties/Resources.pl.resx new file mode 100644 index 0000000..aa6f897 --- /dev/null +++ b/src/Properties/Resources.pl.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Budowanie bootstrappera + Automatically translated. + + + Buduje dostosowany Zero Install Bootstrapper do uruchamiania lub integracji określonego kanału. + Automatically translated. + + + Pobieranie {0} + Manually overriden. + + + Plik '{0}' już istnieje. Użyj --force, aby nadpisać. + Automatically translated. + + + Ten program nie jest objęty ABSOLUTNIE ŻADNĄ GWARANCJĄ w zakresie dozwolonym przez prawo. +Kopie tego programu można rozpowszechniać na warunkach licencji GNU Lesser General Public License. + Automatically translated. + + + Brakujące argumenty. Spróbuj {0} + Automatically translated. + + + Dodatkowy wiersz poleceń {ARGUMENTS} do przekazania do aplikacji uruchamianej przez feed. + Automatically translated. + + + {URI} katalogu, który zastąpi katalog domyślny. Dotyczy tylko sytuacji, gdy Zero Install nie zostało jeszcze wdrożone. + Automatically translated. + + + Ustaw konfigurację Zero Install {0:OPTION} na określoną {1:VALUE}. Zastępuje istniejące pliki konfiguracyjne tylko wtedy, gdy Zero Install nie zostało jeszcze wdrożone. + Automatically translated. + + + {PATH} do katalogu zawierającego dodatkową zawartość, która zostanie osadzona w bootstrapperze. Taki katalog można wygenerować za pomocą polecenia "0install export". + Automatically translated. + + + Oferuje użytkownikowi wybór niestandardowej ścieżki do przechowywania implementacji. + Automatically translated. + + + Pokazuje szacowany wymagany dysk {SPACE} (w bajtach). Niejawnie ustawia również --customizable-store-path. + Automatically translated. + + + Nadpisywanie istniejących plików. + Automatically translated. + + + Wyświetla wbudowany tekst pomocy. + Automatically translated. + + + Wiersz poleceń {ARGUMENTS} do przekazania do '0install integrate'. Pozostaw bez ustawienia, aby w ogóle nie wywoływać '0install integrate'. + Automatically translated. + + + Opcje: + Automatically translated. + + + {URI} lub ścieżka do pliku wykonywalnego szablonu boostrap. Pozostaw nie ustawione, aby pobrać z domyślnej lokalizacji. + Automatically translated. + + + Wyświetlanie informacji o wersji. + Automatically translated. + + + Użycie: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.pt-BR.resx b/src/Properties/Resources.pt-BR.resx new file mode 100644 index 0000000..3255dde --- /dev/null +++ b/src/Properties/Resources.pt-BR.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Criação do bootstrapper + Automatically translated. + + + Cria um bootstrapper personalizado de instalação zero para executar ou integrar um feed específico. + Automatically translated. + + + Fazendo download de {0} + Manually overriden. + + + O arquivo '{0}' já existe. Use --force para sobrescrever. + Automatically translated. + + + Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA, na medida permitida por lei. +Você pode redistribuir cópias deste programa sob os termos da GNU Lesser General Public License. + Manually overriden. + + + Argumentos faltando. Tente {0} + Manually overriden. + + + Linha de comando adicional {ARGUMENTS} para passar para o aplicativo iniciado pelo feed. + Automatically translated. + + + O endereço {URI} do catálogo para substituir o catálogo padrão. Só se aplica se a Instalação Zero ainda não tiver sido implementada. + Automatically translated. + + + Defina uma configuração do Zero Install {0:OPTION} para um {1:VALUE} específico. Somente substitui os arquivos de configuração existentes se o Zero Install ainda não estiver implantado. + Automatically translated. + + + {PATH} para um diretório com conteúdo adicional a ser incorporado no bootstrapper. Você pode gerar esse diretório usando '0install export'. + Automatically translated. + + + Oferece ao usuário a possibilidade de escolher um caminho personalizado para armazenar implementações. + Automatically translated. + + + Mostra o disco estimado {SPACE} necessário (em bytes). Define implicitamente a opção --customizable-store-path também. + Automatically translated. + + + Substituição de arquivos existentes. + Automatically translated. + + + Mostra o texto de ajuda integrado. + Manually overriden. + + + Linha de comando {ARGUMENTS} para passar para '0install integrate'. Deixe unset para não chamar o '0install integrate' de forma alguma. + Automatically translated. + + + Opções: + Manually overriden. + + + {URI} ou caminho para o executável do modelo boostrap. Deixe a opção não definida para fazer o download do local padrão. + Automatically translated. + + + Exibir informações de versão. + Manually overriden. + + + Uso: + Manually overriden. + + \ No newline at end of file diff --git a/src/Properties/Resources.pt-PT.resx b/src/Properties/Resources.pt-PT.resx new file mode 100644 index 0000000..8d6e171 --- /dev/null +++ b/src/Properties/Resources.pt-PT.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Construir o bootstrapper + Automatically translated. + + + Constrói um Bootstrapper personalizado de instalação zero para executar ou integrar um feed específico. + Automatically translated. + + + A transferir {0} + Manually overriden. + + + O ficheiro '{0}' já existe. Utilize --force para o substituir. + Automatically translated. + + + Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA, até o limite permitido por lei. +Pode redistribuir cópias deste programa sob os termos da GNU Lesser General Public License. + Automatically translated. + + + Argumentos em falta. Tentativa {0} + Automatically translated. + + + Linha de comando adicional {ARGUMENTS} para passar para a aplicação lançada pelo feed. + Automatically translated. + + + O {URI} do catálogo para substituir o catálogo padrão. Só se aplica se a Instalação Zero ainda não tiver sido implementada. + Automatically translated. + + + Definir uma configuração do Zero Install {0:OPTION} para um {1:VALUE} específico. Apenas substitui os ficheiros de configuração existentes se o Zero Install ainda não tiver sido implementado. + Automatically translated. + + + {PATH} para um diretório que contém conteúdo adicional a ser incorporado no bootstrapper. Pode gerar tal diretório utilizando '0install export'. + Automatically translated. + + + Oferece ao utilizador a possibilidade de escolher um caminho personalizado para armazenar as implementações. + Automatically translated. + + + Mostra o disco estimado {SPACE} necessário (em bytes). Implicitamente define --customizable-store-path também. + Automatically translated. + + + Substituir ficheiros existentes. + Automatically translated. + + + Mostrar o texto de ajuda incorporado. + Automatically translated. + + + Linha de comando {ARGUMENTS} para passar para '0install integrate'. Deixe unset para não chamar '0install integrate' de forma alguma. + Automatically translated. + + + Opções: + Automatically translated. + + + {URI} ou caminho para o executável do modelo boostrap. Deixar não definido para descarregar a partir da localização predefinida. + Automatically translated. + + + Visualizar informações sobre a versão. + Automatically translated. + + + Utilização: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.resx b/src/Properties/Resources.resx new file mode 100644 index 0000000..6c0248e --- /dev/null +++ b/src/Properties/Resources.resx @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Building bootstrapper + + + Builds a customized Zero Install Bootstrapper for running or integrating a specific feed. + + + Downloading {0} + + + The file '{0}' already exists. Use --force to overwrite. + + + This program comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. +You may redistribute copies of this program under the terms of the GNU Lesser General Public License. + + + Missing arguments. Try {0} + + + Additional command-line {ARGUMENTS} to pass to the application launched by the feed. + + + The {URI} of the catalog to replace the default catalog. Only applies if Zero Install is not already deployed. + + + Set a Zero Install configuration {0:OPTION} to a specific {1:VALUE}. Only overrides existing config files if Zero Install is not already deployed. + + + {PATH} to a directory containing additional content to be embedded in the bootstrapper. You can generate such a directory using '0install export'. + + + Offer the user to choose a custom path for storing implementations. + + + Show the estimated disk {SPACE} required (in bytes). Implicitly sets --customizable-store-path too. + + + Overwrite existing files. + + + Show the built-in help text. + + + Command-line {ARGUMENTS} to pass to '0install integrate'. Leave unset to not call '0install integrate' at all. + + + Options: + + + {URI} or path to the boostrap template executable. Leave unset to download from default location. + + + Display version information. + + + Usage: + + \ No newline at end of file diff --git a/src/Properties/Resources.ro.resx b/src/Properties/Resources.ro.resx new file mode 100644 index 0000000..8a8c9a6 --- /dev/null +++ b/src/Properties/Resources.ro.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Construirea bootstrapper-ului + Automatically translated. + + + Construiește un Bootstrapper de instalare zero personalizat pentru rularea sau integrarea unui anumit flux. + Automatically translated. + + + Se descarcă {0} + Manually overriden. + + + Fișierul '{0}' există deja. Folosiți --force pentru a suprascrie. + Automatically translated. + + + Acest program vine cu ABSOLUT NICI O GARANȚIE, în măsura permisă de lege. +Puteți redistribui copii ale acestui program în conformitate cu termenii licenței GNU Lesser General Public License. + Automatically translated. + + + Argumente lipsă. Încercați {0} + Automatically translated. + + + Linie de comandă suplimentară {ARGUMENTS} pentru a fi transmisă aplicației lansate de feed. + Automatically translated. + + + {URI} catalogul care va înlocui catalogul implicit. Se aplică numai dacă Zero Install nu este deja implementat. + Automatically translated. + + + Setați o configurație Zero Install {0:OPTION} la un anumit {1:VALUE}. Suprascrie fișierele de configurare existente numai dacă Zero Install nu este deja implementat. + Automatically translated. + + + {PATH} către un director care conține conținut suplimentar care urmează să fie încorporat în bootstrapper. Puteți genera un astfel de director folosind "0install export". + Automatically translated. + + + Oferă utilizatorului posibilitatea de a alege o cale personalizată pentru stocarea implementărilor. + Automatically translated. + + + Afișează valoarea estimată a discului {SPACE} necesar (în bytes). Stabilește implicit și --customizable-store-path. + Automatically translated. + + + Suprascrie fișierele existente. + Automatically translated. + + + Afișarea textului de ajutor încorporat. + Automatically translated. + + + Linia de comandă {ARGUMENTS} de transmis la "0install integrate". Lasă unset pentru a nu apela deloc "0install integrate". + Automatically translated. + + + Opțiuni: + Automatically translated. + + + {URI} sau calea către executabilul șablonului boostrap. Lasă unset pentru a descărca din locația implicită. + Automatically translated. + + + Afișarea informațiilor despre versiune. + Automatically translated. + + + Utilizare: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.ru.resx b/src/Properties/Resources.ru.resx new file mode 100644 index 0000000..b2a00fd --- /dev/null +++ b/src/Properties/Resources.ru.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Сборка бутстраппера + Automatically translated. + + + Сборка настраиваемого Zero Install Bootstrapper для запуска или интеграции определенного фида. + Automatically translated. + + + Загрузка {0} + Manually overriden. + + + Файл '{0}' уже существует. Используйте --force для перезаписи. + Automatically translated. + + + Эта программа поставляется с АБСОЛЮТНОЙ НЕ ГАРАНТИЕЙ, в пределах, разрешенных законом. +Вы можете распространять копии этой программы в соответствии с условиями GNU Lesser General Public License. + Automatically translated. + + + Недостающие аргументы. Попробуйте {0} + Automatically translated. + + + Дополнительная командная строка {ARGUMENTS} для передачи в приложение, запускаемое фидом. + Automatically translated. + + + Каталог {URI} для замены каталога по умолчанию. Применяется только в том случае, если Zero Install еще не развернут. + Automatically translated. + + + Установка конфигурации Zero Install {0:OPTION} на определенный {1:VALUE}. Заменяет существующие файлы конфигурации только в том случае, если Zero Install еще не развернут. + Automatically translated. + + + {PATH} в директорию, содержащую дополнительное содержимое для встраивания в бутстраппер. Вы можете сгенерировать такой каталог с помощью команды '0install export'. + Automatically translated. + + + Предложение пользователю выбрать собственный путь для хранения реализаций. + Automatically translated. + + + Показывает предполагаемый объем требуемого диска {SPACE} (в байтах). Неявно задает также --customizable-store-path. + Automatically translated. + + + Перезапись существующих файлов. + Automatically translated. + + + Показать текст встроенной справки. + Automatically translated. + + + Командная строка {ARGUMENTS} для передачи в '0install integrate'. Оставьте значение unset, чтобы не вызывать '0install integrate' вообще. + Automatically translated. + + + Опции: + Automatically translated. + + + {URI} или путь к исполняемому файлу шаблона boostrap. Оставьте значение без изменения, чтобы загрузить из места по умолчанию. + Automatically translated. + + + Отображение информации о версии. + Automatically translated. + + + Использование: + Automatically translated. + + \ No newline at end of file diff --git a/src/Properties/Resources.tr.resx b/src/Properties/Resources.tr.resx new file mode 100644 index 0000000..8c92666 --- /dev/null +++ b/src/Properties/Resources.tr.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Önyükleyici oluşturma + Automatically translated. + + + Belirli bir beslemeyi çalıştırmak veya entegre etmek için özelleştirilmiş bir Zero Install Bootstrapper oluşturur. + Automatically translated. + + + {0} indiriliyor + Manually overriden. + + + '{0}' dosyası zaten mevcut. Üzerine yazmak için --force kullanın. + Automatically translated. + + + Bu yazılım, yasaların izin verdiği ölçüde KESİNLİKLE HERHANGİ BİR GARANTİ OLMADAN sunulur. +Bu yazılımın kopyaları GNU Kısıtlı Genel Kamu Lisansı koşullarına bağlı kalınarak dağıtılabilir. + Manually overriden. + + + Değişkenler eksik. {0} deneyin. + Manually overriden. + + + Besleme tarafından başlatılan uygulamaya iletmek için ek komut satırı {ARGUMENTS}. + Automatically translated. + + + Varsayılan kataloğun yerini alacak kataloğun {URI} adresi. Yalnızca Zero Install zaten dağıtılmamışsa geçerlidir. + Automatically translated. + + + Bir Zero Install yapılandırmasını {0:OPTION} belirli bir {1:VALUE} olarak ayarlayın. Yalnızca Zero Install zaten dağıtılmamışsa mevcut yapılandırma dosyalarını geçersiz kılar. + Automatically translated. + + + {PATH} bootstrapper'a gömülecek ek içeriği içeren bir dizine. Böyle bir dizini '0install export' kullanarak oluşturabilirsiniz. + Automatically translated. + + + Kullanıcıya uygulamaları depolamak için özel bir yol seçmesini önerin. + Automatically translated. + + + Gerekli tahmini diski {SPACE} gösterir (bayt olarak). Örtük olarak --customizable-store-path ayarını da yapar. + Automatically translated. + + + Mevcut dosyaların üzerine yaz. + Automatically translated. + + + Yerleşik yardım metnini görün. + Manually overriden. + + + '0install integrate'e iletilecek komut satırı {ARGUMENTS}. '0install integrate'i hiç çağırmamak için unset bırakın. + Automatically translated. + + + Seçenekler: + Manually overriden. + + + {URI} veya boostrap şablonunun çalıştırılabilir dosyasının yolu. Varsayılan konumdan indirmek için ayarsız bırakın. + Automatically translated. + + + Sürüm bilgilerini görüntüle. + Manually overriden. + + + Kullanım: + Manually overriden. + + \ No newline at end of file diff --git a/src/Properties/Resources.zh.resx b/src/Properties/Resources.zh.resx new file mode 100644 index 0000000..a286b9b --- /dev/null +++ b/src/Properties/Resources.zh.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 构建引导程序 + Automatically translated. + + + 构建定制的零安装引导程序,用于运行或集成特定的 feed。 + Automatically translated. + + + 下载 {0} + Manually overriden. + + + 文件{0} 已经存在。使用 --force 进行覆盖。 + Automatically translated. + + + 在法律允许的范围内,本程序不提供任何担保。 +您可以根据 GNU 宽通用公共许可证的条款重新发布本程序的副本。 + Automatically translated. + + + 缺少参数。尝试{0} + Automatically translated. + + + 额外的命令行{ARGUMENTS} ,可传递给由 feed 启动的应用程序。 + Automatically translated. + + + 取代默认目录的目录{URI} 。仅适用于尚未部署零安装的情况。 + Automatically translated. + + + 将 Zero Install 配置{0:OPTION} 设置为特定的{1:VALUE} 。如果尚未部署 Zero Install,则仅覆盖现有配置文件。 + Automatically translated. + + + {PATH} 目录,其中包含要嵌入引导程序的附加内容。您可以使用 "0install export "生成这样的目录。 + Automatically translated. + + + 用户可选择自定义路径来存储实现。 + Automatically translated. + + + 显示估计所需的磁盘{SPACE} (以字节为单位)。同时隐含设置 --customizable-store-path. + Automatically translated. + + + 覆盖现有文件 + Automatically translated. + + + 显示内置帮助文本 + Automatically translated. + + + 命令行{ARGUMENTS} ,传递给 "0install integrate"。不设置则完全不调用 "0install integrate"。 + Automatically translated. + + + 选项 + Automatically translated. + + + {URI} 或 boostrap 模板可执行文件的路径。不设置则从默认位置下载。 + Automatically translated. + + + 显示版本信息。 + Automatically translated. + + + 使用方法 + Automatically translated. + + \ No newline at end of file diff --git a/src/ZeroInstall.Publish.Bootstrap.Cli.csproj b/src/ZeroInstall.Publish.Bootstrap.Cli.csproj new file mode 100644 index 0000000..3e84580 --- /dev/null +++ b/src/ZeroInstall.Publish.Bootstrap.Cli.csproj @@ -0,0 +1,60 @@ + + + + + 12.0 + net472 + enable + annotations + False + True + True + $(NoWarn);1591 + es;el;fr;it;ja;nl;pt-BR;pt-PT;ro;ru;tr;zh;zh-Hant + + + 0bootstrap + app.manifest + Exe + ..\artifacts\$(Configuration)\ + + + Generates executable that installs 0install itself along with launcher for a 0install app. + Copyright Bastian Eicher et al. + https://github.com/0install/0bootstrap-dotnet + + + 1.0.0-pre + + + + + + + + + + + + + + + + Always + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + True + True + Resources.resx + + + + diff --git a/src/ZeroInstall.Publish.Bootstrap.Cli.sln b/src/ZeroInstall.Publish.Bootstrap.Cli.sln new file mode 100644 index 0000000..66e7009 --- /dev/null +++ b/src/ZeroInstall.Publish.Bootstrap.Cli.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.12 +MinimumVisualStudioVersion = 14.0.23107.0 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZeroInstall.Publish.Bootstrap.Cli", "ZeroInstall.Publish.Bootstrap.Cli.csproj", "{50B1586B-040A-4805-AC05-1C77721EF4BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50B1586B-040A-4805-AC05-1C77721EF4BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50B1586B-040A-4805-AC05-1C77721EF4BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50B1586B-040A-4805-AC05-1C77721EF4BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50B1586B-040A-4805-AC05-1C77721EF4BD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ZeroInstall.Publish.Bootstrap.Cli.sln.DotSettings b/src/ZeroInstall.Publish.Bootstrap.Cli.sln.DotSettings new file mode 100644 index 0000000..05a554c --- /dev/null +++ b/src/ZeroInstall.Publish.Bootstrap.Cli.sln.DotSettings @@ -0,0 +1,24 @@ + + Inherit + AssemblyInfo.cs + GlobalAssemblyInfo.cs + GlobalSuppressions.cs + *.config + *.NativeMethods.cs + _Namespace.cs + SOLUTION + DO_NOT_SHOW + HINT + DO_NOT_SHOW + SUGGESTION + True + <?xml version="1.0" encoding="utf-16"?><Profile name="Recommended Cleanup"><JsInsertSemicolon>True</JsInsertSemicolon><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsReformatCode>True</JsReformatCode><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs><AsInsteadOfCastTs>True</AsInsteadOfCastTs><HtmlReformatCode>True</HtmlReformatCode><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><XMLReformatCode>True</XMLReformatCode><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="False" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="False" ArrangeArgumentsStyle="False" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" /><RemoveCodeRedundanciesVB>True</RemoveCodeRedundanciesVB><VBOptimizeImports>True</VBOptimizeImports><VBShortenReferences>True</VBShortenReferences><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CssReformatCode>True</CssReformatCode><VBReformatCode>True</VBReformatCode><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSUpdateFileHeader>True</CSUpdateFileHeader></Profile> + Recommended Cleanup + Copyright Bastian Eicher et al. +Licensed under the GNU Lesser Public License + ID + <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> + True + True + SOLUTION_FOLDER + \ No newline at end of file diff --git a/src/app.manifest b/src/app.manifest new file mode 100644 index 0000000..a5ee31e --- /dev/null +++ b/src/app.manifest @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + true + + + diff --git a/src/build.ps1 b/src/build.ps1 new file mode 100644 index 0000000..6dccf7a --- /dev/null +++ b/src/build.ps1 @@ -0,0 +1,24 @@ +Param ($Version = "1.0.0-pre") +$ErrorActionPreference = "Stop" +pushd $PSScriptRoot + +function Find-MSBuild { + if (Test-Path "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe") { + $vsDir = . "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -products * -property installationPath -format value -version 17.8 + if ($vsDir) { return "$vsDir\MSBuild\Current\Bin\amd64\MSBuild.exe" } + } +} + +function Run-MSBuild { + $msbuild = Find-Msbuild + if (!$msbuild) { throw "You need Visual Studio 2022 v17.8 or newer to build this project" } + . $msbuild @args + if ($LASTEXITCODE -ne 0) {throw "Exit Code: $LASTEXITCODE"} +} + +# Build +if ($env:CI) { $ci = "/p:ContinuousIntegrationBuild=True" } +Run-MSBuild /v:Quiet /t:Restore /t:Build $ci /p:Configuration=Release /p:Version=$Version ZeroInstall.Publish.Bootstrap.Cli.sln +Remove-Item ..\artifacts\Release\net472 -Recurse -Include *.xml,*.pdb,Microsoft.CodeAnalysis* + +popd diff --git a/src/nuget.config b/src/nuget.config new file mode 100644 index 0000000..2b07072 --- /dev/null +++ b/src/nuget.config @@ -0,0 +1,6 @@ + + + + + +