Skip to content

ijhttp-cli 243.24978.46 (new cask) #206440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 8, 2025
Merged

ijhttp-cli 243.24978.46 (new cask) #206440

merged 1 commit into from
Apr 8, 2025

Conversation

bartekpacia
Copy link
Contributor

@bartekpacia bartekpacia commented Mar 26, 2025

Important: Do not tick a checkbox if you haven’t performed its action. Honesty is indispensable for a smooth review process.

In the following questions <cask> is the token of the cask you're submitting.

After making any changes to a cask, existing or new, verify:

Additionally, if adding a new cask:

  • Named the cask according to the token reference.
  • Checked the cask was not already refused (add your cask's name to the end of the search field).
  • brew audit --cask --new <cask> worked successfully.
  • HOMEBREW_NO_INSTALL_FROM_API=1 brew install --cask <cask> worked successfully.
  • brew uninstall --cask <cask> worked successfully.

YouTrack ticket: https://youtrack.jetbrains.com/issue/IJPL-181991/Add-HTTP-client-CLI-to-Homebrew

@BrewTestBot BrewTestBot added new cask missing zap Cask is missing a zap stanza, please add one. labels Mar 26, 2025
@bartekpacia bartekpacia changed the title ijhttp 243.24978.46 (new cask) ijhttp-cli 243.24978.46 (new cask) Mar 26, 2025
@p-linnane
Copy link
Member

Thank you for your submission @bartekpacia. We are unable to accept it at this time because it does not pass Homebrew's signature verification check:

macOS on ARM requires applications to be signed. Please contact the upstream developer to let them know they should sign their app.

Please consider hosting this in your own Tap and if the developers sign their app in the future we would be happy to consider adding this to homebrew-cask.

@p-linnane p-linnane closed this Mar 26, 2025
@bartekpacia
Copy link
Contributor Author

Hi @p-linnane, thanks for a quick response!

I work at JetBrains, who is the developer of the app in question. We're working on fixing the signature problem.
I'd appreciate if this PR could be re-opened (or I can convert it into a draft).

Thanks!

@p-linnane p-linnane reopened this Mar 26, 2025
@p-linnane
Copy link
Member

Please open a new PR once you have things sorted out.

@p-linnane p-linnane closed this Apr 2, 2025
@bartekpacia
Copy link
Contributor Author

bartekpacia commented Apr 8, 2025

Hi @p-linnane, could you help me understand why the CI is failing?

macOS on ARM requires software to be signed.
Please contact the upstream developer to let them know they should sign and notarize their software.
ijhttp-cli
  * line 5, col 2: Signature verification failed:
    /private/tmp/cask-audit20250327-7876-ohqtd1/ijhttp/ijhttp: code object is not signed at all

but this is a shell script, not a binary. How are we supposed to go around it?

I did some little googling and found this:

Do Shell Scripts Need to be Signed? | Apple Developer

and I'm confused.

Thank you in advance.

ijhttp
#!/bin/bash

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
#
#   intellij-http-client start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh intellij-http-client
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (IJHTTP_JAVA_OPTS)
#       rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Pass Java options via IJHTTP_JAVA_OPTS environment variable

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

APP_HOME=$( cd "${APP_HOME:-./}." && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -D...appname settings
#   * --module-path (only if needed)
#   * IJHTTP_JAVA_OPTS environment variable.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    MAIN_JAR=$( cygpath --path --mixed "$MAIN_JAR" )
    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi

# Checking for correct Java version (IDEA-310148)
JAVA_VERSION=$("$JAVACMD" -version 2>&1 | awk -F '"' '/version/ {split($2, version, "."); print version[1]}')

if [[ $JAVA_VERSION -lt 17 ]] ; then
  die "IntelliJ HTTP Client requires Java version 17. But provided Java has version $JAVA_VERSION"
fi

# Collect all arguments for the java command;
#   * $IJHTTP_JAVA_OPTS can contain fragments of
#     shell script including quotes and variable substitutions, so put them in
#     double quotes to make sure that they get re-expanded; and
#   * put everything else in single quotes, so that it's not re-expanded.
set -- \
        -cp "$APP_HOME/lib/*" \
        com.intellij.httpClient.cli.HttpClientMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "--add-opens=java.base/java.util=ALL-UNNAMED $IJHTTP_JAVA_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

# mordant and IntelliJ Terminal looks strange on MacOS
unset __INTELLIJ_COMMAND_HISTFILE__
unset TERMINAL_EMULATOR
LC_CTYPE=en_US.UTF-8

APP_HOME=$APP_HOME exec "$JAVACMD" "$@"

@bevanjkay bevanjkay reopened this Apr 8, 2025
@bevanjkay
Copy link
Member

It does look like the signing requirement shouldn't be applied here, but we don't have currently have any way of distinguishing this during the audit. If the rest of the suite passes, and the additional comment is addressed from the earlier review, we can skip the audit before merging here.

@bartekpacia
Copy link
Contributor Author

bartekpacia commented Apr 8, 2025

Thank you @bevanjkay!

Could you reopen this PR? (I can't do it) Nevermind, I pushed a new commit and it reopened automatically.

@bevanjkay
Copy link
Member

Please try to add a zap stanza. The linked documentation provides some recommended methods to create it.

If there are no preferences please add a comment # No zap stanza required above the caveats, example:

# No zap stanza required

@BrewTestBot BrewTestBot removed the missing zap Cask is missing a zap stanza, please add one. label Apr 8, 2025
@bartekpacia
Copy link
Contributor Author

bartekpacia commented Apr 8, 2025

Added the # No zap stanza required comment – thanks. I'm not aware of this tool generating any temporary files.

@bevanjkay bevanjkay requested a review from p-linnane April 8, 2025 13:42
@p-linnane p-linnane added the ci-syntax-only Only run syntax checks on CI. Use only for bulk changes. label Apr 8, 2025
Copy link
Member

@p-linnane p-linnane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @bartekpacia!

@p-linnane p-linnane added this pull request to the merge queue Apr 8, 2025
Merged via the queue into Homebrew:master with commit 8a0b132 Apr 8, 2025
9 checks passed
@bartekpacia bartekpacia deleted the new_formula_ijhttp branch April 9, 2025 10:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci-syntax-only Only run syntax checks on CI. Use only for bulk changes. new cask
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants