# Change Log

Starting with v2.0.0, all notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).


## Following the release of version 5.0.2 on October 13, 2023, an automated changelog has been implemented, this document is an archived copy of the previous changelog

## v5.0.2 - 2023-09-29
* Correct a Digest call making this thread-safe and allowing for concurrent r10k deploys.
  Thanks to @cmd-ntrf for fixing it and to @baurmatt for tracking it down in the first place.

## v5.0.1 - 2023-07-10
* Update README to reflect accurate Ruby requirement and `faraday` gem dependency
## v5.0.0 - 2023-05-07

* Ruby 3.2 support.
* LRU caching for HTTP response caching.
* Raise a ModuleNotFound error instead of just nil when a module is not found.

## v4.1.0 - 2023-02-21

* Add upload method functionality.
* Allows the user to search by an array of endorsements.

## v4.0.0 - 2022-11-30

* Breaking: The `puppet_forge` gem now requires at least Ruby 2.6.0
* Update `faraday` gem to 2.x series

## v3.2.0 - 2021-11-09

* Allow requests to follow redirects
* Remove the `gettext-setup` gem dependency, which was unused

## v3.1.0 - 2021-08-20

### Changed

* Update `PuppetForge::Connection.authorization` so that it prepends the
  required `Bearer ` string automatically to values that look like Forge API
  keys. This won't affect values that already include `Bearer `.

## v3.0.0 - 2021-01-28

* Breaking: The `puppet_forge` gem now requires at least Ruby 2.4.0.
* Update `faraday` and `faraday_middleware` gem dependencies to 1.x series.
* Update optional `typhoeus` dependency to `>= 1.4` to maintain compatibility with `faraday`.

## v2.3.4 - 2020-03-31

* Update the forge API url to `forgeapi.puppet.com` (instead of using the older puppetlabs.com domain).
* Allow versions of the `faraday_middleware` dependency up to 0.15.

## v2.3.3 - 2020-02-20

### Changed

* Allow versions of faraday up to 0.18

## v2.3.2 - 2020-02-05

### Fixed

* Catch and handle the new `Faraday::TimeoutError`s which are occasionally
  surfaced by the the typheous adapter with more recent verions of libcurl, and
  log them the same way that `Faraday::ConnectionFailed` errors are already
  logged.

### Changed

* Allow for using `faraday_middleware` versions in the 0.13.x series.

## v2.3.1 - 2019-11-15

### Fixed

* Fixed an issue where proxy configurations were being ignored by expanding the range of acceptable versions of the `faraday` gem dependency and specifically excluding the version that was ignoring proxy configuration options.

## v2.3.0 - 2019-07-09

### Changed

* Updated `PuppetForge::V3::Release#verify` method to use `file_sha256` checksum from Forge API when available.
* Added an `allow_md5` param to `PuppetForge::V3::Release#verify` method to control whether or not fallback to MD5 checksum will be allowed in cases where SHA-256 checksum is not available.

## v2.2.9 - 2017-12-01

### Changed

* Loosened dependency on `faraday` and `faraday_middleware` gems to include recent releases.

## v2.2.8 - 2017-11-09

### Added

Created PuppetForge::Util class with a single method, version_valid?, in order to
drop the r10k dependency on semantic_puppet.

## v2.2.7 - 2017-06-30

### Changed

* Updated dependency on `semantic_puppet` to `~> 1.0`.

## v2.2.6 - 2017-06-27

### Fixed

* Fixed an issue when attempting to assign a non-String value to `PuppetForge.host`.

## v2.2.5 - 2017-06-26

### Fixed

* (FORGE-338) Fixed an issue where `V3::Release.download_url` returned an incorrect value when `PuppetForge.host` included
  a path prefix. (Thanks to [Jainish Shah](https://github.com/jainishshah17) for the report and initial fix proposal.)

## v2.2.4 - 2017-04-17

### Added

* PuppetForge::Connection now has .accept\_language and .accept\_language= class methods providing a way to set the
  'Accept-Language' header for outbound requests.

## v2.2.3 - 2017-01-17

### Changed

* Fixed an issue that was preventing PuppetForge.host from honoring any given path prefix.
* Upgraded gettext-setup dependency to 0.11 release.

## v2.2.2 - 2016-07-06

### Changed

* Externalized all user facing strings with gettext to support future localization work.

## v2.2.1 - 2016-05-24

### Changed

* Fixed an issue where certain types of connection failures raised a spurious "method missing" error instead of the underlying
  exception.
* When setting PuppetForge::Connection.proxy, an empty string will now be treated as nil. If no proxy has yet been configured,
  setting to an empty string will have no effect. If a proxy has already been configured, setting to nil will unset the existing
  value.

## v2.2.0 - 2016-05-10

### Changed

* puppet\_forge's optional dependency on Typhoeus now searches for a gem matching '~> 1.0.1' so it will pick up more recent versions.
  NOTE: This means if you have a version of Typhoeus installed that is less than 1.0.1, puppet\_forge will no longer use the Typhoeus
  adapter and will fall back to Ruby's Net::HTTP library.

## v2.1.5 - 2016-04-13

### Added

* PuppetForge::Connection now has .proxy and .proxy= class methods providing a more reliable way of configuring an HTTP proxy.

### Changed

* Cached connection objects will now be automatically discarded when proxy or authorization config has changed.

## v2.1.4 - 2016-04-01

### Changed

* Bug in usage of minitar filenames led to ignored tar files with tar file length of >100 chars.

## v2.1.3 - 2016-01-25

### Changed

* PuppetForge::V3::Release.download will now use the "file\_uri" field of the Release API response to calculate the URI to download from. (Thanks to [ericparton](https://github.com/ericparton) for the contribution.)

## v2.1.2 - 2015-12-16

### Changed

* Runtime dependency on "faraday\_middleware" gem updated to allow 0.10.x releases.

## v2.1.1 - 2015-10-06

### Changed

* Bug in error message around missing release on forge caused inappropriate error.

## v2.1.0 - 2015-08-20

### Added

* PuppetForge::ReleaseForbidden added to acknowledge 403 status returned from release download request

## v2.0.0 - 2015-08-13

### Added

* PuppetForge::V3::Release can now verify the md5, unpack, and install a release tarball.
* PuppetForge::Middleware::SymbolifyJson to change Faraday response hash keys into symbols.
* PuppetForge::V3::Metadata to represent a release's metadata as an object.
* PuppetForge::Connection to provide Faraday connections.

### Changed

* Failed API requests, such as those for a module that doesn't exist, throw a Faraday::ResourceNotFound error.
* API requests are sent through Faraday directly rather than through Her.
* PuppetForge::V3::Base#where and PuppetForge::V3::Base#all now send an API request immediately and return a paginated collection.

### Removed

* Dependency on Her (also removes dependency on ActiveSupport).
