1.1.1 (2024-12-13)
- Handle rack apps without engine? method in Rails (7e9d3a0)
1.1.0 (2024-05-22)
- support Ruby 3.3 (e25847a)
1.0.1 (2024-04-30)
1.0.0 (2024-02-06)
- disable recording for tests tagged :noappmap (0278ad9)
- bump to version 1.0.0
0.103.0 (2023-12-18)
- Drop metadata timestamp (950d8e6)
- APPMAP_OUTPUT_DIR (82fe6d7)
- AppMap.record accepts thread (9863cc5)
- Drop extended git info (1d26cb4)
- Ensure existence of the appmap output dir (3019868)
- Record around command-labeled methods (9692e2b)
- Report metadata timestamp as iso8601 (56f8a52)
0.102.2 (2023-11-07)
- Don't emit invalid HTTP status (d30fb06), closes /github.com/rails/rails/blob/febd21da3438d190f0c6ce296a114baee983d1e1/actioncable/lib/action_cable/connection/client_socket.rb#L71C23-L71C23 /github.com/faye/websocket-driver-ruby/blob/58d4ed742749dfb3b4f568df36a5365088361220/lib/websocket/driver/draft76.rb#L61
0.102.1 (2023-07-25)
0.102.0 (2023-07-18)
- Discourage conflicting recording methods (f86303b)
0.101.0 (2023-07-17)
- Auto-enable tracing on block recording (59886b6)
- Record RSwag (a60d480)
0.100.0 (2023-07-11)
- Add
appmap-agent-config
command to bootstrap appmap.yml (568acc3)
0.99.4 (2023-05-15)
- More robust extraction of test failures (3851f7c)
- Use a copy of rack environment to probe the route (7ec89a8), closes #329
0.99.3 (2023-05-10)
0.99.2 (2023-05-10)
- Ensure that signature hash key consists of strings (acb5db9)
0.99.1 (2023-04-24)
0.99.0 (2023-04-13)
- Don't report vendored paths as local (e09cb4f)
- Report the first relative path in the backtrace (f81b346)
- Report metadata.test_failure (82c87d2)
0.98.1 (2023-03-09)
- Prevent AppMaps from being constantly re-indexed (0311ab4)
- Report test_status from minitest (659f89a)
0.98.0 (2023-02-22)
- Allow environment configuration of property value inspection (20579d3)
0.97.0 (2023-02-10)
- Implement
items
Parameter object format (AppMap v1.10.0) (9a28773)
0.96.0 (2023-02-01)
- Dir.exists? and File.exists? don't exist in Ruby 3.2 (2879b06)
- Accept ruby 3.2 (2326a88)
0.95.2 (2023-01-27)
- wrap_example_block passes example (810f603)
0.95.1 (2023-01-26)
- Don't match ending ) in swaggerize_path (4bba178)
0.95.0 (2022-12-15)
- Disable active_record hooks (239986d)
- Fix Array#pack hook (2a8b2ed)
- Fix name of rails7 test database (6581b65)
- Typo in label configuration (999b25b)
- Enable deserialize.safe labels (62be78a)
- Enhance the hook log a lot (c93d91c)
- Enhancing hook logging and profiling (01dbe4b)
0.94.1 (2022-11-23)
- Handle properties of mixed content and repeated values (4e14eb8)
0.94.0 (2022-11-22)
- Emit nested return_value.properties (2c74c68)
0.93.5 (2022-11-08)
0.93.4 (2022-11-04)
- Use correct signature for Init_appmap() in appmap.c (1157085)
0.93.3 (2022-10-11)
0.93.2 (2022-10-07)
- Add language, appmap_dir to generated appmap.yml (9b5e590)
0.93.1 (2022-10-04)
- Unyield static asset requests (4041e4b)
0.93.0 (2022-09-22)
- Record the time spent instrumentating a function, as opposed to only the time spend executing a function (0941b4d)
- save elapsed_instrumentation for HTTP requests (a32fb52)
- save elapsed_instrumentation for RequestListener (5a081cc)
- Save elapsed_instrumentation for sql_query (40a851e)
0.92.1 (2022-09-21)
- Drop database server version (e52f210)
0.92.0 (2022-09-19)
- Detect Rails via Rails::Railtie (cf83f00)
- Don't auto-enable requests recording in 'test' (30413cd)
- Enable recording for known environments (6c59c8a)
- Use APPMAP=true to flag library loading (9900631)
0.91.0 (2022-09-19)
- Emit metadata.recorder.type (6358669)
0.90.1 (2022-09-19)
- Faster comment extraction (f6199a6)
- Don't save comment and source in classmap. (c3c8e75)
0.90.0 (2022-09-15)
0.89.0 (2022-09-07)
- Make Rack a runtime dependency (3f2924d)
0.88.0 (2022-08-31)
- Allow recording of error responses (e538556)
- Add HTTP server request support for Rails 7 (bd7f6c9)
0.87.0 (2022-08-19)
- Improve performance of initial hooking (901e262)
0.86.0 (2022-08-10)
- Don't record rspec test when appmap: false (09c4a24)
0.85.0 (2022-08-08)
- Tune method parameters (4a7b575)
0.84.0 (2022-08-04)
- Label ActiveSupport::MessageEncryptor (38a7aeb)
- Label crypto function with algorithm name (a7a9c61)
- Label EncryptedKeyRotatingCookieJar.commit (8e1d015)
- Label OpenSSL::Random (5c947a9)
- Label Random (7572803)
- Label the rest of OpenSSL::Cipher (7863b7b)
- Make activesupport a runtime dependency (140a674)
0.83.6 (2022-08-01)
- Catch an uncaught EINVAL on Windows when attempting to parse source code (9a152d8)
0.83.5 (2022-06-30)
- Remove spec and test from the gem (ab2f6cb)
0.83.4 (2022-06-22)
- Exclude AppMaps from the gem when packaging (a0634f0)
0.83.3 (2022-06-03)
- Eval handler now works correctly even when not tracing (4c9c40a)
0.83.2 (2022-05-11)
- Only warn if Hook::LOG is true (0ffd29e)
0.83.1 (2022-05-05)
- Allow appmap_dir, language and additional properties (a3bb87c)
0.83.0 (2022-04-29)
- #before_setup is lang.eval.safe and deserialize.safe (cf03641)
- pandoc-ruby is system.exec.safe (2b3ec8e)
0.82.0 (2022-04-27)
- Guess 'app' as the source path (090f9f3)
- install command emits language, appmap_dir (f780095)
0.81.1 (2022-04-27)
0.81.0 (2022-04-26)
- Add Ruby 2.5 to the version whitelist (945f7da)
0.80.2 (2022-04-26)
0.80.1 (2022-04-08)
- Don't call #size on complex objects (3f19d1e)
0.80.0 (2022-04-08)
- Don't record SQL within an existing event (ff37a69)
- Env var to EXPLAIN queries (740be75)
- Optionally record parameter schema (b7f41b1)
- query_plan is available whether a current transaction exists or not (6edf774)
- Record parameter and return value size (6e69754)
- Save render return value to a thread-local (f9d1e3f)
0.79.0 (2022-04-06)
- Use a more unique test database name (0eed036)
0.78.0 (2022-04-04)
- Hook and label Kernel#eval (e0c151d)
0.77.4 (2022-04-04)
- Update Rails request handler to the new hook architecture (595b39a)
0.77.3 (2022-03-29)
- Rescue exceptions when calling Class#to_s (f59f2f6)
0.77.2 (2022-03-25)
- Pass the proper openapi-template arg (05cbfde)
0.77.1 (2022-03-24)
- Add 3.1 as a supported version (453f6df)
0.77.0 (2022-03-22)
0.76.0 (2022-03-19)
- Autoload hook handlers (4cc0e70)
0.75.0 (2022-03-17)
- Apply label deserialize.safe to ActiveSupport.run_load_hooks (1f67f9b)
- Print stacks if requested by env var (72ef911)
0.74.0 (2022-03-14)
- Apply special case hook handling to Kernel and instance_eval (25823ff)
- Only apply a method hook to a class that defines the method (ede2236)
- Optimize/improve string-ification of values (c9b6cdb)
- Improve hook performance by using bind_call (e09fce9)
- Label system.exec, string.pack, string.html_safe (963c6dd)
- Log initiation of each builtin hook (902a736)
0.73.0 (2022-03-07)
- Remove GC before test case execution, because it's slow (d38695e)
- Use bind_call when its available (60d4fb5)
0.72.5 (2022-02-17)
0.72.4 (2022-02-17)
- Retain the proper signature on hooked methods (31e2de2)
0.72.3 (2022-02-14)
- No longer bundle @appland/appmap with this gem (7bbad49)
0.72.2 (2022-02-11)
- Ensure request headers includes all relevant fields (e866f68)
0.72.1 (2022-01-31)
- Check that Procs respond to #ruby2_keywords (12863dc), closes #ruby2 #ruby2
- Don't stomp on $CFLAGS (c0b44df)
- Update labels for deserialization (4f51825)
0.72.0 (2022-01-24)
- Fix a stack overflow when an override is prepended (540907b)
- Hook the first class or module in the ancestor chain (8143f14)
- Label JSON, Marshal and YAML with (de)serialize (318d294)
0.71.0 (2022-01-19)
- Add labels for http.session.clear, dao.materialize, log (8e6784b)
0.70.2 (2022-01-12)
- switch to activesupport's deep_dup implementation (7715f28)
0.70.1 (2021-12-10)
- Use require_name as the default package 'path' for builtins (bcb4367)
0.70.0 (2021-12-08)
0.69.0 (2021-12-01)
- Add labels for job creation and canceling (644fafe)
0.68.2 (2021-11-25)
- Missing gems will no longer attempt to be hooked (ac6cf26)
0.68.1 (2021-11-12)
- Support new style of
functions
syntax in appmap.yml (dca327c)
0.68.0 (2021-11-05)
- Require weakref (2f94f80)
0.67.1 (2021-11-02)
- Don't try to index AppMaps when inspecting (ca18861)
0.67.0 (2021-10-21)
- APPMAP_AUTOREQUIRE and APPMAP_INITIALIZE env vars to customize loading behavior (369807e)
- Perform GC before running each test (84c895e)
0.66.2 (2021-10-07)
- fix Travis for Ruby 3.0 (8ec7359)
- Fix warning of circular import (84d456d)
- Properly handle headers which aren't mangled by Rack (8e78e13)
- replace deprecated File.exists? method (80ce5b5)
- Validate presence package configuration (f478d6b)
0.66.1 (2021-09-29)
- Fix compilation on macOS with Xcode 13 (8c66e08)
0.66.0 (2021-09-28)
- Add option for explicit 'require' in function config (1cf6c2a)
- Builtin code such as Ruby Logger can be hooked via appmap.yml (779c9e5)
0.65.1 (2021-09-16)
0.65.0 (2021-09-14)
- Require fileutils as needed (790c3a8)
- Add support for Ruby 3.0, and drop Ruby 2.5 (eba14e1)
0.64.0 (2021-08-24)
- Show config file name in validation messages (95520f8)
0.63.0 (2021-08-24)
- Run yarn install --prod in ./release.sh (8cf73f0)
- Migrate from @appland/cli to @appland/appmap (81854e6)
0.62.1 (2021-08-06)
- Ensure that
node_modules
is present in the release.
0.62.0 (2021-07-21)
- Update @appland/cli version (e41fd65)
- Add 'depends' Rake tasks (a2e6793)
- Add standalone appmap-index command (ee497c9)
- Update @appland/cli to 1.3.0 (5821df3)
- User no longer has to supply the command to run tests (7ac2fed)
0.61.1 (2021-07-16)
- add
DISABLE_SPRING
flag by default (51ffd76)
0.61.0 (2021-07-14)
- check if rails is present in
appmap-agent-validate
(b584c2d)
0.60.0 (2021-07-08)
- add agent-setup-validate command (d9b3bc1)
- validate ruby version (+ better config loading validation) (1756e6c)
0.59.2 (2021-07-08)
- Remove improper reliance on Rails 'try' (c6b5b16)
0.59.1 (2021-07-08)
- Events may be constructed in stages (b0b23f5)
0.59.0 (2021-07-07)
- define commands as objects (1b43203)
0.58.0 (2021-07-06)
- Add
test_commands
sections toappmap-agent-status
executable (4cd8fe5)
0.57.1 (2021-07-02)
- rename agentVersionPorject to agentVersion (905fc5d)
0.57.0 (2021-06-29)
- Update init command to return JSON (1f93e89)
0.56.0 (2021-06-28)
- add appmap-agent-status executable with config/project properties (043f845)
0.55.0 (2021-06-28)
- Avoid calling == (f30ed9f)
- Log dynamic loading of appmap helpers at info level (15dcd3c)
- Remove dynamic loading of rake and rspec helpers (6790970)
- APPMAP_PROFILE_DISPLAY_STRING and APPMAP_OBJECT_STRING (3f5daa8)
- Package name to require can be specified when hooking a gem (fcc5eb6)
- Profile packaging hooking (c020a31)
0.54.4 (2021-06-27)
- Only allow trace_end once per location (10e48cf)
0.54.3 (2021-06-25)
- Get deployment working with packaging of NodeJS code (733c5b8)
0.54.2 (2021-06-25)
- Require appmap/railtie if Rails is defined (66b4cbd)
0.54.1 (2021-06-25)
- Add missing imports and remove deprecation warnings (f1cb087)
- Workaround Ruby bug in 2.7.3 with kwrest (26e34ca)
0.54.0 (2021-06-24)
- Handle new behavior in RSpec ExampleGroup (176d0df)
- Add swagger rake task (0aaae49)
0.53.0 (2021-06-23)
- appmap-agent-setup as a separate command not using GLI library (f0eedb7)
0.52.1 (2021-06-23)
- Better project name guesser (d22f379)
0.52.0 (2021-06-22)
- Bundle NPM package @appland/cli with this gem (945e28c)
0.51.3 (2021-06-22)
- Remove outdate lore, command, and algorithm code (d899989)
0.51.2 (2021-06-22)
- Be less verbose when logging config messages (fba2fd0)
- Method objects must support eql? and hash to ensure they are unique in a Set (f4d5b11)
- Require rails, then appmap/railtie (07967a1)
- Use a hybrid strategy to auto-requiring appmap modules (6fb09b8)
0.51.1 (2021-06-21)
- Add missing require 'yaml' (1187a02)
0.51.0 (2021-06-21)
- Provide default appmap.yml settings (7fa8159)
0.50.0 (2021-06-17)
- Remove appmap configuration in test cases which now occurs automatically (7391c4c)
- Direct minitest and rspec startup messages to the Rails log, when available (15f6444)
- Enroll railtie, rspec, and minitest helpers automatically (1709374)
- railtie enrolls the app in remote recording (3a1f8aa)
0.49.0 (2021-06-16)
- Add refinement to the labels (6a93396)
0.48.2 (2021-05-26)
- Correct the method-hooking logic to capture some missing model methods (be529bd)
0.48.1 (2021-05-25)
- Account for bundle path when normalizing source path (095c278)
- Scan exception messages for non-UTF8 characters (3dcaeae)
0.48.0 (2021-05-19)
- Hook the code only when APPMAP=true (dd9e383)
- Remove server process recording from doc and tests (383ba0a)
0.47.1 (2021-05-13)
- Add the proper template function hooks for Rails 6.0.7 (175f489)
0.47.0 (2021-05-13)
- Emit swagger-style normalized paths instead of Rails-style ones (5a93cd7)
0.46.0 (2021-05-12)
- Record view template rendering events and template paths (973b258)
0.45.1 (2021-05-04)
- Optimize instrumentation and load time (db4a8ce)
0.45.0 (2021-05-03)
- Properly name status_code in HTTP server response (556e87c)
- Record http_client_request and http_client_response (1db32ae)
- Update AppMap format version to 1.5.0 (061705e)
- build: add deployment via
semantic-release
with automatic publication to rubygems (9f183de)
- Support recording and labeling of indivudal functions via
functions:
section in appmap.yml. - Remove deprecated
exe/appmap
. - Add
test_status
andexception
fields to AppMap metadata. - Write AppMap file atomically, by writing to a temp file first and then moving it into place.
- Remove printing of
Inventory.json
file. - Remove source code from
classMap
.
- Record
name
andclass
of each entry in Hash-like parameters, messages, and return values. - Record client-sent headers in HTTP server request and response.
- Record HTTP server request
mime_type
. - Record HTTP server request
authorization
.
- Add missing require
set
. - Check
cls.respond_to?(:singleton_class)
, since it oddly, may not.
- Remove
feature_group
andfeature
metadata from minitest and RSpec AppMaps. - Add
metadata.source_location
.
- Don't rely on
gemspec.source_paths
to list all the source locations in a gem. Hook any code that's loaded from inside thegem_dir
.
- Make best effort to ensure that class name is not
null
in the appmap.json. - Don't try and instrument gems which are a dependency of the this gem.
- Fix a nil exception when applying the exclude list to builtins.
- Adjust some label names to match
provider.*
,format.*
. - Add global
exclude
list to appmap.yml which can be used to definitively exclude specific classes and methods.
- Parse source code comments into function labels.
- Correctly recognize normalized path info for subengines.
- Support Ruby 2.7.
- Remove support for Rails 4.
- Stop recommending
-t appmap
argument forrspec
.
- Recognize and record
normalized_path_info
in Rails applications, per 1.4 AppMap format version.
- Package configuration can be
shallow
, in case which only the initial entry into the package is recorded.
- Fix ParameterFilter deprecation warning.
- Fix parameter mapping with keyword and rest arguments.
- Capture method source and comment.
- appmap.yml package definition may specify
gem
. - Skip loading the railtie if
APPMAP_INITIALIZE
environment variable is set tofalse
.
- Make sure
MethodEvent#display_string
works when the value's#to_s
and/or#inspect
methods have problems.
- Take out hooking of
IO
andLogger
methods. - Enable logging if either
APPMAP_DEBUG
orDEBUG
istrue
.
- Provide a custom display string for files and HTTP requests.
- Report
mime_type
on HTTP response.
- Only warn once about problems determining database version for an ActiveRecord connection.
- Ensure that hooking a method doesn't change its arity.
- Make sure
AppMap:Rails::SQLExaminer::ActiveRecordExaminer.server_version
only callsActiveRecord::Base.connection.database_version
if it's available. - Fix
AppMap:Rails::SQLExaminer::ActiveRecordExaminer.database_type
returns:postgres
in all supported versions of Rails.
- Fix a crash in
singleton_method_owner_name
that occurred if__attached__.class
returned something other than aModule
or aClass
.
- Add an extension that gets the name of the owner of a singleton method without calling
any methods that may have been redefined (e.g.
#to_s
or.name
).
- Ensure that capturing events doesn't change the behavior of a hooked method that uses
Time.now
. For example, if a test expects thatTime.now
will be called a certain number of times by a hooked method, that expectation will now be met. - Make sure
appmap/cucumber
requiresappmap
.
- Records builtin security and I/O methods from
OpenSSL
,Net
, andIO
.
- Added command
AppMap.open
to open an AppMap in the browser.
- Removes un-necessary fields from
return
events.
- Add the ability to hook methods by default, and optionally add labels to them in the
classmap. Use it to hook
ActiveSupport::SecurityUtils.secure_compare
.
- Add support for Minitest.
- Add
lib/appmap/record.rb
, which can berequire
d to record the rest of the process.
- Fix the
defined_class
recorded in an appmap for an instance method included in a class at runtime. - Only include the
static
attribute oncall
events in an appmap. Determine its value based on the receiver of the method call.
- Change behavior of AppMap.record to return a complete AppMap as a Hash.
- Update README with information about recording Cucumber tests.
- AppMap.initialize automatically runs when
AppMap
is required, unless disabled by environment variableAPPMAP_INITIALIZE=false
. - AppMap.hook no longer takes a
configuration
argument. - Add AppMap::Util.scenario_filename.
- Add AppMap.record to programatically record and capture an AppMap of a Ruby block.
- Fix a bug that caused duplicate entries in the list of frameworks that appear
in the
metadata
section of an appmap.
- appmap upload is removed. Upload functionality has been moved to the AppLand CLI.
- Stop checking a whitelist to see if each SQL query should be recorded. Record all queries.
- Ensure that caught exceptions are re-raised.
- Add safety around indexing potentially nil backtrace locations.
- Reports
exceptions
in function return attributes.
- Fixes an issue which prevented a remote recording from returning scenario data successfully.
- Remote recording routes now return descriptive status codes as intended.
- Remote recording routes now have the correct
Content-Type
header.
Internals of appmap-ruby
have been changed to record each method event using alias_method
,
rather than TracePoint
. Performance is much better as a result.
WARNING Breaking changes
- Rack apps no longer generate
http_server_request
events. - appmap inspect has been removed.
appmap-ruby
no longer parses the source tree. Instead, it observes the methods as they are loaded by the VM. So, to get a class map, you have to create a recording. TheRSpec
recorder still prints an inventory toInventory.appmap.json
when it exits. The class map in this file contains every class and method which was loaded by any of the tests.
- appmap stats command added.
- RSpec recorder generates an "inventory" (AppMap with classMap, without events) named
Inventory.appmap.json
. - appmap inspect generates an inventory AppMap which includes
version
,metadata
, andclassMap
. Previously, the file output by this command was the class map represented as an array.
- Scenario data includes
recorder
andclient
info, describing how the data was recorded.
Updated to AppMap file format version 1.2.
- Event
message
is now an array of parameter objects. - The value of each
appmap:
tags in an RSpec is recorded as alabel
in the AppMap file metadata. layout
is removed from AppMap file metadata.
- RSpec feature and feature group names can be inferred from example group and example names.
- Stop using
ActiveSupport::Inflector.transliterate
, since it can cause exceptions. - Handle StandardError which occurs while calling
#inspect
of an object.
- Now tested with Rails 4, 5, and 6.
- Now tested with Ruby 2.5 and 2.6.
explain_sql
is no longer collected.appmap/railtie
is automatically required when running in a Rails environment.
WARNING Breaking changes
- appmap upload expects arguments
user
andorg
. - appmap upload receives and retransmits the scenario batch id
- assigned by the server.
WARNING Breaking changes
- Record button removed. Frontend interactions are now recorded with a browser extension.
As a result,
AppMap::Middleware::RecordButton
has been renamed toAppMap::Middleware::RemoteRecording
- Record button moved to the bottom of the window.
WARNING Breaking changes
- AppMap version updated to 1.1
- Event
parameters
are reported as an array rather than a map, so that parameter order is preserved. - Event
receiver
reports thereceiver/this/self
parameter of each method call.
- RSpec recorder won't try to modify a frozen string.
- SQL queries are reported for SQLite.
- SQL queries are reported for ActiveRecord.
- Record button integrates into any HTML UI and provides a button to record and upload AppMaps.
- Information about
language
andframeworks
is provided in the AppMapmetadata
.
AppMap::Algorithm::PruneClassMap
prunes a class map so that only functions, classes and packages which are referenced by some event are retained.
appmap/rspec
only records trace events which happen during an example block.before
andafter
events are excluded from the AppMap.appmap/rspec
exportsfeature
andfeature_group
attributes to the AppMapmetadata
section.
appmap upload
accepts multiple arguments, to upload multiple files in one command.
appmap/railtie
is provided to integrate AppMap recording into Rails apps.- Use
gem :appmap, require: %w[appmap appmap/railtie]
to activate. - Set Rails configuration setting
config.appmap.enabled = true
to enable recording of the app via the Railtie, and to enable recording of RSpec tests viaappmap/rspec
. - In a non-Rails environment, set
APPMAP=true
to to enable recording of RSpec tests.
- Use
- SQL queries are reported as AppMap event
sql_query
data. self
attribute is removed fromcall
events.
- Web server requests and responses through WEBrick are reported as AppMap event
http_server_request
data. - Rails
params
hash is reported as an AppMap eventmessage
data. - Rails
request
is reported as an AppMap eventhttp_server_request
data.
- RSpec test recorder is added.
- 'inspect', 'record' and 'upload' commands are converted into a unified 'appmap' command with subcommands.
- Config file name is changed from .appmap.yml to appmap.yml.
appmap.yml
configuration format is updated.
Initial release.