From 548dfd72ac9e6dbbef23c4ff10403ead24d462c3 Mon Sep 17 00:00:00 2001 From: Larry Luna Date: Thu, 14 Aug 2025 12:43:31 -0500 Subject: [PATCH 1/6] Add GitHub Actions workflow for Python API tests --- .github/python-tests.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/python-tests.yml diff --git a/.github/python-tests.yml b/.github/python-tests.yml new file mode 100644 index 0000000..f6ba5ff --- /dev/null +++ b/.github/python-tests.yml @@ -0,0 +1,17 @@ +name: Python API Tests + +on: + push: + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - run: pip install -r requirements.txt + - run: pytest -q + From 6ad3f2c0a94eca405ca56b3eb53bb613b13091d8 Mon Sep 17 00:00:00 2001 From: Larry Luna Date: Thu, 14 Aug 2025 12:50:45 -0500 Subject: [PATCH 2/6] Add GitHub Actions workflow for Python API tests --- .gitignore | 3 + api-tests/requirements.txt.txt | 2 + codex-test-backup.git/HEAD | 1 + codex-test-backup.git/config | 11 ++ codex-test-backup.git/description | 1 + .../hooks/applypatch-msg.sample | 15 ++ codex-test-backup.git/hooks/commit-msg.sample | 24 +++ .../hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ .../hooks/post-update.sample | 8 + .../hooks/pre-applypatch.sample | 14 ++ codex-test-backup.git/hooks/pre-commit.sample | 49 +++++ .../hooks/pre-merge-commit.sample | 13 ++ codex-test-backup.git/hooks/pre-push.sample | 53 ++++++ codex-test-backup.git/hooks/pre-rebase.sample | 169 +++++++++++++++++ .../hooks/pre-receive.sample | 24 +++ .../hooks/prepare-commit-msg.sample | 42 +++++ .../hooks/push-to-checkout.sample | 78 ++++++++ .../hooks/sendemail-validate.sample | 77 ++++++++ codex-test-backup.git/hooks/update.sample | 128 +++++++++++++ codex-test-backup.git/info/exclude | 6 + ...13090c4ef10754beef2244119f1fff86adfee2.idx | Bin 0 -> 2612 bytes ...3090c4ef10754beef2244119f1fff86adfee2.pack | Bin 0 -> 25011 bytes ...13090c4ef10754beef2244119f1fff86adfee2.rev | Bin 0 -> 272 bytes codex-test-backup.git/packed-refs | 6 + fun_test.py | 14 ++ requirements.txt | 1 + simplesearch.sql | 1 + test_api.py | 13 ++ 28 files changed, 927 insertions(+) create mode 100644 api-tests/requirements.txt.txt create mode 100644 codex-test-backup.git/HEAD create mode 100644 codex-test-backup.git/config create mode 100644 codex-test-backup.git/description create mode 100644 codex-test-backup.git/hooks/applypatch-msg.sample create mode 100644 codex-test-backup.git/hooks/commit-msg.sample create mode 100644 codex-test-backup.git/hooks/fsmonitor-watchman.sample create mode 100644 codex-test-backup.git/hooks/post-update.sample create mode 100644 codex-test-backup.git/hooks/pre-applypatch.sample create mode 100644 codex-test-backup.git/hooks/pre-commit.sample create mode 100644 codex-test-backup.git/hooks/pre-merge-commit.sample create mode 100644 codex-test-backup.git/hooks/pre-push.sample create mode 100644 codex-test-backup.git/hooks/pre-rebase.sample create mode 100644 codex-test-backup.git/hooks/pre-receive.sample create mode 100644 codex-test-backup.git/hooks/prepare-commit-msg.sample create mode 100644 codex-test-backup.git/hooks/push-to-checkout.sample create mode 100644 codex-test-backup.git/hooks/sendemail-validate.sample create mode 100644 codex-test-backup.git/hooks/update.sample create mode 100644 codex-test-backup.git/info/exclude create mode 100644 codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.idx create mode 100644 codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.pack create mode 100644 codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.rev create mode 100644 codex-test-backup.git/packed-refs create mode 100644 fun_test.py create mode 100644 requirements.txt create mode 100644 simplesearch.sql create mode 100644 test_api.py diff --git a/.gitignore b/.gitignore index a94a1eb..3ebf468 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ security-report/ +__pycache__/ +*.pyc + diff --git a/api-tests/requirements.txt.txt b/api-tests/requirements.txt.txt new file mode 100644 index 0000000..16d3b77 --- /dev/null +++ b/api-tests/requirements.txt.txt @@ -0,0 +1,2 @@ +pytest +requests \ No newline at end of file diff --git a/codex-test-backup.git/HEAD b/codex-test-backup.git/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/codex-test-backup.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/codex-test-backup.git/config b/codex-test-backup.git/config new file mode 100644 index 0000000..9825b11 --- /dev/null +++ b/codex-test-backup.git/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = true + symlinks = false + ignorecase = true +[remote "origin"] + url = https://github.com/GunSlinger0715/codex-test.git + tagOpt = --no-tags + fetch = +refs/*:refs/* + mirror = true diff --git a/codex-test-backup.git/description b/codex-test-backup.git/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/codex-test-backup.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/codex-test-backup.git/hooks/applypatch-msg.sample b/codex-test-backup.git/hooks/applypatch-msg.sample new file mode 100644 index 0000000..a5d7b84 --- /dev/null +++ b/codex-test-backup.git/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/codex-test-backup.git/hooks/commit-msg.sample b/codex-test-backup.git/hooks/commit-msg.sample new file mode 100644 index 0000000..b58d118 --- /dev/null +++ b/codex-test-backup.git/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/codex-test-backup.git/hooks/fsmonitor-watchman.sample b/codex-test-backup.git/hooks/fsmonitor-watchman.sample new file mode 100644 index 0000000..23e856f --- /dev/null +++ b/codex-test-backup.git/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/codex-test-backup.git/hooks/post-update.sample b/codex-test-backup.git/hooks/post-update.sample new file mode 100644 index 0000000..ec17ec1 --- /dev/null +++ b/codex-test-backup.git/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/codex-test-backup.git/hooks/pre-applypatch.sample b/codex-test-backup.git/hooks/pre-applypatch.sample new file mode 100644 index 0000000..4142082 --- /dev/null +++ b/codex-test-backup.git/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/codex-test-backup.git/hooks/pre-commit.sample b/codex-test-backup.git/hooks/pre-commit.sample new file mode 100644 index 0000000..29ed5ee --- /dev/null +++ b/codex-test-backup.git/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/codex-test-backup.git/hooks/pre-merge-commit.sample b/codex-test-backup.git/hooks/pre-merge-commit.sample new file mode 100644 index 0000000..399eab1 --- /dev/null +++ b/codex-test-backup.git/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/codex-test-backup.git/hooks/pre-push.sample b/codex-test-backup.git/hooks/pre-push.sample new file mode 100644 index 0000000..4ce688d --- /dev/null +++ b/codex-test-backup.git/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/codex-test-backup.git/hooks/pre-rebase.sample b/codex-test-backup.git/hooks/pre-rebase.sample new file mode 100644 index 0000000..6cbef5c --- /dev/null +++ b/codex-test-backup.git/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/codex-test-backup.git/hooks/pre-receive.sample b/codex-test-backup.git/hooks/pre-receive.sample new file mode 100644 index 0000000..a1fd29e --- /dev/null +++ b/codex-test-backup.git/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/codex-test-backup.git/hooks/prepare-commit-msg.sample b/codex-test-backup.git/hooks/prepare-commit-msg.sample new file mode 100644 index 0000000..10fa14c --- /dev/null +++ b/codex-test-backup.git/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/codex-test-backup.git/hooks/push-to-checkout.sample b/codex-test-backup.git/hooks/push-to-checkout.sample new file mode 100644 index 0000000..af5a0c0 --- /dev/null +++ b/codex-test-backup.git/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/codex-test-backup.git/hooks/update.sample b/codex-test-backup.git/hooks/update.sample new file mode 100644 index 0000000..c4d426b --- /dev/null +++ b/codex-test-backup.git/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/codex-test-backup.git/info/exclude b/codex-test-backup.git/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/codex-test-backup.git/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.idx b/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.idx new file mode 100644 index 0000000000000000000000000000000000000000..d512a0e77de9a89e875284b7ab5129db3f1f39b6 GIT binary patch literal 2612 zcmcK6do+~m8UXMQ6Ph8)R_^4s#a1pOiZ(VWv}Yoh#2ELpCltAFJC5X*EtN}%#pHx! z*ddK^&80Q&q0NYjkkmM12!%M$thKE*tF=$3v(DMG)^EMf^S;mbeDl}$yqm#zPXs}D z0q4iVg|qip;Df$jf`aq^hi%YDfQul+U$Py}zZM#5w+KPZO&D?x5iX(-bL{+#801^N zftZ^(%q5VJ7f#?5>F6@5}3wvKn4{Em@ zgqTC08;{{B3?&4w#Cn6)2uLW}G(*8-BJ&4`igWI{HfooZS8?erSp#0n3+*^2wq_$aF1|dp&E_h)KJkQ8*~cew zdiuN0nK&>jLZSsypPFAOxzV7_)H`!&_5%Mjv+S^Sy@Rk1VZ4x~WZ+b}q1xmnXET@W z+OsKs-!4stZeq#ko|^nd_+_$fQ(DN{a((0dKI_5?%pJdvJ!*`D-QPQ(sY;!0(8d{k z*Vc$p@OiqKK`w033Sup^YvCe)^)n-_2Bp_Bw?#ECP(2-_I&CR_%^{^d<@T(gy2NJp zN;kGvon7MZMj8t5gXQ*_3B35t?7;-)k&#{1x<{Xens`Z9N5n{l>u@4@NWn2rtq8I6 zSyD^NFbkdx*1DfxJ?13pE0_P6mw0U5ym(n=re9armqgG!WM3jee%wOW3cWla$Br*Q zf+y(Q*gJ37s`9CYcleXN;v0AiAX-ji@LtimP68=6ImaNZ=!t5ttyeMpHuxTuT9I~rhja7>+f*)_fXf(Mc4Vy zyM>2l_q^RaZB`JQV|*{l_0{=6ebT$z^n9{w4ejRC1)g#FF#P6)B#FSlhys-VsP~m1 z#{zXYEEbvv3<#GQ@9qDta{vL^9}!HCGT3XnVZa?jg`-NXBvp$g``f_JqQ{%>nJ&M zwcSC4o_UNcn7xXAzG`9_&W{T7Om`Jn%W3va#k8+Es*g2h5TIs%^bAQ4qZQ&W4yGU$tufLRG0Gc?XYn_U#J3UhC*~9n!AMkN7SEgTHVA zTWGpo=0*x@i;OMMFt&JhYrAx3>7Bb$1vR91wi_E4*H4tmygn)$VNrZ_kn$*JrfVoY zPNbg}HAsrb@!qTJ54vK0EJV6;@W@GhjqGiGg5njppGH}oPXZlZlz(V(`$zlkBc$po zo4r}}SihZwv|q=uU8t9Q9)jeWeHmiG7N+EcxVN2iuh ziMW&3#96=W%IYHdJx617UY|QacRw_{Iy2>uUqcB~e^e}IF^N@o(p@OA%y#+e3OeIN zztx0NF+HU4m!L)Vip_pP-t5Zu#m?>!Eh#*Id0Lw0YU;Ld$7g&)^xxlymQS5cURuq= zu4ffa{e;D4O`_xmX^W-&{-(Xx`jp)n7oYN0X{Pj!*oU(BnV6SIyk^@)$$Qe54JZ`9 zi^-=NA{L19qSVvR2{c4MoAzlg7j-r{Wjf(r0NU&{MPj6M&qFT}Ik{H^@|dXX^;=$o z>W%2SmEU~qrIUOH8Py)wXI{kS#zpJ#<{GF~rsc6Pn6Tru&n+zVANo$xLo4U(s7#9W zY*|bM?pdUTvFRzJAlzI03ZFy1DWk7DitVLL!$i`pd@u8eyqDZT`$cDUjw~ufc_($x zwDfPS_K#C8&EHjD9J=4BbDQc?J0w1@UEGlx;A&;lj392eVD!VBC7wqRLzq*iZxlhSUqD|rj4@-lHaH-N`E~eTaDT8~LJ<5Ky!TAL*mfZtTfnZ7 krD(o0Uw$*5vhk|AqxjLrY>7;aH|n3gfgXEiooz|~0xlf=q5uE@ literal 0 HcmV?d00001 diff --git a/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.pack b/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.pack new file mode 100644 index 0000000000000000000000000000000000000000..85214ccdf8092b678d1b79f57c18164f04631152 GIT binary patch literal 25011 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 literal 0 HcmV?d00001 diff --git a/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.rev b/codex-test-backup.git/objects/pack/pack-9f13090c4ef10754beef2244119f1fff86adfee2.rev new file mode 100644 index 0000000000000000000000000000000000000000..eed5c203be86ec328c7e9d35fa1a9304de90cf99 GIT binary patch literal 272 zcmXZRNe;mP0EOY2l^SYp4W;H;O(*Ea#zG{Vz$vU Date: Thu, 14 Aug 2025 13:06:36 -0500 Subject: [PATCH 3/6] Updated yml file made to github/workflow --- .github/{ => workflows}/python-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename .github/{ => workflows}/python-tests.yml (81%) diff --git a/.github/python-tests.yml b/.github/workflows/python-tests.yml similarity index 81% rename from .github/python-tests.yml rename to .github/workflows/python-tests.yml index f6ba5ff..ca24d85 100644 --- a/.github/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -2,7 +2,9 @@ name: Python API Tests on: push: + branches: [ main, api-tests-sandbox ] pull_request: + branches: [ main ] jobs: test: @@ -14,4 +16,3 @@ jobs: python-version: '3.11' - run: pip install -r requirements.txt - run: pytest -q - From 443899b5ce8d92b2cfe1621e66090cf47dc453f2 Mon Sep 17 00:00:00 2001 From: Larry Luna Date: Thu, 14 Aug 2025 13:27:28 -0500 Subject: [PATCH 4/6] updated python tests yml file --- .github/workflows/python-tests.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index ca24d85..5992df8 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -9,10 +9,18 @@ on: jobs: test: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 with: - python-version: '3.11' - - run: pip install -r requirements.txt - - run: pytest -q + python-version: '3.x' + + - name: Install dependencies + run: pip install pytest requests + + - name: Run tests + run: pytest From db7257350824f5b2e29569c9549e17c5be8aa411 Mon Sep 17 00:00:00 2001 From: Larry Luna Date: Thu, 14 Aug 2025 16:48:58 -0500 Subject: [PATCH 5/6] Hello API Testing Java File --- .vscode/settings.json | 3 +++ java-sandbx/bin/Main.class | Bin 0 -> 481 bytes java-sandbx/src/Main.class | Bin 0 -> 481 bytes java-sandbx/src/Main.java | 6 ++++++ 4 files changed, 9 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 java-sandbx/bin/Main.class create mode 100644 java-sandbx/src/Main.class create mode 100644 java-sandbx/src/Main.java diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c995aa5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.debug.settings.onBuildFailureProceed": true +} \ No newline at end of file diff --git a/java-sandbx/bin/Main.class b/java-sandbx/bin/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..8e73fcc558d66be47e6268fa58ba0c370eed3cb8 GIT binary patch literal 481 zcmZuu%T59@6g_1Ih8dBk;1eBJf-w@;7!zV*)S!|;*tja#kdk?jnU2xV(uF22`~W}7 zcsnkP30?Hu+k4Kr?d{k1$0vXu_8eqjSTGC7BF9jk^GDwCcrfeSP3B^%7;>jFkm`)V zXtl>S@~|y91+1X(k3M{kmGFrbCM2r&QzIF629XTZP(_0K-8_m6l}q7yq1zi=xg!xP z8O$7%QL#`hpoTSu+7c;)wa`XhK;Eri^YoVFOb*@lIFAOyQD3No*o_sBlq;SVUZ|^S zFP^B-=SqfwD+BkMo@rr&!Mx#;Jk9g)K`@m1G7z_kKM~Q0Pdqv?{j}a_-7jm(;0(hg znu-gl$+k8-*4M{A)@ibOWx(`oY2T!*NyrGZhwor76fkVjuFE>Mv5g%mlkyC9e*jFnW>^3K literal 0 HcmV?d00001 diff --git a/java-sandbx/src/Main.class b/java-sandbx/src/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..8e73fcc558d66be47e6268fa58ba0c370eed3cb8 GIT binary patch literal 481 zcmZuu%T59@6g_1Ih8dBk;1eBJf-w@;7!zV*)S!|;*tja#kdk?jnU2xV(uF22`~W}7 zcsnkP30?Hu+k4Kr?d{k1$0vXu_8eqjSTGC7BF9jk^GDwCcrfeSP3B^%7;>jFkm`)V zXtl>S@~|y91+1X(k3M{kmGFrbCM2r&QzIF629XTZP(_0K-8_m6l}q7yq1zi=xg!xP z8O$7%QL#`hpoTSu+7c;)wa`XhK;Eri^YoVFOb*@lIFAOyQD3No*o_sBlq;SVUZ|^S zFP^B-=SqfwD+BkMo@rr&!Mx#;Jk9g)K`@m1G7z_kKM~Q0Pdqv?{j}a_-7jm(;0(hg znu-gl$+k8-*4M{A)@ibOWx(`oY2T!*NyrGZhwor76fkVjuFE>Mv5g%mlkyC9e*jFnW>^3K literal 0 HcmV?d00001 diff --git a/java-sandbx/src/Main.java b/java-sandbx/src/Main.java new file mode 100644 index 0000000..a5a3b90 --- /dev/null +++ b/java-sandbx/src/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[]args){ + System.out.println("Hello API Testing"); + System.out.println("Let's start exploring API automation in Java"); + } +} \ No newline at end of file From 2f9dc8b6d08e4c99546afa4a863ac9f16d0c6594 Mon Sep 17 00:00:00 2001 From: Larry Luna Date: Thu, 14 Aug 2025 17:04:07 -0500 Subject: [PATCH 6/6] chore(git): ignore VS Code settings and Java builds artifacts --- .gitignore | 6 ++++++ .vscode/settings.json | 3 --- java-sandbx/bin/Main.class | Bin 481 -> 0 bytes 3 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 java-sandbx/bin/Main.class diff --git a/.gitignore b/.gitignore index 3ebf468..8e63aca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ security-report/ __pycache__/ *.pyc +# Java build artifacts +**/*.class +java-sandbx/bin/ +# VS Code workspace +.vscode/ + diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c995aa5..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.debug.settings.onBuildFailureProceed": true -} \ No newline at end of file diff --git a/java-sandbx/bin/Main.class b/java-sandbx/bin/Main.class deleted file mode 100644 index 8e73fcc558d66be47e6268fa58ba0c370eed3cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmZuu%T59@6g_1Ih8dBk;1eBJf-w@;7!zV*)S!|;*tja#kdk?jnU2xV(uF22`~W}7 zcsnkP30?Hu+k4Kr?d{k1$0vXu_8eqjSTGC7BF9jk^GDwCcrfeSP3B^%7;>jFkm`)V zXtl>S@~|y91+1X(k3M{kmGFrbCM2r&QzIF629XTZP(_0K-8_m6l}q7yq1zi=xg!xP z8O$7%QL#`hpoTSu+7c;)wa`XhK;Eri^YoVFOb*@lIFAOyQD3No*o_sBlq;SVUZ|^S zFP^B-=SqfwD+BkMo@rr&!Mx#;Jk9g)K`@m1G7z_kKM~Q0Pdqv?{j}a_-7jm(;0(hg znu-gl$+k8-*4M{A)@ibOWx(`oY2T!*NyrGZhwor76fkVjuFE>Mv5g%mlkyC9e*jFnW>^3K