Releases: shlinkio/shlink
v1.17.0
Added
-
#377 Updated
visit:locate
command (formerlyvisit:process
) to automatically update the GeoLite2 database if it is too old or it does not exist.This simplifies processing visits in a container-based infrastructure, since a fresh container is capable of getting an updated version of the file by itself.
It also removes the need of asynchronously and programmatically updating the file, which deprecates the
visit:update-db
command. -
#373 Added support for a simplified config. Specially useful to use with the docker container.
Changed
- #56 Simplified supported cache, requiring APCu always.
Deprecated
- #406 Deprecated
PUT /short-urls/{shortCode}
REST endpoint in favor ofPATCH /short-urls/{shortCode}
.
Removed
Fixed
- Nothing
v1.16.3
Added
- Nothing
Changed
- #153 Updated to doctrine/migrations version 2.0.0
- #376 Allowed
visit:update-db
command to not return an error exit code even if download fails, by passing the-i
flag. - #341 Improved database tests so that they are executed against all supported database engines.
Deprecated
- Nothing
Removed
- Nothing
Fixed
- #382 Fixed existing short URLs not properly checked when providing the
findIfExists
flag.
v1.16.2
v1.16.1
v1.16.0
Added
-
#304 Added health endpoint to check healthiness of the service. Useful in container-based infrastructures.
Call [GET /rest/health] in order to get a response like this:
HTTP/1.1 200 OK Content-Type: application/health+json Content-Length: 681 { "status": "pass", "version": "1.16.0", "links": { "about": "https://shlink.io", "project": "https://github.com/shlinkio/shlink" } }
The status code can be
200 OK
in case of success or503 Service Unavailable
in case of error, while thestatus
property will be one ofpass
orfail
, as defined in the Health check RFC. -
#279 Added new
findIfExists
flag to the[POST /short-url]
REST endpoint and theshort-urls:generate
CLI command. It can be used to return existing short URLs when found, instead of creating new ones.Thanks to this flag you won't need to remember if you created a short URL for a long one. It will just create it if needed or return the existing one if possible.
The behavior might be a little bit counterintuitive when combined with other params. This is how the endpoint behaves when providing this new flag:
- Only the long URL is provided: It will return the newest match or create a new short URL if none is found.
- Long url and custom slug are provided: It will return the short URL when both params match, return an error when the slug is in use for another long URL, or create a new short URL otherwise.
- Any of the above but including other params (tags, validSince, validUntil, maxVisits): It will behave the same as the previous two cases, but it will try to exactly match existing results using all the params. If any of them does not match, it will try to create a new short URL.
-
#336 Added an API test suite which performs API calls to an actual instance of the web service.
Changed
- #342 The installer no longer asks for a charset to be provided, and instead, it shuffles the base62 charset.
- #320 Replaced query builder by plain DQL for all queries which do not need to be dynamically generated.
- #330 No longer allow failures on PHP 7.3 envs during project CI build.
- #335 Renamed functional test suite to database test suite, since that better describes what it actually does.
- #346 Extracted installer as an independent tool.
- #261 Increased mutation score to 70%.
Deprecated
- #351 Deprecated
config:generate-charset
andconfig:generate-secret
CLI commands.
Removed
- Nothing
Fixed
v1.15.1
Added
- #162 Added non-rest endpoints to swagger definition.
Changed
- #312 Now all config files both in
php
andjson
format are loaded fromconfig/params
folder, easing users to provided customizations to docker image. - #226 Updated how table are rendered in CLI commands, making use of new features in Symfony 4.2.
- #321 Extracted entities mappings from entities to external config files.
- #308 Automated docker image building.
Deprecated
- Nothing
Removed
- #301 Removed custom
AccessLogFactory
in favor of the implementation included in zendframework/zend-expressive-swoole v2.2.0
Fixed
v1.15.0
Added
-
#208 Added initial support to run shlink using swoole, a non-blocking IO server which improves the performance of shlink from 4 to 10 times.
Run shlink with
./vendor/bin/zend-expressive-swoole start
to start-up the service, which will be exposed in port8080
.Adding the
-d
flag, it will be started as a background service. Then you can use the./vendor/bin/zend-expressive-swoole stop
command in order to stop it. -
#266 Added pagination to
GET /short-urls/{shortCode}/visits
endpoint.In order to make it backwards compatible, it keeps returning all visits by default, but it now allows to provide the
page
anditemsPerPage
query parameters in order to configure the number of items to get.
Changed
- #267 API responses and the CLI interface is no longer translated and uses english always. Only not found error templates are still translated.
- #289 Extracted coding standard rules to a separated package.
- #273 Improved code coverage in repository classes.
Deprecated
- Nothing
Removed
- Nothing
Fixed
v1.14.1
Added
- Nothing
Changed
- #260 Increased mutation score to 65%.
Deprecated
- Nothing
Removed
- Nothing
Fixed
v1.14.0
Added
-
#236 Added option to define a redirection to a custom URL when a user hits an invalid short URL.
It only affects URLs matched as "short URL" where the short code is invalid, not any 404 that happens in the app. For example, a request to the path
/foo/bar
will keep returning a 404.This new option will be asked by the installer both for new shlink installations and for any previous shlink version which is updated.
-
#189 and #240 Added new GeoLite2-based geolocation service which is faster and more reliable than previous one.
It does not have API limit problems, since it uses a local database file.
Previous service is still used as a fallback in case GeoLite DB does not contain any IP address.
Changed
- #241 Fixed columns in
visit_locations
table, to be snake_case instead of camelCase. - #228 Updated how exceptions are serialized into logs, by using monlog's
PsrLogMessageProcessor
. - #225 Performance and maintainability slightly improved by enforcing via code sniffer that all global namespace classes, functions and constants are explicitly imported.
- #196 Reduced anemic model in entities, defining more expressive public APIs instead.
- #249 Added functional-php to ease collections handling.
- #253 Increased
user_agent
column length invisits
table to 512. - #256 Updated to Infection v0.11.
- #202 Added missing response examples to OpenAPI docs.
Deprecated
- Nothing
Removed
- Nothing
Fixed
- #223 Fixed PHPStan errors produced with symfony/console 4.1.5
v1.13.2
Added
- #233 Added PHP 7.3 to build matrix allowing its failure.
Changed
- #235 Improved update instructions (thanks to tivyhosting).
Deprecated
- Nothing
Removed
- Nothing
Fixed
-
#237 Solved errors when trying to geo-locate
null
IP addresses.Also improved how visitor IP addresses are discovered, thanks to akrabat/ip-address-middleware package.