diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..30ba781 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,28 @@ +name: Run tests + +on: + pull_request: + push: + branches: + - main + tags: + - \d+.\d+.\d+ + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup bitrise + - run: | + curl -fL https://github.com/bitrise-io/bitrise/releases/2.16.1/download/bitrise-$(uname -s)-$(uname -m) > /usr/local/bin/bitrise + chmod +x /usr/local/bin/bitrise + bitrise setup + - name: Prepare secrets + - run: | + ruby -rerb -e 'File.write(".bitrise.secrets.yml", ERB.new(File.read(ARGV[0])).result(binding))' .bitrise.secrets.yml.erb + - name: Run tests + - run: bitrise run test + env: + TEST_API_KEY: ${{ secrets.TEST_API_KEY }} + TEST_APP_KEY: ${{ secrets.TEST_APP_KEY }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba69e9b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.bitrise* +.idea +.vscode +README.md.backup +_tmp/ +.bitrise.secrets.yml \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5e09858 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2024 Sergey Chuvashev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d40afb --- /dev/null +++ b/README.md @@ -0,0 +1,93 @@ +# deploy-to-updraft + +Deploy to Getupdraft.com + + +## How to use this Step + +Can be run directly with the [bitrise CLI](https://github.com/bitrise-io/bitrise), +just `git clone` this repository, `cd` into it's folder in your Terminal/Command Line +and call `bitrise run test`. + +*Check the `bitrise.yml` file for required inputs which have to be +added to your `.bitrise.secrets.yml` file!* + +Step by step: + +1. Open up your Terminal / Command Line +2. `git clone` the repository +3. `cd` into the directory of the step (the one you just `git clone`d) +5. Create a `.bitrise.secrets.yml` file in the same directory of `bitrise.yml` + (the `.bitrise.secrets.yml` is a git ignored file, you can store your secrets in it) +6. Check the `bitrise.yml` file for any secret you should set in `.bitrise.secrets.yml` + * Best practice is to mark these options with something like `# define these in your .bitrise.secrets.yml`, in the `app:envs` section. +7. Once you have all the required secret parameters in your `.bitrise.secrets.yml` you can just run this step with the [bitrise CLI](https://github.com/bitrise-io/bitrise): `bitrise run test` + +An example `.bitrise.secrets.yml` file: + +``` +envs: +- A_SECRET_PARAM_ONE: the value for secret one +- A_SECRET_PARAM_TWO: the value for secret two +``` + +## How to create your own step + +1. Create a new git repository for your step (**don't fork** the *step template*, create a *new* repository) +2. Copy the [step template](https://github.com/bitrise-steplib/step-template) files into your repository +3. Fill the `step.sh` with your functionality +4. Wire out your inputs to `step.yml` (`inputs` section) +5. Fill out the other parts of the `step.yml` too +6. Provide test values for the inputs in the `bitrise.yml` +7. Run your step with `bitrise run test` - if it works, you're ready + +__For Step development guidelines & best practices__ check this documentation: [https://github.com/bitrise-io/bitrise/blob/master/_docs/step-development-guideline.md](https://github.com/bitrise-io/bitrise/blob/master/_docs/step-development-guideline.md). + +**NOTE:** + +If you want to use your step in your project's `bitrise.yml`: + +1. git push the step into it's repository +2. reference it in your `bitrise.yml` with the `git::PUBLIC-GIT-CLONE-URL@BRANCH` step reference style: + +``` +- git::https://github.com/user/my-step.git@branch: + title: My step + inputs: + - my_input_1: "my value 1" + - my_input_2: "my value 2" +``` + +You can find more examples of step reference styles +in the [bitrise CLI repository](https://github.com/bitrise-io/bitrise/blob/master/_examples/tutorials/steps-and-workflows/bitrise.yml#L65). + +## How to contribute to this Step + +1. Fork this repository +2. `git clone` it +3. Create a branch you'll work on +4. To use/test the step just follow the **How to use this Step** section +5. Do the changes you want to +6. Run/test the step before sending your contribution + * You can also test the step in your `bitrise` project, either on your Mac or on [bitrise.io](https://www.bitrise.io) + * You just have to replace the step ID in your project's `bitrise.yml` with either a relative path, or with a git URL format + * (relative) path format: instead of `- original-step-id:` use `- path::./relative/path/of/script/on/your/Mac:` + * direct git URL format: instead of `- original-step-id:` use `- git::https://github.com/user/step.git@branch:` + * You can find more example of alternative step referencing at: https://github.com/bitrise-io/bitrise/blob/master/_examples/tutorials/steps-and-workflows/bitrise.yml +7. Once you're done just commit your changes & create a Pull Request + + +## Share your own Step + +You can share your Step or step version with the [bitrise CLI](https://github.com/bitrise-io/bitrise). If you use the `bitrise.yml` included in this repository, all you have to do is: + +1. In your Terminal / Command Line `cd` into this directory (where the `bitrise.yml` of the step is located) +1. Run: `bitrise run test` to test the step +1. Run: `bitrise run audit-this-step` to audit the `step.yml` +1. Check the `share-this-step` workflow in the `bitrise.yml`, and fill out the + `envs` if you haven't done so already (don't forget to bump the version number if this is an update + of your step!) +1. Then run: `bitrise run share-this-step` to share the step (version) you specified in the `envs` +1. Send the Pull Request, as described in the logs of `bitrise run share-this-step` + +That's all ;) diff --git a/bitrise.yml b/bitrise.yml new file mode 100644 index 0000000..6a933dd --- /dev/null +++ b/bitrise.yml @@ -0,0 +1,98 @@ +format_version: 4 +default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git + +app: + envs: + - TEST_API_KEY: "$TEST_API_KEY" + - TEST_APP_KEY: "$TEST_APP_KEY" + - BITRISE_STEP_ID: deploy-to-updraft + - BITRISE_STEP_VERSION: "0.0.1" + - BITRISE_STEP_GIT_CLONE_URL: https://github.com/appswithlove/bitrise-step-deploy-to-updraft.git + - MY_STEPLIB_REPO_FORK_GIT_URL: $MY_STEPLIB_REPO_FORK_GIT_URL + +workflows: + test: + steps: + - change-workdir: + title: Switch working dir to test / _tmp dir + description: |- + To prevent step testing issues, like referencing relative + files with just './some-file' in the step's code, which would + work for testing the step from this directory directly + but would break if the step is included in another `bitrise.yml`. + run_if: true + inputs: + - path: ./_tmp + - is_create_path: true + - path::./: + title: Deploy test apk without release notes + run_if: true + inputs: + - api_key: "$TEST_API_KEY" + - app_key: "$TEST_APP_KEY" + - app_path: "../test/test.apk" + - path::./: + title: Deploy test apk with release notes + run_if: true + inputs: + - api_key: "$TEST_API_KEY" + - app_key: "$TEST_APP_KEY" + - app_path: "../test/test.apk" + - release_notes: "Test release notes" + - script: + inputs: + - content: | + #!/bin/bash + echo "This output was generated by the Step (EXAMPLE_STEP_OUTPUT): $EXAMPLE_STEP_OUTPUT" + + + # ---------------------------------------------------------------- + # --- workflows to Share this step into a Step Library + audit-this-step: + steps: + - script: + inputs: + - content: |- + #!/bin/bash + set -ex + stepman audit --step-yml ./step.yml + + share-this-step: + envs: + # if you want to share this step into a StepLib + - MY_STEPLIB_REPO_FORK_GIT_URL: $MY_STEPLIB_REPO_FORK_GIT_URL + - BITRISE_STEP_ID: $BITRISE_STEP_ID + - BITRISE_STEP_VERSION: $BITRISE_STEP_VERSION + - BITRISE_STEP_GIT_CLONE_URL: $BITRISE_STEP_GIT_CLONE_URL + description: |- + If this is the first time you try to share a Step you should + first call: $ bitrise share + + This will print you a guide, and information about how Step sharing + works. Please read it at least once! + + As noted in the Step sharing guide you'll have to fork the + StepLib you want to share this step into. Once you're done with forking + the repository you should set your own fork's git clone URL + in the `.bitrise.secrets.yml` file, or here in the `envs` section, + as the value of the `MY_STEPLIB_REPO_FORK_GIT_URL` environment. + + You're now ready to share this Step, just make sure that + the `BITRISE_STEP_ID` and `BITRISE_STEP_VERSION` + environments are set to the desired values! + + To share this Step into a StepLib you can just run: $ bitrise run share-this-step + + Once it finishes the only thing left is to actually create a Pull Request, + the way described in the guide printed at the end of the process. + before_run: + - audit-this-step + steps: + - script: + inputs: + - content: |- + #!/bin/bash + set -ex + bitrise share start -c "${MY_STEPLIB_REPO_FORK_GIT_URL}" + bitrise share create --stepid "${BITRISE_STEP_ID}" --tag "${BITRISE_STEP_VERSION}" --git "${BITRISE_STEP_GIT_CLONE_URL}" + bitrise share finish diff --git a/step.sh b/step.sh new file mode 100644 index 0000000..cce2bf6 --- /dev/null +++ b/step.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -ex + +readonly output_file="output.json" + +upload_task() { + curl --silent -f \ + -o "$output_file" \ + -F whats_new="$release_notes" \ + -F "app=@$app_path" \ + -X PUT https://getupdraft.com/api/app_upload/$APP_KEY/$API_KEY/ +} + +cat "$output_file" + +if ! upload_task; then + err "Uploading error" + exit 1 +fi + +envman add --key UPDRAFT_DEPLOY_STEP_OUTPUT --value "$output_file" + +echo "Uploaded succesfuly" \ No newline at end of file diff --git a/step.yml b/step.yml new file mode 100644 index 0000000..c19340a --- /dev/null +++ b/step.yml @@ -0,0 +1,89 @@ +# +# A couple of useful guides & docs: +# +# - Main Bitrise CLI docs: https://github.com/bitrise-io/bitrise/tree/master/_docs +# - Step Development Guideline: https://github.com/bitrise-io/bitrise/blob/master/_docs/step-development-guideline.md +# - Bitrise.yml format spec: https://github.com/bitrise-io/bitrise/blob/master/_docs/bitrise-yml-format-spec.md +# - Bitrise docs: http://devcenter.bitrise.io/ +# - Bitrise CLI guides: http://devcenter.bitrise.io/bitrise-cli/ + +title: |- + deploy-to-updraft +summary: | + Deploy to Getupdraft.com +description: | + Deploy to Getupdraft.com +website: https://github.com/appswithlove/bitrise-step-deploy-to-updraft-android +source_code_url: https://github.com/appswithlove/bitrise-step-deploy-to-updraft-android +support_url: https://github.com/appswithlove/bitrise-step-deploy-to-updraft-android/issues + +project_type_tags: + - ios +# - macos + - android + - xamarin + - react-native + - cordova + - ionic + - flutter + +type_tags: + - deploy + +is_always_run: false +is_skippable: false +run_if: "" + + +deps: + brew: + - name: curl + apt_get: + - name: curl + + +toolkit: + bash: + entry_file: step.sh + + +inputs: + - api_key: "" + opts: + title: "Updraft API_KEY" + summary: "Your API Key you find in your Profile." + is_expand: true + is_required: true + is_sensitive: true + - app_key: "" + opts: + title: "Updraft APP_KEY" + summary: "The App Key you will find on the application overview. The App key differs for each environment." + is_expand: true + is_required: true + is_sensitive: true + - app_path: "" + opts: + title: "App file path" + summary: "Path to app's binary file (IPA/APK/AAB) to upload" + description: | + Path to app's binary file (IPA/APK/AAB) to upload. + $BITRISE\_APK\_PATH, $BITRISE\_IPA\_PATH, and so on. + is_required: true + - release_notes: "" + opts: + title: "Release notes" + summary: "Release notes" + description: | + Message to show on build download page + is_required: false + +outputs: + - UPDRAFT_DEPLOY_STEP_OUTPUT: + opts: + title: "Deploy Updraft step output" + summary: "Deploy Updraft step output json" + description: | + Description of this output. + + Can be Markdown formatted text. diff --git a/test/test.apk b/test/test.apk new file mode 100644 index 0000000..21c3d67 Binary files /dev/null and b/test/test.apk differ